Ultralytics YOLO27:

تدريب وحدات GPU من AMD باستخدام Ultralytics YOLO وROCm#

تدعم Ultralytics التدريب والتحقق والاستدلال على وحدات GPU المتوافقة من AMD عبر PyTorch ROCm. تكشف PyTorch عمدًا عن أجهزة ROCm باستخدام واجهة torch.cuda نفسها في Python المستخدمة مع CUDA، لذلك لا تحتاج Ultralytics إلى نوع جهاز منفصل باسم rocm لنماذج PyTorch الأصلية. ثبّت إصدار PyTorch المبني باستخدام ROCm، ثم اختر وحدة GPU من AMD باستخدام صيغة device=0 أو device=cuda:0 القياسية.

تقدم AMD أيضًا تقنيات للاستدلال منفصلة عن PyTorch ROCm. ولا يعني دعم أحد منتجات AMD دعم جميع بيئات التشغيل أو المسرّعات من AMD.

نظرة سريعة على الدعم#

يصف هذا الجدول حزمة Python من Ultralytics المستخدمة للتدريب والتحقق والتصدير والتنبؤ.

منتج AMD أو بيئة التشغيلدعم Ultralyticsالاستخدام أو الحالة
AMD Instinct ووحدات Radeon GPU المدعومة مع ROCm✅درّب النماذج الأصلية من PyTorch وتحقق منها وشغّلها باستخدام device=0 أو device=cuda:0.
ROCm متعدد وحدات GPU✅استخدم device=0,1 أو device=[0, 1]؛ إذ يتبع التنفيذ الموزع حزمة PyTorch ROCm المثبتة.
التدريب التلقائي ب精ّة مختلطة (AMP) في ROCm⚠️متاح عندما تجتاز إصدارات PyTorch وROCm المثبتة اختبارات AMP في Ultralytics؛ استخدم amp=False إذا لم تكن متوافقة.
تصدير ONNX✅التصدير مدعوم، لكن ملف ONNX لا يوفر بمفرده بيئة تشغيل مُسرّعة بواسطة AMD.
استدلال MIGraphX🚧غير متاح في حزمة Python الحالية؛ ويجري تتبع أعمال التنفيذ في PR #24137.
صورة AMD لـ Docker وCI على أجهزة AMD🚧يجري تتبعهما أيضًا في PR #24137، ولا يوفرهما اختيار جهاز ROCm وحده.
DirectML على Windows❌ Pythonلا تتضمن حزمة Python واجهة خلفية للتدريب أو التنبؤ باستخدام DirectML.
وحدة NPU في Ryzen AI❌لا يوجد تكامل أصلي بين Ultralytics ووحدات NPU؛ وتدير مجموعة المجتمع سير العمل الخارجي باستخدام ONNX/Vitis AI.
وحدات CPU من AMD✅ CPUاستخدم device=cpu؛ فهذا تنفيذ قياسي على CPU، وليس واجهة خلفية للتسريع خاصة بـ AMD.
تحقق أولًا من التوافق بين AMD وPyTorch

يعتمد توفر ROCm على طراز وحدة GPU ونظام التشغيل وإصدار ROCm وبنية PyTorch المحددة. تحقّق من توافق أجهزتك في مصفوفة توافق ROCm من AMD قبل التثبيت. لا تستطيع Ultralytics إضافة دعم لجهاز لا تكشف عنه بنية PyTorch ROCm المثبتة.

لماذا يستخدم ROCm أسماء أجهزة CUDA#

يستخدم إصدار PyTorch المبني باستخدام ROCm تقنية HIP داخليًا، لكنه يعيد استخدام واجهات torch.cuda عمدًا. فعلى سبيل المثال، تعمل torch.cuda.is_available() وtorch.cuda.device_count() وtorch.cuda.get_device_name() مع وحدات GPU المدعومة من AMD. يتيح هذا التصميم لمسار التدريب نفسه في Ultralytics خدمة CUDA من NVIDIA وROCm من AMD دون واجهة خلفية مكررة.

راجع دلالات PyTorch HIP الرسمية لمزيد من التفاصيل.

مهم

في حزمة Python، استخدم device=0 أو device=cuda:0 مع PyTorch ROCm. لا تستخدم device=rocm:0؛ فـrocm ليس نوع جهاز في PyTorch.

