Ultralytics YOLO27: Bekleme listesine katıl.
Get Started

Ultralytics YOLO, ROCm ve MIGraphX ile AMD GPU Eğitimi ve Çıkarımı#

Yalnızca Linux x86_64

Bu kılavuz, AMD GPU çekirdek sürücüsü (amdgpu) yüklü Linux x86_64 ana makinelerini hedefler ve aşağıdaki tüm komutlar bir Linux kabuğunda çalıştırılmalıdır. MIGraphX yürütme sağlayıcısı yalnızca Python 3.11 veya daha yenisi için Linux x86_64 wheel paketleri olarak yayımlanır; bu nedenle yerel Windows desteklenmez ve Windows Subsystem for Linux (WSL2) henüz doğrulanmamıştır.

Ultralytics YOLO, AMD'nin açık GPU hesaplama yığını olan ROCm aracılığıyla AMD Instinct ve desteklenen Radeon GPU'larda çalışır. PyTorch'un ROCm derlemesiyle .pt modellerini başka herhangi bir GPU'da olduğu gibi aynı device=0 bağımsız değişkenini kullanarak eğitebilir, doğrulayabilir ve tahmin yapabilirsin; kod değişikliği gerekmez.

Dağıtım için eğitilmiş modeli ONNX olarak dışa aktar ve AMD'nin grafik optimizasyonu ve çıkarım motoru MIGraphX üzerinden çalıştır. Ultralytics'in ONNX arka ucu, ROCm'yi algılar ve ONNX Runtime MIGraphXExecutionProvider bileşenini otomatik olarak seçer; böylece NVIDIA GPU'larda çalışan aynı predict çağrısı AMD GPU'larda da çalışır. Zamanlanmış Ultralytics sürekli entegrasyon çalıştırmaları, AMD GPU donanımında her görev için ONNX dışa aktarımı ve MIGraphX çıkarımını yürütür.

Kurulum#

Python yığını, AMD'nin ROCm wheel indekslerinden tamamen pip aracılığıyla yüklenir; bu nedenle ana makinede AMD GPU çekirdek sürücüsü (amdgpu / /dev/kfd) zaten yüklüyse PyTorch, eklenti veya ROCm çalışma zamanı kitaplıkları için apt paketlerine ya da kök erişimine gerek yoktur.

Kurulum

GPU mimarini algıla (örneğin Strix Halo üzerinde gfx1151) ve yalnızca gereken PyTorch çekirdeklerini yükle:

# Read the GPU architecture from the amdgpu driver, e.g. device-gfx1151
GPU_ARCH=$(grep -rhs '^gfx_target_version' /sys/class/kfd/kfd/topology/nodes | awk '$2 {printf "device-gfx%d%d%x\n", int($2/10000), int($2/100)%100, $2%100}' | sort -u | paste -sd, -)

# ROCm PyTorch + torchvision for the detected architecture
pip install "torch[${GPU_ARCH:?No AMD GPU found}]" "torchvision[$GPU_ARCH]" --index-url https://stable.repo.amd.com/rocm/whl-next/

# Ultralytics
pip install ultralytics

Ultralytics, ilk ONNX dışa aktarımında onnx bileşenini otomatik olarak yükler. ROCm sisteminde ilk ONNX çıkarımı sırasında, birlikte test edilmiş sürümlere sabitlenmiş MIGraphX yürütme sağlayıcısı eklentisini (onnxruntime-ep-migraphx) ve eklentinin yüklediği MIGraphX çalışma zamanı kitaplıklarını (migraphx-libs) da yükler. Eklenti yalnızca Linux x86_64 üzerinde Python 3.11 veya daha yenisi için yayımlanır; diğer Python sürümlerinde veya mimarilerde ya da YOLO_AUTOINSTALL=false ayarlı olup eklenti yüklü değilse ONNX çıkarımı bir uyarıyla CPU'ya geri döner. Ayrıntılı yönergeler ve en iyi uygulamalar için YOLO26 Kurulum kılavuzumuza bak; sorun yaşarsan Sık Karşılaşılan Sorunlar kılavuzumuza başvur.

