CPU'da OpenVINO
FP32, FP16 ve INT8 OpenVINO modellerini dışa aktar, her birini doğrula ve INT8'i yalnızca kendi CPU'nda avantaj sağladığı durumlarda kullan.
Sahip olduğun bir Intel CPU, çoğu zaman GPU örneğinin yerini alabilir: Ultralytics kıyaslamalarında YOLO26m, PyTorch'ta 192 ms'den dizüstü bilgisayar Core Ultra CPU'da OpenVINO INT8 ile 36 ms'ye düşüyor. Ancak kazanım çipe bağlıdır; ayrıca bu kurs için kullanılan ARM test dizüstü bilgisayarında dört görüntüyle kalibre edilen INT8 dışa aktarımı 3 mAP puanı kaybettirdi. Kullanıma almadan önce hangi durumda olduğunu ölçmeyi öğreneceksin.
Uygulamalı
OpenVINO Ne Sağlar?#

OpenVINO, PyTorch ve ONNX modellerini alır ve tek bir API üzerinden Intel CPU'larda, tümleşik ve ayrı GPU'larda ve NPU'larda çalıştırır. CPU çekirdekleri Intel komut kümelerini (AVX2, AVX-512, AMX) hedefler ve INT8 yolu olgunlaşmıştır. CPU sütunundaki ARM kutucuğuna dikkat et: OpenVINO ARM'de de çalışır, ancak çekirdekleri Intel için ayarlanmıştır; bu yüzden ARM'de ona güvenmeden önce ölçüm yap.
Intel Core Ultra 7 155H CPU'da yayımlanan kıyaslama sonucu (COCO128):
| Model | PyTorch FP32 | OpenVINO FP32 | OpenVINO INT8 | FP32 → INT8 mAP50-95 |
|---|---|---|---|---|
| YOLO26n | 33.19 ms | 13.43 ms | 11.40 ms | 0.4734 → 0.4611 |
| YOLO26s | 70.92 ms | 36.16 ms | 15.54 ms | 0.5632 → 0.5471 |
| YOLO26m | 192.45 ms | 102.52 ms | 35.72 ms | 0.6191 → 0.6025 |
Bu tablodan üç kural çıkıyor:
- OpenVINO FP32, Intel CPU'da PyTorch gecikmesini tek başına yaklaşık yarıya indirir. Önce bunu dene.
- Model büyüdükçe INT8 daha fazla kazanç sağlar:
niçin 1,2×,miçin 2,9× hız; bunun karşılığında 1,2–1,7 mAP puanı kaybedilir.nüzerinde INT8, doğruluk kaybına nadiren değer. - Donanım almadan önce tümleşik GPU'yu dene: aynı çipteki Arc iGPU (
device="intel:gpu"), YOLO26n FP32'yi 9,13 ms'de, YOLO26m'yi ise 34,47 ms'de çalıştırdı.
Hassasiyetleri Kendi CPU'nda Karşılaştır#
Her hassasiyeti dışa aktar, hemen doğrula ve ancak bundan sonra sıradakini dışa aktar:
from ultralytics import YOLO
if __name__ == "__main__": # validation starts worker processes on macOS and Windows
model = YOLO("yolo26n.pt") # or runs/detect/pills_v1/weights/best.pt
for name, quantize in (("FP32", None), ("FP16", 16), ("INT8", 8)):
path = model.export(format="openvino", quantize=quantize, data="coco8.yaml") # or my_dataset/data.yaml
m = YOLO(path).val(data="coco8.yaml", batch=1, plots=False, verbose=False) # before the next export overwrites it
print(f"{name}: mAP50-95 {m.box.map:.4f} -> {path}")OpenVINO: export success ✅ 2.3s, saved as 'yolo26n_openvino_model/' (9.6 MB)
FP32: mAP50-95 0.6783 -> yolo26n_openvino_model/
OpenVINO: export success ✅ 1.6s, saved as 'yolo26n_openvino_model/' (5.1 MB)
FP16: mAP50-95 0.6783 -> yolo26n_openvino_model/
WARNING ⚠️ OpenVINO: >300 images recommended for INT8 calibration, found 4 images.
OpenVINO: export success ✅ 11.3s, saved as 'yolo26n_int8_openvino_model/' (3.2 MB)
INT8: mAP50-95 0.6460 -> yolo26n_int8_openvino_model/Her satırın gösterdiği:
- FP32 ve FP16 aynı sonucu verir ve FP16'nın boyutu yarısıdır (5,1'e karşı 9,6 MB); ancak ikisi de aynı klasöre yazılmıştır. Önce ikisini de dışa aktarıp sonra doğrulasaydın FP16'yı iki kez ölçmüş olacaktın.
- INT8 3,2 MB boyutundadır ve 3,2 puan kaybettirdi, çünkü COCO8'in dört görüntüsüyle kalibre edildi. Uyarı bunu belirtiyor: doğru kalibrasyon için kendi YAML dosyandan yüzlerce üretim benzeri görüntü gerekir (
fractionkullanılacak görüntü sayısını sınırlar). - Bunların hiçbiri hızı ölçmez. Bunun için aşağıdaki kıyaslamayı kullan.
Dışa aktarılan bir modeli belirli bir Intel aygıtında çalıştırmak için:
from ultralytics import YOLO
ov_model = YOLO("yolo26n_openvino_model/")
results = ov_model("https://ultralytics.com/images/bus.jpg", device="intel:cpu") # veya intel:gpu, intel:npuKlasörün tamamını dağıt: yolo26n.xml (graf), yolo26n.bin (ağırlıklar) ve metadata.yaml. intel:gpu ve intel:npu için Intel donanımı gerekir.
ONNX Runtime ile Süreyi Karşılaştır#
Doğruluk konusu tamam; hızı hedef cihazda ve gerçekten taşıyacağı yük altında belirlersin. İlk dersteki pick_runtime.py komutunu CANDIDATES = ("onnx", "openvino") ile çalıştır. CPU'yu başka işlerin de kullandığı Apple silicon test dizüstü bilgisayarında sonuçlar şöyleydi:
onnx p50 30.0 ms p95 46.4 ms misses the 30 ms budget
openvino p50 22.8 ms p95 113.5 ms misses the 30 ms budgetOpenVINO'nun medyanı daha iyiydi, ancak kuyruk gecikmesi çok daha kötüydü. Ultralytics sarmalayıcısı OpenVINO'yu LATENCY ipucuyla derler (günlükte Using OpenVINO LATENCY mode for batch=1 inference on CPU yazar); bu, her isteği CPU çekirdeklerine yayar. Başka işler bu çekirdekler için yarıştığında en yavaş istekler en çok etkilenir. Özel bir Intel bilgisayarda sonuçlar genellikle yukarıda yayımlanan değerlere benzer, ancak bunu yalnızca kendi p95 ölçümün gösterebilir.
Karar kuralları:
Yaygın Hatalar#
Belirti: FP16 dışa aktarımı yarı boyutta, ancak tam olarak aynı hızda. Çözüm: Çoğu CPU'da eklenti kendi yürütme hassasiyetini seçer; daha küçük indirmeler için FP16, hız için INT8 veya iGPU kullan.
Belirti: FP32 ve FP16 aynı dosya oldukları için aynı sonuçları bildiriyor. Çözüm: FP32 ve FP16 dışa aktarımları *_openvino_model/ klasörünü paylaşır; her dışa aktarımdan hemen sonra doğrula (veya klasörün adını değiştir).
Belirti: Ortalama değer iyi görünüyor, ancak yoğun anlarda kareler yine de atlanıyor. Çözüm: Üretim yükü çalışırken çıkarım süresini ölç ve ortalamaya değil p95'e göre karar ver. Tek sunucuda çok sayıda akış için, gecikme ve verim modları kılavuzunda gösterildiği gibi .xml dosyasını doğrudan OpenVINO çalışma ortamıyla yükleyip THROUGHPUT ipucuyla derle.
macOS ve Windows'ta doğrulama, betiğini yeniden içe aktaran çalışan süreçleri başlatır. if __name__ == "__main__": olmadan bu dersin test çalıştırması, dışa aktarımları çalışan süreçlerde tekrarlayarak dakikalarca zaman kaybetti ve ölçmeye çalıştığı CPU için rekabete yol açtı.
Çözümü göster
python ov_compare.py # accuracy and size of FP32, FP16, INT8
python pick_runtime.py # p50 and p95 for ONNX Runtime and OpenVINOYukarıdaki Core Ultra 7 155H değerleriyle yapılmış örnek bir karar:
| Seçenek | mAP50-95 | Boyut | görüntü başına ms |
|---|---|---|---|
| OpenVINO FP32 | 0.4734 | 9.6 MB | 13.43 |
| OpenVINO INT8 | 0.4611 | 3.2 MB | 11.40 |
iGPU FP32 (intel:gpu) | 0.4758 | 9.6 MB | 9.13 |
Entegre GPU'da OpenVINO FP32'yi dağıtıma al: en hızlı seçenek ve hiçbir kayıp yaratmıyor; CPU'da INT8 ise 2 ms kazanmak için 1,2 puana mal oluyor. YOLO26m dağıtımında, bu kayıp bütçene uygunsa tercih CPU INT8'e dönüyor (1,7 puan karşılığında 2,9× daha hızlı).