ONNX define un formato de grafo computacional: los nodos representan operaciones (multiplicación de matrices, convolución, atención), las aristas representan tensores que fluyen entre operaciones. El grafo incluye toda la información necesaria para ejecutar el modelo: arquitectura, pesos, formas de entrada/salida y definiciones de operadores. ONNX Runtime (Microsoft) es el runtime más popular, soportando CPU, GPU y aceleradores especializados.
ONNX es más útil cuando: (1) necesitas desplegar en hardware que no es NVIDIA (Intel, AMD, ARM, móvil) donde PyTorch CUDA no está disponible, (2) necesitas la máxima velocidad de inferencia y las optimizaciones de ONNX Runtime superan a PyTorch, o (3) estás integrando un modelo en una aplicación que no es Python (ONNX Runtime tiene bindings para C++, C#, Java y JavaScript). Para inferencia estándar en GPU con LLMs grandes, los frameworks de servicio especializados (vLLM, TGI) típicamente superan a ONNX.
No todas las operaciones de PyTorch se convierten limpiamente a ONNX, especialmente operadores personalizados y arquitecturas dinámicas. Los modelos complejos pueden requerir intervención manual para exportarse correctamente. ONNX también va por detrás de las arquitecturas de vanguardia — los nuevos tipos de modelos pueden no ser soportados hasta que se agreguen operadores ONNX. Para inferencia de LLMs específicamente, el ecosistema GGUF/llama.cpp y TensorRT-LLM se han vuelto más populares que ONNX para la mayoría de los casos de uso.