Eğitim veya dışa aktarma öncesinde PyTorch'un AMD GPU'yu gördüğünü doğrula:

import torch

print(torch.cuda.is_available())  # Çalışan bir ROCm kurulumunda True
print(torch.cuda.get_device_name(0))  # AMD GPU adı; ör. AMD Radeon 8060S
print(torch.version.hip)  # ROCm PyTorch derlemesinin HIP sürümü; CUDA veya CPU derlemelerinde None

PyTorch ROCm ile AMD GPU'larda Eğitim#

.pt modellerinin yerel eğitimi, doğrulaması ve tahmini, aşağıdaki MIGraphX çıkarım yolundan bağımsız olarak PyTorch ROCm aracılığıyla AMD GPU'larda çalışır. Kurulum bölümünde gösterildiği gibi PyTorch'un ROCm derlemesini yükle ve diğer tüm Ultralytics Eğitim çalıştırmalarındakiyle aynı cihaz bağımsız değişkenlerini kullan:

AMD GPU'lar Ultralytics'te Neden CUDA Olarak Görünüyor?

PyTorch'un ROCm derlemesi dahili olarak HIP kullanır ancak torch.cuda arayüzlerini bilinçli olarak yeniden kullanır; bu nedenle torch.cuda.is_available(), True değerini döndürür ve AMD GPU'lara standart CUDA tarzı kimliklerle erişilir. AMD GPU'lar için device=0 veya device=cuda:0 kullan; rocm bir PyTorch cihaz türü değildir. Ayrıntılar için PyTorch HIP semantiğine bak.

ROCm ile Eğitim
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# PyTorch ROCm'nin gördüğü ilk AMD GPU'da eğitim yap
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# İki AMD GPU üzerinde eğitim yap
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

.pt modellerinin doğrulaması ve tahmini için de aynı cihaz seçimi kullanılır:

yolo detect val model=path/to/best.pt data=coco8.yaml device=0
yolo predict model=path/to/best.pt source=path/to/image.jpg device=0
ROCm'de Karma Hassasiyet

Ultralytics, AMP'yi varsayılan olarak etkinleştirir ve eğitim öncesi bir kontrol karma hassasiyet sonuçlarının tam hassasiyetten saptığını belirlerse otomatik olarak devre dışı bırakır. ROCm AMP davranışı PyTorch ve ROCm sürümlerine göre değişebilir; çalıştırma yine de NaN kayıpları veya sıfır mAP üretiyorsa amp=False ile eğitim yap:

yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=False

MIGraphX ile Dışa Aktarma ve Çıkarım#

