ONNX define um formato de grafo computacional: nós representam operações (multiplicação de matrizes, convolução, atenção), arestas representam tensores fluindo entre operações. O grafo inclui toda a informação necessária para executar o modelo: arquitetura, pesos, formatos de entrada/saída e definições de operadores. ONNX Runtime (Microsoft) é o runtime mais popular, suportando CPU, GPU e aceleradores especializados.
ONNX é mais útil quando: (1) você precisa fazer deploy em hardware não-NVIDIA (Intel, AMD, ARM, mobile) onde PyTorch CUDA não está disponível, (2) você precisa de velocidade máxima de inferência e as otimizações do ONNX Runtime superam PyTorch, ou (3) você está integrando um modelo em uma aplicação não-Python (ONNX Runtime tem bindings para C++, C#, Java e JavaScript). Para inferência GPU padrão com LLMs grandes, frameworks especializados de serving (vLLM, TGI) tipicamente superam ONNX.
Nem todas as operações PyTorch convertem perfeitamente para ONNX, especialmente operadores personalizados e arquiteturas dinâmicas. Modelos complexos podem exigir intervenção manual para exportar corretamente. ONNX também atrasa em relação a arquiteturas de ponta — novos tipos de modelo podem não ser suportados até que operadores ONNX sejam adicionados. Para inferência de LLM especificamente, o ecossistema GGUF/llama.cpp e TensorRT-LLM se tornaram mais populares que ONNX para a maioria dos casos de uso.