Python Data Science Program
📓 Abrir notebook en GitHub

Clase 167 — ONNX y ONNX Runtime: portabilidad e inference optimizada

Parte: 2 — Deep Learning · Fuente: ONNX docs + ONNX Runtime team blogs. ⏱️ Duración estimada: 80 min.

🎯 Objetivo

Dominar ONNX (formato intermedio) y ONNX Runtime (runtime cross-platform) — la solución portable para inference: entrenás en TF/PyTorch/JAX, exportás a ONNX, corrés en cualquier hardware (CPU, GPU NVIDIA, GPU AMD, mobile, browser, edge). Conocer TensorRT (NVIDIA-specific, mayor performance).

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. PyTorch → ONNX: torch.onnx.export(model, dummy_input, 'model.onnx', opset_version=17, input_names=['input'], output_names=['output']).
  2. TF → ONNX: python -m tf2onnx.convert --saved-model dir/ --output model.onnx --opset 17.
  3. Inference: sess = ort.InferenceSession('model.onnx', providers=['CUDAExecutionProvider', 'CPUExecutionProvider']). Verificar outputs.
  4. Graph optimization: sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL.
  5. Quantization: onnxruntime.quantization.quantize_dynamic('model.onnx', 'model_q.onnx', weight_type=QuantType.QUInt8).

📝 Homework verificable

Exportar y deployar un modelo CNN ya entrenado:

  1. PyTorch ResNet50 preentrenado → ONNX.
  2. Quantization dynamic.
  3. Comparar latencia + accuracy: PyTorch CUDA vs ORT CUDA vs ORT CPU vs ORT CPU quantized.
  4. Verificar correctness (output diff < 1e-4 vs PyTorch).

Criterio de aceptación: ORT CUDA ≥ PyTorch CUDA en velocidad; quantization reduce tamaño 4× con < 1 pp accuracy loss.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
opset version X not supported EP version vieja. Fix: actualizar onnxruntime.
Output diff vs framework grande Conversión incompleta (custom ops). Fix: verbose=True en export, identificar op problemática.
CUDA provider no disponible Falta onnxruntime-gpu install. Fix: pip install onnxruntime-gpu.
Dynamic axes mal Mal export. Fix: dynamic_axes={'input': {0: 'batch'}}.
Quantization rompe accuracy Modelo sensible. Fix: usar static quantization con calibration set.

❓ Preguntas frecuentes

❓ ONNX vs TensorRT?

ONNX Runtime + TensorRT EP combina ambos: ORT como interfaz, TensorRT como backend para GPUs NVIDIA. Best of both.

❓ ONNX en mobile?

ONNX Runtime Mobile: optimizado para Android/iOS. Soporta CoreML, NNAPI delegates.

❓ ONNX en browser?

ONNX.js — corre en WebGL/WebGPU/WASM.

❓ LLMs con ONNX?

Posible (especialmente con onnxruntime-genai). vLLM/TGI siguen siendo mejores para LLMs grandes.

❓ Triton vs ORT?

Triton (NVIDIA) puede servir modelos ONNX como uno de sus backends. Triton para infra multi-modelo; ORT solo para inference.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 168 — Despliegue en Vertex AI