ONNX Runtime, tek bir ONNX modelini takılabilir yürütme sağlayıcıları (EP'ler) aracılığıyla birçok donanım arka ucunda çalıştıran, platformlar arası bir çıkarım motorudur. Her EP, ONNX grafiğini belirli bir hızlandırıcıya eşler: NVIDIA GPU'lar için CUDA, Apple silicon için CoreML ve ROCm üzerinde AMD GPU'lar için MIGraphX. MIGraphX, onnxruntime-ep-migraphx eklentisi olarak sunulur ve grafiği GPU'n için ayarlanmış bir programa derler.

MIGraphX çıkarımı standart ONNX dışa aktarımını kullanır. Modeli ONNX'e aktar (format="onnx"); ardından Ultralytics çıkarımı, ONNX modelini AMD GPU'nda çalıştırmak için MIGraphXExecutionProvider arka ucunu otomatik olarak kullanır.

MIGraphX Çıkarımının Temel Özellikleri#

  • Otomatik sağlayıcı seçimi: ROCm ana makinesinde ONNX arka ucu eklentiyi kaydeder ve kod değişikliği olmadan MIGraphXExecutionProvider bileşenini seçer. Eklenti yoksa veya yüklenemezse çıkarım bir uyarıyla CPU'ya geri döner.
  • Grafik optimizasyonu: MIGraphX, AMD GPU mimarileri için ayarlanmış işleç birleştirme, bellek planlama ve çekirdek seçimi uygular.
  • Sıfır kopyalı G/Ç bağlama: Girdiler ve çıktılar DLPack protokolü aracılığıyla doğrudan GPU tensörlerine bağlanır; böylece çıkarım sırasında ana makineye gidiş dönüşler önlenir.
  • Hassasiyet seçenekleri: FP32 ile çalıştır veya daha düşük hassasiyetli çıkarım için FP16 ONNX modeli dışa aktar.
  • Taşınabilir yapıt: Tek bir .onnx dosyası CPU'larda, NVIDIA GPU'larda ve AMD GPU'larda çalışır; böylece tek bir dışa aktarımla birden fazla platformu hedefleyebilirsin.
  • Yeniden üretilebilir dağıtım: Tüm yığın (ROCm PyTorch, MIGraphX eklentisi ve kitaplıkları) AMD'nin ROCm wheel indekslerinden pip aracılığıyla yüklenir.

Desteklenen Görevler#

MIGraphX çıkarımı, Ultralytics'in yedi görevinin tümünü destekler. Anlamsal segmentasyon ve derinlik tahmini yalnızca bu başlıkları sunan tek aile olan YOLO26 ile kullanılabilir.

GörevYOLOv8YOLO11YOLO26
Algılama✅✅✅
Segmentasyon✅✅✅
Anlamsal❌❌✅
Derinlik❌❌✅
Sınıflandırma✅✅✅
Poz✅✅✅
OBB✅✅✅

Kullanım#

Kullanım yönergelerine geçmeden önce Ultralytics'in sunduğu YOLO26 model çeşitlerine göz at. Bu, proje gereksinimlerine en uygun modeli seçmene yardımcı olur.

ONNX biçimi Dışa Aktarma, Tahmin ve Doğrulama modlarını destekler. AMD GPU'da çıkarım ve doğrulama için MIGraphX eklentisinin yüklü olduğu bir ROCm sistemi gerekir. Modelini dışa aktar, ardından çıkarım yapmak veya doğruluğunu device=0 üzerinde doğrulamak için dışa aktarılan modeli yükle.

onnxruntime-gpu ile Çakışma

onnxruntime-gpu ve standart onnxruntime paketi aynı onnxruntime Python modülüne yüklenir; bu nedenle hangisi en son yüklenirse diğeri onun tarafından üzerine yazılır. Bunlardan yalnızca birini kaldırmak modülü bozuk bırakır ve eski onnxruntime-gpu sürümleri MIGraphX çıkarımını çökertabilir. Daha önceki bir kurulumda onnxruntime-gpu yüklendiyse pip uninstall -y onnxruntime-gpu onnxruntime komutunu çalıştır; Ultralytics, sonraki ONNX çıkarımında standart onnxruntime paketini yeniden yükler.

Dışa aktar
from ultralytics import YOLO

# YOLO26 modelini yükle
model = YOLO("yolo26n.pt")

# Modeli ONNX biçimine aktar
model.export(format="onnx")  # 'yolo26n.onnx' oluşturur
Tahmin
from ultralytics import YOLO

# Dışa aktarılan ONNX modelini yükle ve bir AMD GPU'da çıkarım çalıştır
model = YOLO("yolo26n.onnx")

# MIGraphX yürütme sağlayıcısı ROCm'da otomatik olarak seçilir
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
Doğrula
from ultralytics import YOLO

# Dışa aktarılan ONNX modelini yükle
model = YOLO("yolo26n.onnx")

# COCO8 veri kümesinde bir AMD GPU ile doğruluğu doğrula
metrics = model.val(data="coco8.yaml", device=0)

Dışa Aktarma Bağımsız Değişkenleri#

MIGraphX çıkarımı, ONNX dışa aktarma bağımsız değişkenlerini kullanır. AMD GPU dağıtımı için en önemli seçenekler şunlardır:

Bağımsız değişkenTürVarsayılanAçıklama
formatstr'onnx'Dışa aktarılan modelin hedef biçimi. MIGraphX EP çıkarımı için onnx kullan.
imgszint veya tuple640Model girdisi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı veya (height, width) biçiminde bir demet olabilir.
quantizeint veya strNoneDışa aktarılan ONNX modelinin hassasiyeti: düşük hassasiyetli çıkarım için 16 (FP16); 32/ayarlanmamış değer FP32'dir.
dynamicboolFalseDinamik girdi boyutlarına izin verir. Statik şekiller, MIGraphX'in özelleştirilmiş bir program derlemesini sağlar ve sıfır kopyalı G/Ç bağlamayı etkinleştirir.
simplifyboolTrueModel grafiğini onnxslim ile sadeleştirerek performansı ve uyumluluğu artırabilir.
opsetintNoneFarklı çalışma zamanlarıyla uyumluluk için ONNX opset sürümü. Ayarlanmazsa desteklenen en son sürüm kullanılır.
nmsbool, isteğe bağlıNoneHam çıktıyı (None, varsayılan), gömülü NMS'yi (True) veya NMS içermeyen başlığı (False) seç. Gömülü NMS (True), MIGraphX EP tarafından henüz desteklenmiyor (ROCm/AMDMIGraphX#5246).
batchint1Dışa aktarma toplu iş boyutu veya predict kipinde dışa aktarılan modelin eşzamanlı işlediği en fazla görüntü sayısı.
devicestrNoneDışa aktarma aygıtı: GPU (device=0), CPU (device=cpu).

Dışa aktarma bağımsız değişkenlerinin tam listesi için ONNX entegrasyonuna ve Ultralytics dışa aktarma belgeleri sayfasına bak.

MIGraphX ile AMD GPU'larda dağıtım#

Derlenmiş program önbelleği

MIGraphX EP, grafiği ilk oturumda derler ve bu işlem ilk yükleme süresinin büyük bölümünü oluşturur. Ultralytics, derlenmiş programı her model için Ultralytics yapılandırma dizini altında önbelleğe alır; böylece aynı model sonraki yüklemelerde yeniden derlenmez. Önbellekte son kullanılan 8 model tutulur ve daha eski modeller çıkarılır; dolayısıyla sınırsız büyüyemez. Konumu değiştirmek için ORT_MIGRAPHX_CACHE_DIR değerini ayarla. ROCm veya MIGraphX'i yükselttikten sonra yeniden derlemeyi zorlamak için önbellek dizinini sil.

Derleme süresi

Ultralytics, ölçülebilir bir çıkarım değişikliği olmadan YOLO grafikleri için soğuk derleme süresini kısaltmak üzere MIGraphX Winograd evrişim çekirdeklerini varsayılan olarak devre dışı bırakır (MIGRAPHX_DISABLE_WINOGRAD=1) (ROCm/AMDMIGraphX#5234); yeniden etkinleştirmek için MIGRAPHX_DISABLE_WINOGRAD=0 değerini ayarla.

Kullanıma hazır bir ortam için Dockerfile-amd, ROCm PyTorch ve önceden yüklenmiş MIGraphX EP ile ultralytics/ultralytics:latest-amd imajını oluşturur. AMD GPU'ları kapsayıcıya açan docker run bayrakları için Docker Hızlı Başlangıç kılavuzundaki GPU Kullanımı bölümüne bak.

Kıyaslamalar#

Aşağıdaki YOLO26 kıyaslamaları, MIGraphX yürütme sağlayıcısında PyTorch ile ONNX arasındaki hız ve doğruluk karşılaştırması için Ultralytics ekibi tarafından AMD Radeon 8060S GPU (Ryzen AI Max+ PRO 395) üzerinde gerçekleştirildi. Her iki biçim de GPU'da FP32 hassasiyetinde çalışır: PyTorch ROCm üzerinden, ONNX ise MIGraphX üzerinden.

Performans
ModelBiçimDurumBoyut (MB)metrics/mAP50-95(B)Çıkarım süresi (ms/im)
YOLO26nPyTorch✅5.30.40894.1
YOLO26nONNX (MIGraphX)✅9.50.40892.1
YOLO26sPyTorch✅19.50.48507.2
YOLO26sONNX (MIGraphX)✅36.50.48504.7
YOLO26mPyTorch✅42.20.532314.6
YOLO26mONNX (MIGraphX)✅78.20.532310.9
YOLO26lPyTorch✅50.70.548918.5
YOLO26lONNX (MIGraphX)✅95.00.548915.0
YOLO26xPyTorch✅113.20.574837.4
YOLO26xONNX (MIGraphX)✅212.90.574827.1

Ultralytics 8.4.165 ile (derinlik tahmini için 8.4.172 ile) kıyaslandı

Not

Yukarıdaki kıyaslamalar için doğrulama; algılama, segmentasyon ve poz tahmininde 640, anlamsal segmentasyonda 2048, derinlik tahmininde 768, sınıflandırmada 224 ve OBB'de 1024 çözünürlükte, tam doğrulama kümelerinde ve 1'lik batch boyutunda gerçekleştirildi. Çıkarım süresine ön/son işleme veya tek seferlik MIGraphX derlemesi dahil değildir.

Destek Özeti#

Bir AMD ürünü veya çalışma zamanı için destek sunulması, her AMD hızlandırıcısının desteklendiği anlamına gelmez. Bu tablo, Ultralytics Python paketindeki mevcut durumu özetler.

AMD ürünü veya çalışma zamanıDestekKullanım veya durum
ROCm ile AMD Instinct ve desteklenen Radeon GPU'lar✅device=0 veya device=cuda:0 ile yerel PyTorch modellerini eğit, doğrula ve çalıştır.
MIGraphX çıkarımı✅Dışa aktarılan ONNX modellerini MIGraphX EP üzerinden AMD GPU'larda çalıştır. Tüm YOLO26 görevleri desteklenir.
Çoklu GPU ROCm✅device=0,1 veya device=[0, 1] kullan; dağıtık yürütme, yüklenen PyTorch ROCm yığınını izler.
ROCm Otomatik Karma Hassasiyet (AMP)⚠️Yüklenen PyTorch ve ROCm sürümleri Ultralytics AMP denetimlerinden geçtiğinde kullanılabilir; uyumsuzlarsa amp=False kullan.
AMD Docker imajı✅latest-amd, MIGraphX EP önceden yüklenmiş ROCm PyTorch'u içerir.
Yerel MIGraphX dışa aktarımı❌ONNX'e aktarmak için format="onnx" kullan ve AMD GPU çıkarımı için MIGraphX EP'de çalıştır.
Windows DirectML❌Python paketinde DirectML eğitim veya tahmin arka ucu yoktur.
Ryzen AI NPU❌Yerel NPU entegrasyonu yoktur; harici ONNX/Vitis AI iş akışları topluluk tarafından yönetilir.
AMD Xilinx Versal AI Edge Gen 2 NPU'ları✅format="xilinx" ile dışa aktar; AMD Xilinx rehberine bak.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌Yerel dışa aktarma yok; AMD Xilinx rehberindeki AMD Vitis AI iş akışlarını kullan.
AMD CPU'lar✅ CPUdevice=cpu kullan; bu, AMD'ye özgü bir hızlandırma arka ucu değil, standart CPU yürütmesidir.
Önce AMD ve PyTorch uyumluluğunu denetle

ROCm kullanılabilirliği, GPU'ya, işletim sistemine, ROCm sürümüne ve PyTorch derlemesine bağlıdır. Yüklemeden önce donanımını AMD'nin ROCm uyumluluk matrisinde doğrula.

Özet#

Bu kılavuzda, standart device=0 bağımsız değişkenini kullanarak PyTorch ROCm ile AMD GPU'larda Ultralytics YOLO26 modellerini eğitmeyi, ardından ONNX Runtime MIGraphX yürütme sağlayıcısı üzerinden hızlandırılmış çıkarım için modelleri ONNX'e aktarmayı öğrendin. ONNX arka ucu MIGraphXExecutionProvider öğesini otomatik seçer, sonraki yüklemeleri hızlandırmak için derlenmiş programı önbelleğe alır ve kod değişikliği gerektirmeden tüm YOLO26 görevlerini destekler.

Diğer dağıtım hedefleri için entegrasyon kılavuzu sayfasına göz at ve dışa aktarma biçimlerini Kıyaslama kipiyle karşılaştır.

Sık Sorulan Sorular#

  • Evet. Kurulum bölümünde gösterildiği gibi PyTorch'un ROCm derlemesini yükle; ardından device=0 ile .pt modellerini veya birden fazla GPU için device=0,1 öğesini kullanarak eğitim yap. Eğitim PyTorch ROCm üzerinden yürütülür; MIGraphX'i veya ONNX eklentisini kullanmaz. Örnekler için PyTorch ROCm ile AMD GPU'larda Eğitim sayfasına bak.

  • Modelini ONNX'e aktar, ardından ROCm sisteminde device=0 ile çalıştır. Ultralytics, ilk ONNX çıkarımında MIGraphX eklentisini yükler:

    Kullanım
    from ultralytics import YOLO
    
    # ONNX'e aktar
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # 'yolo26n.onnx' oluşturur
    
    # AMD GPU'da çıkarım çalıştır (MIGraphX EP otomatik seçilir)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • Hayır. ROCm sisteminde Ultralytics ONNX arka ucu HIP'i algılar, onnxruntime-ep-migraphx eklentisini yükleyip kaydeder ve MIGraphXExecutionProvider öğesini otomatik seçer. Eklenti yüklenemezse veya başlatılamazsa (örneğin Python 3.11'den eskiyse ya da ARM64 kullanılıyorsa) çıkarım bir uyarıyla CPU'ya geri döner.

  • MIGraphX, ONNX grafiğini ilk oturumda optimize edilmiş bir programa derler ve bu işlem ilk yükleme süresinin büyük bölümünü oluşturur. Ultralytics, derlenmiş programı önbelleğe alır; böylece aynı model sonraki yüklemelerde yeniden derlenmez. Önbelleğin konumu ve boyut sınırı için derlenmiş program önbelleği notuna bak.

  • Yüklü PyTorch paketi muhtemelen ROCm derlemesi yerine CPU veya CUDA derlemesidir ya da GPU, etkin ROCm yığını tarafından desteklenmiyordur. PyTorch'u Kurulum bölümünde gösterildiği gibi AMD'nin ROCm wheel dizininden yeniden yükle, torch.version.hip değerinin None olmadığını kontrol et ve GPU'yu AMD'nin ROCm uyumluluk matrisinde doğrula. Ayrıca kullanıcının /dev/kfd ve /dev/dri erişimi olduğundan emin ol; bu genellikle video ve render gruplarına katılarak sağlanır.

  • Bu beklenen bir durumdur. PyTorch ROCm, Python uyumluluğu için bilerek torch.cuda API'sini ve CUDA tarzı aygıt dizelerini yeniden kullanır. device=0 veya device=cuda:0 kullan; model yine AMD GPU'da HIP ve ROCm üzerinden çalışır.

  • Python paketi üzerinden kullanılamaz. DirectML'de eğitim veya tahmin arka ucu yoktur ve Ryzen AI NPU'ları PyTorch ROCm üzerinden kullanıma sunulmaz. Topluluk iş akışları ONNX'e dışa aktarım yapıp AMD'nin harici Ryzen AI veya Vitis AI araçlarıyla çalıştırabilir; ancak bu çalışma zamanları desteklenen Ultralytics yürütme yolunun dışındadır. Gömülü AMD Xilinx Versal AI Edge Series Gen 2 NPU'ları için format="xilinx" ile dışa aktar; Zynq, Kria ve birinci nesil Versal AI Edge aygıtları için AMD Xilinx rehberine bak.

  • Hem PyTorch hem de MIGraphX EP çıkarımı için GPU dizinini doğrudan belirt; örneğin ikinci GPU için device=1 kullan. Bir işlemi veya kapsayıcıyı belirli GPU'larla sınırlandırmak için HIP_VISIBLE_DEVICES ayarla (kapsayıcılar için ROCR_VISIBLE_DEVICES); örneğin HIP_VISIBLE_DEVICES=2. Ardından görünen GPU'lar device=0 değerinden başlayarak yeniden numaralandırılır.

Katkıda Bulunanlar

Yorumlar