Transformers documentation
AMD GPU
AMD GPU
تعمل وحدات معالجة الرسوميات AMD Instinct (سلاسل MI200 وMI300 وMI350) وRadeon على PyTorch عبر ROCm، وهو حزمة برمجيات وحدات معالجة الرسوميات من AMD. يستخدم إصدار PyTorch المبني على ROCm HIP، وهو واجهة برمجة تشبه CUDA من AMD، لعرض وحدات معالجة الرسوميات من AMD عبر واجهة torch.cuda. سلسلة الأجهزة هي cuda، لذا فإن الكود المكتوب لوحدات معالجة الرسوميات من NVIDIA يعمل دون أي تغيير. يتحقق Transformers من torch.version.hip وقت التشغيل للتمييز بين النوعين، ويوجّه نوى الانتباه ونوى Hub إلى الإصدارات المخصصة لـ AMD.
التثبيت
قم بتثبيت ROCm من صورة Docker الخاصة بـ huggingface/transformers-pytorch-amd-gpu. تتضمن هذه الصورة نسخة ROCm من PyTorch، ونسخة من flash-attn مخصصة لبطاقات MI300 وMI350 الرسومية (gfx942 وgfx950)، بالإضافة إلى تثبيت Transformers من المصدر.
docker run -it --device=/dev/kfd --device=/dev/dri --group-add video \
--ipc=host --shm-size 16G \
huggingface/transformers-pytorch-amd-gpu--device=/dev/kfd و --device=/dev/dri تُتيح الوصول إلى معالجات AMD الرسومية داخل الحاوية. ثبّت kernels داخل الحاوية من أجل use Hub kernels.
pip install "transformers[kernels]"للتثبيت على نظامك الخاص بدلاً من ذلك، اختر ROCm في محدد تثبيت PyTorch وتأكد من أن إصدار ROCm من العجلة مدعوم من قِبل برنامج تشغيلك.
تحقق من أن PyTorch يرى وحدات معالجة الرسوميات من AMD.
import torch
print(torch.version.hip, torch.cuda.is_available(), torch.cuda.device_count())
print(torch.cuda.get_device_properties(0).gcnArchName)7.2.53211 True 2 gfx942:sramecc+:xnack-
torch.version.hip تكون None في بناء PyTorch الخاص بـ CUDA. يبلّغ gcnArchName عن معمارية وحدة معالجة الرسوميات، على سبيل المثال gfx942 لـ MI300، وgfx950 لـ MI350، وgfx1151 لـ Ryzen AI Max (Strix Halo).
اختيار وحدات معالجة الرسوميات وترتيبها
استخدم HIP_VISIBLE_DEVICES لاختيار وحدات معالجة الرسوميات وتحديد ترتيبها. اضبطه على نفس سطر الأوامر الخاص بالتنفيذ.
HIP_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...يرى PyTorch وحدات معالجة الرسوميات 0 و2 فقط، وهي مُرسَلة إلى cuda:0 وcuda:1. يقوم ROCR_VISIBLE_DEVICES بتصفية وحدات معالجة الرسوميات على مستوى أدنى في المكدس، وغالباً ما يُعيّنه مجدولو العناقيد. إذا تم تعيين كلاهما، فإن HIP_VISIBLE_DEVICES يُفهرس وحدات معالجة الرسوميات التي تبقى مرئية بواسطة ROCR_VISIBLE_DEVICES.
استخدم rocm-smi أو amd-smi لعرض قائمة ببطاقات الرسوميات ومفاتيحها.
تشغيل الاستدلال
يتعرّف Pipeline وdevice_map="auto" على معالجات AMD الرسومية ويضعان النموذج على cuda تلقائيًا. يمكنك أيضًا تمرير device_map="cuda" أو device_map="cuda:1" بشكل صريح.
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="auto"
)
inputs = tokenizer("The French Bread Law states", return_tensors="pt").to(model.device)
output = model.generate(**inputs, do_sample=False, max_new_tokens=50)
print(tokenizer.decode(output[0], skip_special_tokens=True))The French Bread Law states that the French government must provide a certain amount of bread for the citizens of the country. The law is passed by the French parliament. The French parliament is a body of the French government. The French government is a body of the French state. The
اختر واجهة خلفية للانتباه
اضبط واجهة الانتباه باستخدام attn_implementation عند تحميل النموذج، حيث ينطبق ذلك على كل من الاستدلال والتدريب. الخيار الافتراضي هو SDPA ويعمل على كل معالج رسومي من AMD مدعوم بواسطة PyTorch. كما يتوفر خياران لـ FlashAttention.
attn_implementation | يتطلب | ملاحظات |
|---|---|---|
"sdpa" | – | افتراضي. |
"flash_attention_2" | flash-attn المصمّم لـ ROCm، أو kernels | يستخدم حزمة flash-attn عند تثبيتها. يدعم واجهة Composable Kernel (CK) الافتراضية معالجات MI200 وMI300 وMI355 وRDNA 3/4، ويتضمن صورة Docker هذه الحزمة على MI300 أو MI350. وإلا، يتم تحميل amd/aiter-flash-attn من Hub. |
"flash_attention_3" | النواة | يحمّل amd/aiter-flash-attn، وهو نواة FlashAttention مُجمّعة مسبقًا من مكتبة AITER الخاصة بـ AMD. لا يتطلب أي تجميع. |
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
dtype="bfloat16",
device_map="auto",
attn_implementation="flash_attention_3",
)على ROCm، يحل flash_attention_3 إلى نواة AITER ويسجّل ما يلي. يستخدم Transformers حالياً الاسم المستعار kernels-community/aiter-flash-attn، والذي يعيد التوجيه إلى amd/aiter-flash-attn. تشير الرسالة إلى حزمة FlashAttention-3، لذا تظهر حتى عند تثبيت flash_attention_2.
You do not have `flash_attn` installed, using `kernels-community/aiter-flash-attn` from the `kernels` library instead!
يمكنك أيضًا تمرير مستودع النواة مباشرةً باستخدام attn_implementation="kernels-community/aiter-flash-attn". راجع واجهات الانتباه الخلفية لمعرفة كيفية اختيار الواجهات الخلفية.
استخدام نواة Hub
اضبط use_kernels=True في from_pretrained() لاستبدال الطبقات المدعومة بنوى مُحسَّنة من Hub. يكتشف Transformers بيئة ROCm ويختار بناء AMD لكل طبقة، مثل amd/aiter-rope للتضمينات الدورانية وkernels-community/liger-kernels لـ RMSNorm. عند كتابة KernelConfig مخصص، استخدم "rocm" كمفتاح للجهاز للخرائط الخاصة بـ AMD.
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="auto", use_kernels=True
)تعمل نواة Hub بشكل رئيسي على تسريع مرحلة التعبئة (prefill) والدفعات الكبيرة. قم بإجراء اختبارات أداء على حمل العمل الخاص بك قبل تفعيلها لفك الترميز في الدفعات الصغيرة. راجع تحميل النوى للاطلاع على التخصيص الكامل.
كمّ النماذج
تشمل الطرق المدعومة على ROCm AWQ وGPT-QModel وcompressed-tensors وQuark من AMD. كما يحظى bitsandbytes بدعم جزئي. تدعم وحدات معالجة الرسومات MI300 والأحدث منها تنسيق FP8 بشكل أصلي. راجع جدول التوافق للاطلاع على القائمة الكاملة.
التدريب باستخدام Trainer
يتعرّف TrainingArguments على معالجات AMD الرسومية ويضبط الجهاز على cuda تلقائيًا.
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./outputs",
bf16=True,
)التدريب الموزّع
يأتي إصدار ROCm من PyTorch مع RCCL، وهو تنفيذ AMD لواجهة NCCL، لذا تعمل واجهة nccl الخلفية، وtorchrun، وFSDP، وDeepSpeed، وواجهة Transformers الموزعة دون أي تغييرات.
import torch
from transformers import AutoModelForCausalLM, DistributedConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-1.7B",
dtype=torch.bfloat16,
distributed_config=DistributedConfig(tp_size=2, fsdp_size=4),
)torchrun --nproc_per_node=8 train.py
راجع توازي الموترات، وتوازي الخبراء، وFSDP لمعرفة الخيارات المتاحة.
القيود
CodeCarbonCallbackغير متوافق مع ROCm. اضبطreport_toفي TrainingArguments لاستبعادcodecarbon.- تعتمد طرق التكميم المميزة بعلامة 🔴 لـ ROCm في جدول التوافق على نوى CUDA فقط، وتفشل في التحميل على وحدات معالجة الرسوميات من AMD.
الخطوات التالية
- اقرأ وثائق ROCm لإعداد برنامج التشغيل وPyTorch.
- تصفّح حزم ROCm في منظمات AMD وkernels-community.
- اقرأ تحميل النوى لتخصيص النوى التي تحل محل طبقات معينة.