dra-nomic-embed / README.md
jonasreyes's picture
Upload folder using huggingface_hub
d96dfdf verified
|
Raw
History Blame Contribute Delete
6.14 kB
---
language:
- es
- en
license: apache-2.0
tags:
- onnx
- feature-extraction
- embeddings
- nomic-embed-text
- sentence-similarity
- cpu-optimized
- int8
- quantized
pipeline_tag: feature-extraction
library_name: onnx
---
# dra-nomic-embed (Standalone ONNX: FP32 & Dynamic INT8)
> Modelos de embeddings de alto rendimiento optimizados para **inferencia ultra-rápida y soberana en CPU (sin PyTorch ni GPU)**.
Desarrollado como motor central de búsqueda semántica local para **[DRA (DeepRoot Agent)](https://gitlab.com/jonasreyes/dra)**, el agente autónomo de nueva generación creado por **Jonás Reyes** tras la evolución del proyecto fundacional **[DeepRoot](https://gitlab.com/jonasreyes/deeproot)** hacia la Inteligencia Artificial soberana.
---
## 📊 Especificaciones Técnicas
| Propiedad | Valor |
| :--- | :--- |
| **Modelo Base Original** | [`nomic-ai/nomic-embed-text-v1.5`](https://huggingface.co/nomic-ai/nomic-embed-text-v1.5) |
| **Formato de Inferencia** | ONNX Runtime (C++ / SIMD AVX2/FMA/VNNI) |
| **Dimensiones Vectoriales** | 768 (Soporta Matryoshka downsampling) |
| **Contexto Máximo** | **8.192 tokens** |
| **Dependencias en Runtime** | `onnxruntime` + `tokenizers` (Cero PyTorch / Cero Transformers) |
| **Licencia del Modelo Base** | Apache 2.0 |
---
## 🔬 Benchmark en Hardware Real (Intel Core i5-4308U Dual-Core @ 2.80GHz, 2014)
Evaluación comparativa procesando **1.200 textos técnicos reales** (código fuente, consultas SQL, documentación y arquitectura):
| Variante | Archivo | Tamaño en Disco / RAM | Velocidad (CPU Dual-Core) | Retención de Fidelidad |
| :--- | :--- | :--- | :--- | :--- |
| **INT8 (Recomendado)** | `model_int8.onnx` | **131.49 MB (-74.8%)** | **7.8 textos/seg (1.36x más rápido)** | **93.34%** similitud coseno |
| **FP32 (Original)** | `model.onnx` | 522.25 MB | 5.7 textos/seg | 100% (Referencia base) |
> 🚀 **Proyección en Hardware Moderno**: Si en un procesador dual-core de 2014 entrega 7.8 textos/segundo, en procesadores modernos (Intel Core Ultra, AMD Ryzen 7000/9000, Apple Silicon M-Series) el rendimiento supera los **cientos de textos por segundo** con latencias inferiores a 5 ms.
---
## 🛠️ Pipeline de Dependencias Efímeras: ¿Cómo se creó este modelo?
Para evitar arrastrar gigabytes de dependencias en entornos de producción:
1. **Entorno de Compilación Aislado**: Se instalaron temporalmente `optimum[exporters]`, `torch` y `transformers`.
2. **Exportación a Grafo ONNX**: Se compiló el modelo base `nomic-ai/nomic-embed-text-v1.5` a un grafo unificado optimizado.
3. **Cuantización Dinámica INT8**: Se generó la versión compacta optimizada para instrucciones vectoriales.
4. **Purga Total de Dependencias**: Inmediatamente tras la exportación, `torch` y todas las librerías pesadas fueron **completamente eliminadas y desinstaladas**, garantizando un paquete ultra-ligero y autónomo.
---
## 📥 Métodos de Instalación y Descarga
### Opción A: Descarga Manual Rápida en Terminal
```bash
# Crear directorio de destino
mkdir -p ~/.dra/models/nomic-embed/
# Descargar desde Hugging Face
curl -L https://huggingface.co/jonasreyes/dra-nomic-embed/resolve/main/model_int8.onnx -o ~/.dra/models/nomic-embed/model_int8.onnx
curl -L https://huggingface.co/jonasreyes/dra-nomic-embed/resolve/main/tokenizer.json -o ~/.dra/models/nomic-embed/tokenizer.json
curl -L https://huggingface.co/jonasreyes/dra-nomic-embed/resolve/main/config.json -o ~/.dra/models/nomic-embed/config.json
# (Opcional) Descargar también la variante FP32 completa:
curl -L https://huggingface.co/jonasreyes/dra-nomic-embed/resolve/main/model.onnx -o ~/.dra/models/nomic-embed/model.onnx
```
### Opción B: Uso Automático con DRA
```bash
# Instalación automática con DRA (descarga o compila según disponibilidad)
uv run dra setup
# Seleccionar modelo activo
uv run dra config set embed-model int8 # Versión ultra-rápida (131 MB)
uv run dra config set embed-model fp32 # Versión completa (522 MB)
```
---
## 💻 Uso en Python Puro (Sin PyTorch)
```python
import numpy as np
from onnxruntime import InferenceSession, SessionOptions, GraphOptimizationLevel
from tokenizers import Tokenizer
# 1. Cargar tokenizador y sesión ONNX (INT8 o FP32)
tokenizer = Tokenizer.from_file("tokenizer.json")
opts = SessionOptions()
opts.graph_optimization_level = GraphOptimizationLevel.ORT_ENABLE_ALL
session = InferenceSession("model_int8.onnx", sess_options=opts, providers=["CPUExecutionProvider"])
# 2. Generar embeddings
texts = ["search_document: Arquitectura de agentes autónomos y soberanía en IA."]
enc = tokenizer.encode_batch(texts)
max_len = max(len(e.ids) for e in enc)
input_ids = np.array([e.ids + [0] * (max_len - len(e.ids)) for e in enc], dtype=np.int64)
attention_mask = np.array([e.attention_mask + [0] * (max_len - len(e.attention_mask)) for e in enc], dtype=np.int64)
outputs = session.run(None, {"input_ids": input_ids, "attention_mask": attention_mask})
embeddings = outputs[0][:, 0, :] # Mean pooling / CLS representation
```
---
## 🔐 Checksums de Integridad (SHA-256)
| Archivo | Tamaño | SHA-256 |
| :--- | :--- | :--- |
| `model_int8.onnx` | 131.49 MB | `650fd2bde209bd85d0a842f52182f6cd347044a8fadba72b346840a4d5bfca63` |
| `model.onnx` | 522.25 MB | `1c1005bf14c833d0bb52024b6175409efe745245d0c21795b4d0bec4f55d74e9` |
| `tokenizer.json` | 711.39 KB | `d241a60d5e8f04cc1b2b3e9ef7a4921b27bf526d9f6050ab90f9267a1f9e5c66` |
---
## 🌐 Antecedentes del Proyecto
- **[DeepRoot](https://gitlab.com/jonasreyes/deeproot)**: Proyecto fundacional desarrollado por Jonás Reyes que definió las bases de arquitectura de sistemas y soberanía digital.
- **[DRA (DeepRoot Agent)](https://gitlab.com/jonasreyes/dra)**: Agente autónomo local-first, multi-proveedor y seguro, diseñado para competir sólidamente con las mejores herramientas de desarrollo asistido del estado del arte.
---
## 📄 Licencia
El modelo original `nomic-embed-text-v1.5` está bajo licencia **Apache 2.0**.
Este repositorio distribuye artefactos optimizados en formato ONNX; no modifica la arquitectura base del modelo.