Saltar al contenido
> 💻 🧠 Código 1001 > LLM: artículos, materiales prácticos y recursos > ¿Qué es ONNX (Open Neural Network Exchange)?

¿Qué es ONNX (Open Neural Network Exchange)?

  • por

En términos simples, ONNX es un “traductor” universal para redes neuronales, que permite a los desarrolladores mover modelos libremente de un entorno a otro.

Analogía: Si una red neuronal es un documento complejo, ONNX es el formato PDF. Puedes crear un documento en cualquier editor (PyTorch, TensorFlow), pero al guardarlo como PDF, se abrirá rápidamente y de manera consistente en cualquier dispositivo utilizando un lector universal (ONNX Runtime).


Cómo funciona ONNX

ONNX representa cualquier modelo como un grafo computacional. Este grafo consta de nodos (operaciones matemáticas u operadores) y aristas (flujos de datos en forma de tensores). El estándar define un conjunto unificado de operadores y formatos de datos que todos los instrumentos compatibles entienden.

El flujo de trabajo generalmente incluye dos pasos clave:

  1. Exportación: Un modelo entrenado en un framework (por ejemplo, PyTorch) se convierte en un archivo .onnx.
  2. Despliegue (Inferencia): El archivo .onnx resultante se ejecuta utilizando un entorno de ejecución especializado y de alto rendimiento: ONNX Runtime.

Ventajas clave de ONNX

Compatibilidad de frameworks:
La principal ventaja es la libertad para mover modelos. Por ejemplo, puedes entrenar un modelo en PyTorch, ideal para investigación, y luego desplegarlo con ONNX Runtime, optimizado para ejecución rápida en producción.

Optimización de hardware:
Los fabricantes de hardware (NVIDIA, Intel, ARM) ofrecen bibliotecas optimizadas para ejecutar modelos en formato ONNX. Esto permite alcanzar el máximo rendimiento en distintos equipos sin necesidad de adaptar el modelo para cada plataforma.

Flexibilidad y durabilidad:
El estándar no obliga a los desarrolladores a usar un solo stack tecnológico. Si surge un framework más eficiente, los modelos existentes se pueden transferir fácilmente.


ONNX Runtime: El motor de ejecución

ONNX Runtime es un componente clave del ecosistema. Es un entorno de alto rendimiento para ejecutar modelos .onnx. Desarrollado por Microsoft, es de código abierto y está diseñado para maximizar la velocidad de cálculo del grafo ONNX en cualquier dispositivo, desde servidores potentes hasta teléfonos móviles. Runtime soporta múltiples lenguajes (Python, C++, C#, Java) y plataformas (Windows, Linux, Android, iOS).


Ejemplo práctico: de PyTorch a ONNX Runtime

Exportar un modelo desde PyTorch:

import torch

# Tu modelo entrenado
model = YourSuperModel() 
# Entrada de ejemplo para definir la estructura del grafo
dummy_input = torch.randn(1, 3, 224, 224) 

torch.onnx.export(model, dummy_input, "model.onnx")

Ejecutar el modelo con ONNX Runtime:

import onnxruntime as ort
import numpy as np

# Crear sesión de inferencia
session = ort.InferenceSession("model.onnx")

# Preparar datos de entrada
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
input_name = session.get_inputs()[0].name

# Obtener predicción
result = session.run(None, {input_name: input_data})
print(result)

ONNX y Hugging Face: El estándar de oro para NLP

Para modelos complejos como los transformadores de Hugging Face, el proceso de exportación se simplifica con la biblioteca Optimum, que actúa como un “puente oficial” manejando automáticamente todos los detalles de conversión.

Instalar paquetes necesarios:

pip install transformers onnx onnxruntime optimum[onnxruntime]

Exportar y ejecutar un modelo de Hugging Face:

from optimum.onnxruntime import ORTModelForSequenceClassification
from transformers import AutoTokenizer, pipeline

model_id = "distilbert-base-uncased-finetuned-sst-2-english"

# Paso 1: Exportar modelo a ONNX (una sola vez)
model = ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model.save_pretrained("./onnx-model/")
tokenizer.save_pretrained("./onnx-model/")

# Paso 2: Ejecutar modelo ONNX optimizado
classifier = pipeline("text-classification", model="./onnx-model/")
result = classifier("ONNX y Hugging Face son una combinación poderosa!")
print(result)  # Salida: [{'label': 'POSITIVE', 'score': 0.9998...}]

Clave del rendimiento: Optimización y Cuantización

ONNX Runtime no solo ejecuta modelos, también los acelera. Uno de los métodos principales es la cuantización.

En palabras simples: Es un proceso que “simplifica” las operaciones matemáticas dentro del modelo. En lugar de cálculos de alta precisión (FP32 como 3.14159), el modelo utiliza enteros más rápidos y ligeros de 8 bits (INT8, de -128 a 127).

Beneficios de la cuantización:

  • 🚀 Mayor velocidad: Las operaciones con enteros son mucho más rápidas.
  • 💾 Tamaño reducido: El modelo se hace aproximadamente 4 veces más pequeño.
  • 🔋 Eficiencia energética: Reduce el consumo de energía, crítico para dispositivos móviles y edge.

Dónde se utiliza ONNX

ONNX se ha convertido en un estándar industrial y se aplica ampliamente:

  • Servicios en la nube: Azure ML, AWS SageMaker, Google Cloud AI.
  • Aplicaciones de escritorio y móviles: ONNX Runtime funciona en Windows, Linux, macOS, Android y iOS.
  • Dispositivos edge: Ejecuta modelos de IA eficientemente en dispositivos con recursos limitados (cámaras, drones, sensores industriales).

Limitaciones

A pesar de sus ventajas, hay limitaciones. La conversión de arquitecturas muy complejas o nuevas puede presentar problemas si algún operador específico aún no tiene un equivalente en ONNX. La comunidad trabaja activamente para ampliar el soporte.


Enlaces útiles


Если хочешь, я могу сделать ещё более краткую, блог-дружественную версию на испанском, чтобы текст был легче читаем и сохранил все примеры.

Хочешь, чтобы я это сделал?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *