Inference Engine
Çıkarım motoru, eğitilmiş modelleri birleştirilmiş katmanlar, daha düşük duyarlık ve ayarlanmış çekirdeklerle hedef donanımda çalıştırır. Nasıl çalıştığı ve yaygın motorlar.
Çıkarım motoru, yeni veriler üzerinde tahminler üretmek için eğitilmiş bir sinir ağını çalıştıran yazılımdır. Eğitim çatısından genellikle ONNX dosyası gibi bir hesaplama grafiği biçiminde dışa aktarılan modeli alır, bu grafiği belirli bir işlemci için optimize eder ve mümkün olan en düşük çıkarım gecikmesi ve bellek kullanımıyla çalıştırır. Veri merkezi GPU'larından telefonlara ve mikrodenetleyicilere kadar her donanım sınıfı için motorlar bulunur ve model dağıtımında her tahmini hesaplayan bileşen motordur.
Çıkarım Motorları Modelleri Nasıl Hızlandırır#
Dağıtılmış bir model ağırlıklarını hiçbir zaman güncellemez; bu nedenle motor, geri yayılım için saklanan aktivasyonlar gibi eğitim için gereken her şeyi atabilir ve grafiği serbestçe yeniden yazabilir. Yalnızca sabitlere bağlı tüm kısımları önceden hesaplar; evrişim, normalleştirme ve aktivasyon gibi katman zincirlerini tek çekirdekte birleştirerek ara sonuçları hızlı yonga üstü bellekte tutar ve arabelleklerin yeniden kullanılacağı şekilde belleği planlar. Sayısal duyarlılığı FP16 veya INT8'e düşürmek için model nicelemesi uygulayabilir; INT8 için örnek verilerdeki aktivasyon aralıklarını ölçer. TensorRT gibi motorlar daha sonra gerçek cihazda her katman için birden fazla olası çekirdeği zamanlayıp en hızlı olanı seçer; bu nedenle sonuç o donanıma bağlıdır:
Yığın normalleştirmesini önceki evrişim katmanına katlamak, en yaygın yeniden yazma işlemlerinden biridir. Çıkarım sırasında normalleştirme her kanalı yalnızca sabit değerlerle ölçeklendirip kaydırır; dolayısıyla bu değerler evrişim katmanının ağırlıklarına ve bias değerine katılabilir. PyTorch aynı dönüşümü fuse_conv_bn_eval olarak sunar:
import torch
from torch.nn.utils.fusion import fuse_conv_bn_eval
torch.manual_seed(0)
# A trained convolution followed by batch normalization (random statistics here)
conv = torch.nn.Conv2d(16, 32, kernel_size=3, padding=1).eval()
bn = torch.nn.BatchNorm2d(32).eval()
bn.running_mean.uniform_(-1, 1)
bn.running_var.uniform_(0.5, 2.0)
# Fold the normalization's scale and shift into the convolution's weights and bias
fused = fuse_conv_bn_eval(conv, bn)
# One layer now replaces two and produces the same output
x = torch.randn(1, 16, 64, 64)
with torch.inference_mode():
diff = (bn(conv(x)) - fused(x)).abs().max().item()
print(f"Max difference after fusing: {diff:.1e}")En büyük fark olarak 2.1e-06 değerini yazdırır; bu, kayan nokta yuvarlamasından kaynaklanır. Tek birleştirilmiş katman, bellek üzerinde iki kez değil bir kez geçiş yaparak iki özgün katmanla aynı işlevi hesaplar.
Yaygın Çıkarım Motorları#
- TensorRT: NVIDIA'nın veri merkezi GPU'ları ve Jetson modülleri için motoru. Tek bir GPU modeli ve TensorRT sürümü için plan oluşturur; bu nedenle ikisinden biri değiştiğinde motorlar yeniden oluşturulur.
- OpenVINO: Intel'in CPU'ları, tümleşik ve ayrık GPU'ları ile NPU'ları için araç takımı.
- ONNX Runtime: ONNX modelleri için Microsoft'un platformlar arası motoru. İş yükünü, CUDA, TensorRT, OpenVINO ve Core ML'nin de aralarında bulunduğu yürütme sağlayıcıları adı verilen donanım arka uçlarına aktarır.
- LiteRT: Eskiden TensorFlow Lite olarak bilinen, Android, gömülü Linux ve mikrodenetleyiciler için Google çalışma zamanı; mobil GPU'lar ve NPU'lar için delege bileşenleri içerir.
- Core ML: İş yükünü CPU, GPU ve Neural Engine arasında paylaştıran Apple'ın cihaz üstü çatısı.
- vLLM: Büyük dil modelleri için, aynı anda çok sayıda kullanıcıya hizmet vermek üzere istek zamanlama ve attention önbelleği için sayfalanmış bellek özellikleri ekleyen açık kaynaklı motor.
Ultralytics YOLO API, motoru yüklediği dosyaya göre seçer. Böylece aynı predict çağrısı PyTorch'ta bir .pt kontrol noktasını, ONNX Runtime ile bir .onnx dosyasını, TensorRT ile bir .engine dosyasını veya OpenVINO'da bir OpenVINO klasörünü çalıştırır. Ultralytics YOLO26 modelini OpenVINO biçimine dışa aktarıp sonucu yüklemek, başka kod değişikliği yapmadan motoru değiştirir:
from ultralytics import YOLO
# PyTorch modelini OpenVINO biçimine dışa aktar
model = YOLO("yolo26n.pt")
path = model.export(format="openvino") # creates 'yolo26n_openvino_model/'
# Dışa aktarılan klasörü yüklemek, tahminleri OpenVINO motorunda çalıştırır
ov_model = YOLO(path)
results = ov_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_openvino.jpg")Çıkarım Motorları ve İlgili Terimler#
- PyTorch ve diğer eğitim çatıları: Grafiği esnek tutar ve modellerin tasarlanıp eğitilebilmesi için gradyanlara yönelik işlemleri kaydeder. Bunlar da çıkarım çalıştırabilir; ancak tek bir cihaz için oluşturulan motora kıyasla daha fazla ek yüke sahiptir.
- ONNX: Bir modelin grafiğini ve ağırlıklarını açıklayan dosya biçimi. ONNX Runtime ve TensorRT bu dosyayı okuyan motorlardır.
- Model sunumu: Bir veya daha fazla motoru API, istek gruplama ve sürüm yönetimi içeren bir ağ hizmetine sarar. NVIDIA Dynamo-Triton, eski adıyla Triton Inference Server, bunu TensorRT, ONNX Runtime ve PyTorch modelleri için yapar.
- Uzman sistem çıkarım motoru: Kural tabanlı yapay zekâdan gelen eski anlamıyla çıkarım motoru, bilgi tabanına ileri veya geri zincirleme yoluyla eğer-ise kuralları uygular.










