ONNX (Open Neural Network Exchange)
ONNX é um formato aberto que armazena um modelo treinado como um grafo de operadores padrão, permitindo que um modelo treinado em PyTorch seja executado em muitos ambientes de execução.
ONNX (Intercâmbio Aberto de Redes Neurais) é um formato de arquivo de padrão aberto para modelos de aprendizado de máquina. Um arquivo .onnx armazena um modelo treinado como um grafo computacional de operadores padronizados junto com seus pesos, permitindo que um modelo treinado em uma estrutura, como o PyTorch, seja executado em outros ambientes de execução e em muitos tipos de hardware. O Facebook e a Microsoft lançaram o ONNX em setembro de 2017; desde novembro de 2019, ele é um projeto graduado da LF AI & Data, a fundação de IA da Linux Foundation. O ONNX é o ponto de transferência habitual entre o treinamento e a implantação de modelos: um arquivo exportado pode alimentar o ONNX Runtime, o TensorRT, o OpenVINO e os compiladores de muitos aceleradores de IA de borda.
O que um arquivo ONNX contém#
Um modelo ONNX é serializado com Protocol Buffers e contém quatro partes:
- Grafo: Nós que chamam operadores como
Conv,MatMuleRelu, conectados por tensores nomeados. As entradas e saídas do grafo têm tipos e formatos de dados, e cada dimensão pode ser fixa ou simbólica, como o tamanho variável de um lote. - Inicializadores: Os pesos treinados. O Protocol Buffers limita um único arquivo a 2 GB; por isso, modelos maiores armazenam os pesos em arquivos de dados externos junto ao arquivo
.onnx. - Versão do conjunto de operadores (opset): Os operadores são versionados em conjuntos de operadores, e um ambiente de execução precisa oferecer suporte ao opset com o qual o modelo foi exportado. Novos opsets adicionam operadores sem alterar os antigos, como o operador
Attention, adicionado no opset 23. - Metadados: O nome do produtor, a versão do modelo e pares personalizados de chave e valor, como nomes de classes.
Um segundo domínio de operadores, o ONNX-ML, abrange modelos clássicos, como conjuntos de árvores e classificadores lineares; assim, conversores como o skl2onnx e o onnxmltools exportam modelos do scikit-learn, do LightGBM e do XGBoost para o mesmo formato. Visualizadores como o Netron mostram o grafo nó por nó. Na prática, o ONNX conecta muitas estruturas de treinamento a muitos ambientes de execução:
Como executar modelos ONNX#
O ONNX Runtime, o mecanismo de inferência de código aberto da Microsoft, executa arquivos ONNX em servidores, computadores, celulares e navegadores. Ele otimiza o grafo ao carregar um modelo, por exemplo, dobrando constantes e fundindo uma convolução com a normalização em lote que a segue; em seguida, encaminha cada parte do grafo a um provedor de execução adequado ao hardware disponível: CUDA ou TensorRT em GPUs NVIDIA, OpenVINO em hardware Intel, DirectML em GPUs Windows, Core ML em dispositivos Apple, QNN em NPUs Qualcomm e WebGPU em navegadores. O Windows ML, a estrutura de inferência local da Microsoft, funciona sobre o ONNX Runtime; outros mecanismos, como TensorRT e OpenVINO, importam arquivos ONNX e os compilam em seus próprios formatos.
Ultralytics YOLO26 exporta para ONNX com model.export(format="onnx"), e a exportação para TensorRT da Ultralytics cria o mecanismo a partir desse mesmo arquivo ONNX. O arquivo exportado é executado no ONNX Runtime sem PyTorch:
import onnxruntime as ort
from ultralytics import YOLO
# Exporta YOLO26n para ONNX com dimensões simbólicas para lote, altura e largura
model = YOLO("yolo26n.pt")
onnx_path = model.export(format="onnx", dynamic=True)
# Carrega o grafo no ONNX Runtime, que não precisa de PyTorch nem da Ultralytics
session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])
for tensor in session.get_inputs() + session.get_outputs():
print(tensor.name, tensor.shape)Ele imprime a entrada do grafo, images, com dimensões simbólicas para lote, altura e largura, e a saída de predição bruta, output0, que é a assinatura usada por qualquer runtime ONNX para alimentar o modelo e ler os resultados.
ONNX em comparação com formatos e ferramentas relacionados#
- ONNX Runtime: O mecanismo de inferência que executa arquivos ONNX, um projeto separado liderado pela Microsoft que as pessoas costumam abreviar para "ONNX".
- TensorRT: O compilador da NVIDIA, que transforma um arquivo ONNX em um mecanismo otimizado para um tipo de GPU e uma versão do TensorRT específicos; por isso, as equipes mantêm o arquivo ONNX como fonte portátil e recompilam os mecanismos para cada destino.
- Formatos PyTorch: Os checkpoints
.pte os arquivos safetensors armazenam pesos para código que reconstrói o modelo, enquanto TorchScript etorch.exportcapturam grafos para os próprios runtimes do PyTorch. - Outros formatos de implantação: IR do OpenVINO, arquivos LiteRT
.tflite, pacotes Core ML e arquivos GGUF para LLMs quantizados têm como destino runtimes específicos. O coremltools da Apple converte modelos PyTorch diretamente e deixou de aceitar entrada ONNX na versão 6.
Aplicações no mundo real#
- Aplicativos multiplataforma: Um único arquivo ONNX atende a servidores Linux, aplicativos Windows por meio do Windows ML e aplicativos Android e iOS por meio do ONNX Runtime Mobile.
- Inferência no navegador: O ONNX Runtime Web executa modelos no dispositivo do usuário com WebGPU ou WebAssembly, para que os quadros da câmera usados em recursos como estimativa de pose nunca saiam do navegador.
- Aceleradores de borda: As toolchains de NPU de fornecedores como Hailo, Qualcomm e Rockchip aceitam modelos ONNX como entrada e os compilam, muitas vezes com quantização para INT8, para seus chips.
- Modelos clássicos em produção: Árvores com boosting de gradiente e pipelines do scikit-learn convertidos para ONNX são executados em serviços C#, Java e C++ pelo ONNX Runtime, sem interpretador Python no caminho de atendimento.










