تدريب وحدات GPU من AMD باستخدام Ultralytics YOLO وROCm#
تدعم Ultralytics التدريب والتحقق والاستدلال على وحدات GPU المتوافقة من AMD من خلال
PyTorch ROCm. يعرض PyTorch أجهزة ROCm عمدًا من خلال واجهة Python نفسها
torch.cuda المستخدمة مع CUDA، ولذلك لا تحتاج Ultralytics إلى نوع جهاز منفصل rocm لنماذج PyTorch الأصلية. ثبّت إصدار ROCm من PyTorch، ثم حدّد وحدة GPU من AMD باستخدام الصيغة القياسية device=0 أو device=cuda:0.
توفّر AMD أيضًا تقنيات استدلال منفصلة عن PyTorch ROCm. ولا يعني دعم أحد منتجات AMD دعم كل بيئة تشغيل أو مسرّع من AMD.
نظرة سريعة على الدعم#
يوضح هذا الجدول حزمة Ultralytics Python المستخدمة للتدريب والتحقق والتصدير والتنبؤ.
| منتج أو بيئة تشغيل من AMD | دعم Ultralytics | الاستخدام أو الحالة |
|---|---|---|
| وحدات AMD Instinct ووحدات Radeon المدعومة مع ROCm | ✅ | درّب النماذج الأصلية من PyTorch وتحقّق منها وشغّلها باستخدام device=0 أو device=cuda:0. |
| ROCm متعدد وحدات GPU | ✅ | استخدم device=0,1 أو device=[0, 1]؛ ويتبع التنفيذ الموزّع حزمة PyTorch ROCm المثبّتة. |
| الخلط التلقائي للدقة في ROCm (AMP) | ⚠️ | يتوفر ذلك عندما تجتاز إصدارات PyTorch وROCm المثبّتة فحوصات AMP في Ultralytics؛ استخدم amp=False إذا كانت غير متوافقة. |
| تصدير ONNX | ✅ | التصدير مدعوم، لكن ملف ONNX لا يوفّر بحد ذاته بيئة تشغيل مُسرّعة بواسطة AMD. |
| استدلال MIGraphX | 🚧 | غير متوفر في حزمة Python الحالية؛ ويجري تتبّع أعمال التنفيذ في PR #24137. |
| صورة Docker من AMD والتكامل المستمر على أجهزة AMD | 🚧 | يجري تتبّعهما أيضًا في PR #24137، ولا يوفّرهما اختيار جهاز ROCm وحده. |
| Windows DirectML | ❌ Python | لا تتوفر في حزمة Python واجهة خلفية للتدريب أو التنبؤ باستخدام DirectML. |
| وحدة NPU في Ryzen AI | ❌ | لا يوجد تكامل أصلي لوحدات NPU في Ultralytics؛ وتدير المجتمع سير عمل ONNX/Vitis AI الخارجي. |
| وحدات CPU من AMD | ✅ CPU | استخدم device=cpu؛ فهذا تنفيذ قياسي على CPU، وليس واجهة خلفية لتسريع خاص بـ AMD. |
يعتمد توفر ROCm على وحدة GPU المحددة ونظام التشغيل وإصدار ROCm وإصدار PyTorch. تأكّد من توافق أجهزتك في مصفوفة توافق ROCm الخاصة بـ AMD قبل التثبيت. لا تستطيع Ultralytics إضافة دعم لجهاز لا يعرِضه إصدار PyTorch ROCm المثبّت.
لماذا يستخدم ROCm أسماء أجهزة CUDA؟#
يستخدم إصدار ROCm من PyTorch مكتبة 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#
-
تحقّق من ظهور نظام التشغيل ووحدة GPU لديك في مصفوفة توافق ROCm.
-
استخدم محدِّد تثبيت PyTorch لاختيار إصدار ROCm المتوافق مع إصدار ROCm المثبّت لديك.
-
ثبّت Ultralytics بعد PyTorch:
pip install ultralytics -
تحقّق من أن 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 القياسي.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on the first AMD GPU exposed by PyTorch ROCm
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)
# Train across two AMD GPUs
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 لتحسين الرسوم البيانية والاستدلال. ولا يتضمن إصدار حزمة Ultralytics Python الحالية تحميل نماذج MIGraphX الأصلي. ويجري تتبّع التنفيذ النشط وحاوية AMD والتبِعيات والاختبارات والتوثيق معًا في PR #24137. وإلى أن يندمج هذا العمل ويحصل على التحقق باستخدام أجهزة AMD، لا ينبغي وصف تصدير نموذج ONNX بأنه دعم أصلي لـ MIGraphX في حزمة Python.
DirectML#
لا تحتوي حزمة Ultralytics Python على واجهة خلفية لـ 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 وNPU في Ryzen AI غير مضمنة في حزمة Ultralytics Python الحالية.