ONNX (Open Neural Network Exchange)
ONNX, eğitilmiş bir modeli standart işleçlerden oluşan bir grafik olarak saklayan açık bir biçimdir; bu sayede PyTorch ile eğitilmiş bir model birçok çalışma ortamında çalışabilir.
ONNX (Açık Sinir Ağı Değişimi), makine öğrenimi modelleri için kullanılan açık standart bir dosya biçimidir. Bir .onnx dosyası, eğitilmiş modeli standart operatörlerden oluşan bir hesaplama grafiği ve ağırlıklarıyla birlikte saklar; böylece PyTorch gibi bir çerçevede eğitilen model başka çalışma ortamlarında ve pek çok donanım türünde çalışabilir. Facebook ve Microsoft, ONNX'i Eylül 2017'de başlattı; Kasım 2019'dan bu yana Linux Foundation'ın AI vakfı LF AI & Data'nın mezuniyet aşamasını tamamlamış bir projesidir. ONNX, eğitim ile model dağıtımı arasındaki standart aktarım noktasıdır: dışa aktarılan tek bir dosya, ONNX Runtime'a, TensorRT'ye, OpenVINO'ya ve birçok uç AI hızlandırıcısının derleyicisine aktarılabilir.
Bir ONNX Dosyası Neler İçerir?#
Bir ONNX modeli Protocol Buffers ile serileştirilir ve dört bölüm içerir:
- Grafik:
Conv,MatMulveRelugibi operatörleri çağıran, adlandırılmış tensörlerle birbirine bağlanmış düğümler. Grafiğin girdileri ve çıktıları veri türleriyle şekillerini belirtir; her boyut sabit veya değişken yığın boyutu gibi sembolik olabilir. - Başlatıcılar: Eğitilmiş ağırlıklar. Protocol Buffers tek bir dosyayı 2 GB ile sınırlar; bu nedenle daha büyük modeller ağırlıklarını
.onnxdosyasının yanındaki harici veri dosyalarında saklar. - Opset sürümü: Operatörler, opset'lerde sürümlenir ve çalışma ortamının modelin dışa aktarıldığı opset'i desteklemesi gerekir. Yeni opset'ler, eski operatörleri değiştirmeden yeni operatörler ekler; örneğin
Attentionoperatörü opset 23'te eklendi. - Meta veriler: Üretici adı, model sürümü ve sınıf adları gibi özel anahtar-değer çiftleri.
İkinci bir operatör alanı olan ONNX-ML, ağaç toplulukları ve doğrusal sınıflandırıcılar gibi klasik modelleri kapsar. Bu nedenle skl2onnx ve onnxmltools gibi dönüştürücüler scikit-learn, LightGBM ve XGBoost modellerini aynı biçimde dışa aktarır. Netron gibi görüntüleyiciler grafiği düğüm düğüm gösterir. ONNX, uygulamada birçok eğitim çerçevesiyle birçok çalışma ortamı arasında yer alır:
ONNX Modellerini Çalıştırma#
Microsoft'un açık kaynaklı çıkarım motoru olan ONNX Runtime, ONNX dosyalarını sunucularda, masaüstü bilgisayarlarda, telefonlarda ve tarayıcılarda çalıştırır. Bir modeli yüklerken grafiği optimize eder; örneğin sabitleri katlar ve bir evrişimi, onu izleyen yığın normalizasyonuyla birleştirir. Ardından grafiğin her bölümünü mevcut donanıma uygun bir yürütme sağlayıcısına devreder: NVIDIA GPU'larında CUDA veya TensorRT, Intel donanımında OpenVINO, Windows GPU'larında DirectML, Apple aygıtlarında Core ML, Qualcomm NPU'larında QNN ve tarayıcılarda WebGPU. Microsoft'un yerel çıkarım çerçevesi Windows ML, ONNX Runtime üzerinde çalışır; TensorRT ve OpenVINO gibi diğer motorlar da ONNX dosyalarını içe aktarır ve kendi biçimlerinde derler.
Ultralytics YOLO26, model.export(format="onnx") ile ONNX'e aktarılır; Ultralytics'ın TensorRT aktarımı ise motorunu aynı ONNX dosyasından oluşturur. Dışa aktarılan dosya, PyTorch olmadan ONNX Runtime'da çalışır:
import onnxruntime as ort
from ultralytics import YOLO
# YOLO26n modelini sembolik batch, height ve width boyutlarıyla ONNX'e aktar
model = YOLO("yolo26n.pt")
onnx_path = model.export(format="onnx", dynamic=True)
# Grafiği, PyTorch veya Ultralytics gerektirmeyen ONNX Runtime'da yükle
session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])
for tensor in session.get_inputs() + session.get_outputs():
print(tensor.name, tensor.shape)Grafiğin sembolik batch, height ve width boyutlarına sahip girdisi images ile ham tahmin çıktısı output0 yazdırılır. Herhangi bir ONNX çalışma zamanı, modeli beslemek ve sonuçlarını okumak için bu imzayı kullanır.
ONNX ve İlgili Biçimler ile Araçlar#
- ONNX Runtime: ONNX dosyalarını çalıştıran çıkarım motorudur; Microsoft öncülüğündeki ayrı bir projedir ve kullanıcılar bu projeyi genellikle kısaca "ONNX" diye adlandırır.
- TensorRT: NVIDIA'nın derleyicisi, ONNX dosyasını belirli bir GPU türü ve TensorRT sürümü için optimize edilmiş bir motora dönüştürür. Bu nedenle ekipler, taşınabilir kaynak olarak ONNX dosyasını saklar ve her hedef için motorları yeniden oluşturur.
- PyTorch biçimleri:
.ptkontrol noktaları ve safetensors dosyaları, modeli yeniden oluşturan kodun kullanacağı ağırlıkları saklar; TorchScript vetorch.exportise PyTorch'un kendi çalışma zamanları için grafikleri kaydeder. - Diğer dağıtım biçimleri: OpenVINO IR, LiteRT
.tflitedosyaları, Core ML paketleri ve niceleme uygulanmış LLM'ler için GGUF dosyalarının her biri belirli çalışma zamanlarını hedefler. Apple'ın coremltools aracı, PyTorch modellerini doğrudan dönüştürür ve 6. sürümde ONNX girdisi desteğini kaldırmıştır.
Gerçek Dünya Uygulamaları#
- Platformlar arası uygulamalar: Tek bir ONNX dosyası Linux sunucularında, Windows ML üzerinden Windows uygulamalarında ve ONNX Runtime Mobile üzerinden Android ve iOS uygulamalarında kullanılabilir.
- Tarayıcıda çıkarım: ONNX Runtime Web, modelleri WebGPU veya WebAssembly ile kullanıcının cihazında çalıştırır; böylece poz kestirimi gibi özellikler için kullanılan kamera kareleri tarayıcıdan çıkmaz.
- Uç hızlandırıcılar: Hailo, Qualcomm ve Rockchip gibi tedarikçilerin NPU araç zincirleri, girdi olarak ONNX modellerini kabul edip derler; çoğu zaman yongaları için niceleme ile INT8 biçimine dönüştürür.
- Üretimde klasik modeller: ONNX'e dönüştürülmüş gradyan artırmalı ağaçlar ve scikit-learn işlem hatları, sunum yolunda Python yorumlayıcısı olmadan ONNX Runtime üzerinden C#, Java ve C++ hizmetlerinde çalışır.