تثبيت PyTorch ROCm#

  1. تحقّق من ظهور نظام التشغيل ووحدة GPU في مصفوفة توافق ROCm.

  2. استخدم أداة اختيار تثبيت PyTorch لاختيار إصدار ROCm المطابق لإصدار ROCm المثبّت لديك.

  3. ثبّت Ultralytics بعد PyTorch:

    pip install ultralytics
  4. تحقّق من أن PyTorch يتعرف على وحدة GPU من AMD:

    import torch
    
    print(torch.cuda.is_available())
    print(torch.cuda.get_device_name(0))
    print(torch.version.hip)

من المفترض أن يعيد torch.cuda.is_available() القيمة True، وأن يحدد اسم الجهاز وحدة GPU من AMD، وأن يعرض torch.version.hip إصدار HIP الذي يوفره إصدار ROCm.

التدريب على وحدة GPU من AMD#

استخدم وسيطات الجهاز نفسها المستخدمة في وضع التدريب القياسي في Ultralytics.

التدريب باستخدام ROCm
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# ⁨التدريب على أول وحدة GPU من AMD تكشف عنها PyTorch ROCm⁩
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# ⁨التدريب على وحدتي GPU من AMD⁩
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

يستخدم كل من التحقق والتنبؤ اختيار الجهاز نفسه:

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

توافق AMP#

تفعّل Ultralytics AMP افتراضيًا وتقارن نتائج الدقة الكاملة بنتائج الدقة المختلطة قبل التدريب. إذا كشف الاختبار عن نتائج غير متوافقة، فسيُعطّل AMP لمنع خسائر NaN أو التدريب بقيمة mAP تساوي صفرًا. وقد يتغير سلوك AMP في ROCm بحسب إصدارات PyTorch وROCm، لذا استخدم amp=False عند استكشاف أعطال خاصة بحزمة البرامج:

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

الميزات غير المدعومة بعد#

MIGraphX#

إن MIGraphX هي بيئة تشغيل من AMD لتحسين الرسوم البيانية والاستدلال. ولا يتضمن إصدار حزمة Python الحالية من Ultralytics تحميل نماذج MIGraphX الأصلية. ويجري تتبع أعمال التنفيذ الجارية وحاوية AMD والاعتماديات والاختبارات والوثائق معًا في PR #24137. وإلى أن يندمج هذا العمل ويجتاز التحقق على أجهزة AMD، ينبغي ألا يوصف تصدير نموذج ONNX بأنه دعم أصلي لـ MIGraphX في حزمة Python.

DirectML#

لا تتضمن حزمة Python من Ultralytics واجهة DirectML خلفية للتدريب أو التنبؤ على Windows. يختلف DirectML عن ROCm، ووجود بيئة ROCm عاملة لا يتيح استخدام device=directml.

وحدة NPU في Ryzen AI#

لا تظهر وحدات NPU في Ryzen AI عبر PyTorch ROCm، كما أنها ليست أجهزة أصلية في Ultralytics. قد تصدّر مسارات عمل يديرها المجتمع نماذج YOLO إلى ONNX وتشغّلها باستخدام أدوات Ryzen AI أو Vitis AI الخارجية من AMD، لكن بيئة التشغيل هذه والتحويل وتوافق الأجهزة تقع خارج مسار التنفيذ المدعوم في Ultralytics.

الملخص#

استخدم إصدار PyTorch ROCm متوافقًا مع device=0 أو device=cuda:0 لتدريب وحدات GPU المدعومة من AMD والتحقق منها واستدلالها. تعامل مع MIGraphX وDirectML ووحدات NPU في Ryzen AI على أنها إمكانات منفصلة: فلا يتاح أي منها بمجرد تثبيت ROCm أو تصدير نموذج ONNX.

الأسئلة الشائعة#

  • قد تكون حزمة PyTorch المثبتة مبنية لـ CPU أو CUDA، أو قد لا تكون وحدة GPU مدعومة من حزمة ROCm النشطة. ثبّت إصدار ROCm المطابق من أداة اختيار PyTorch وتحقّق من توافق وحدة GPU باستخدام مصفوفة التوافق لدى AMD.

  • هذا متوقع. يستخدم PyTorch ROCm واجهة torch.cuda وسلاسل الأجهزة بنمط CUDA عمدًا لضمان التوافق مع Python. لكن النموذج يُنفّذ عبر HIP وROCm على وحدة GPU من AMD.

  • لا. إن ONNX تنسيق محمول للنماذج. ولا يزال التنفيذ المسرّع يتطلب بيئة تشغيل متوافقة، كما أن واجهات MIGraphX وDirectML وRyzen AI NPU الخلفية الأصلية غير مضمنة في حزمة Python الحالية من Ultralytics.

المساهمون

التعليقات