Transformers documentation

وحدة معالجة رسومات من NVIDIA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

وحدة معالجة رسومات من NVIDIA

تعمل وحدات معالجة الرسوميات من NVIDIA على PyTorch عبر CUDA، مع سلسلة الأجهزة cuda. تدعم معظم نوى الانتباه (attention kernels) وتحسينات الخدمة في Transformers تقنية CUDA، وبعضها، مثل FlashAttention-3 وFlashAttention-4، يعمل حصريًا على CUDA.

التثبيت

قم بتثبيت برامج تشغيل CUDA الخاصة بوحدة معالجة الرسوميات (GPU) لديك، ثم ثبّت PyTorch وTransformers. راجع دليل التثبيت لأجهزة NVIDIA Spark (ARM64)، والتي تتطلب PyTorch من فهرس حزم NVIDIA.

pip install "transformers[torch]"

تحقق من أن PyTorch يمكنه رؤية وحدات معالجة الرسوميات (GPUs).

import torch

print(torch.cuda.is_available(), torch.cuda.device_count())

يطبع True وعدد وحدات معالجة الرسومات، على سبيل المثال True 4.

اختيار وحدات معالجة الرسوميات وترتيبها

استخدم متغير البيئة CUDA_VISIBLE_DEVICES لاختيار وحدات معالجة الرسوميات (GPU) وتحديد ترتيبها. اضبطه على سطر الأوامر نفسه الذي تُنفّذ فيه العملية، لأن متغيرًا مُصدَّرًا قد تنساه قد يُوجّه تشغيلًا لاحقًا إلى وحدات معالجة الرسوميات الخاطئة دون أي إنذار.

على سبيل المثال، لاختيار وحدات معالجة الرسوميات 0 و 2 من أصل أربع وحدات:

CUDA_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...

يرى PyTorch وحدات معالجة الرسوميات 0 و2 فقط، وهي مُرمّزة على cuda:0 وcuda:1. لعكس الترتيب (استخدام وحدة معالجة الرسوميات 2 كـcuda:0 ووحدة معالجة الرسوميات 0 كـcuda:1):

CUDA_VISIBLE_DEVICES=2,0 torchrun trainer-program.py ...

للتشغيل دون أي وحدات معالجة رسومية:

CUDA_VISIBLE_DEVICES= python trainer-program.py ...

ترتّب CUDA وحدات معالجة الرسوميات (GPU) من الأسرع إلى الأبطأ افتراضياً، وقد لا يتطابق ذلك مع nvidia-smi. اضبط CUDA_DEVICE_ORDER=PCI_BUS_ID حتى تتطابق الفهارس في CUDA_VISIBLE_DEVICES مع nvidia-smi.

CUDA_DEVICE_ORDER=PCI_BUS_ID CUDA_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...

اختر واجهة خلفية للانتباه

تُعيّن واجهة الانتباه (attention backend) عبر attn_implementation عند تحميل النموذج، وتُطبَّق على كلٍّ من الاستدلال والتدريب. تستخدم النماذج SDPA افتراضياً. كما تدعم وحدات معالجة الرسوميات من NVIDIA ثلاث إصدارات من FlashAttention. عند عدم تثبيت حزمة FlashAttention، يقوم Transformers بتحميل نواة (kernel) مُعدّة مسبقاً من Hub بدلاً من ذلك، وهذا يتطلب إضافة kernels (pip install "transformers[kernels]").

attn_implementationوحدات معالجة الرسومياتنواة Hub عند عدم تثبيت الحزمة
"flash_attention_2"Ampere أو أحدثkernels-community/flash-attn2
"flash_attention_3"Ampere أو أحدثkernels-community/vllm-flash-attn3
"flash_attention_4"Hopper أو أحدثkernels-community/flash-attn4
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-0.6B",
    dtype="bfloat16",
    device_map="cuda",
    attn_implementation="flash_attention_2",
)

تشغيل الاستدلال

مرّر device_map="auto" إلى from_pretrained() لتقسيم نموذج لا يتسع على وحدة معالجة رسومية واحدة عبر وحدات المعالجة الرسومية المتاحة، أو مرّر device_map="cuda" لتحميله على وحدة معالجة رسومية واحدة. يختار pipeline() وحدة معالجة رسومية تلقائيًا عندما لا تمرّر device.

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="cuda")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")

inputs = tokenizer("NVIDIA GPUs are", return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=50, do_sample=False)
print(tokenizer.decode(output[0], skip_special_tokens=True))

يدعم Continuous batching رسوميات CUDA والتدريج غير المتزامن على وحدات معالجة NVIDIA GPU، ويقرر تلقائيًا ما إذا كان سيستخدمها أم لا.

استخدام نواة Hub

اضبط use_kernels=True في from_pretrained() لاستبدال الطبقات المدعومة بنوى مُحسَّنة من Hub. تتمتع معالجات NVIDIA الرسومية بأوسع تغطية، وتشمل دوال التنشيط، وRMSNorm، والتضمينات الدورانية، وطبقات MegaBlocks لخلطات الخبراء، وعمليات فضاء الحالة الخاصة بـ Mamba. ثبّت الحزمة الإضافية kernels لاستخدامها.

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="cuda", use_kernels=True
)

تُطبَّق نوى Hub على التدريب أيضًا. عند استدعاء model.train() أو model.eval()، يتم تبديل النوى إلى تلك المناسبة للوضع المحدد. ولاختيار نواة بنفسك، مرّر KernelConfig واستخدم "cuda" كمفتاح للجهاز للخرائط الخاصة بـ NVIDIA. راجع تحميل النوى للاطلاع على الخريطة الكاملة.

كمّ النماذج

تتيح عملية التكميم (Quantization) استيعاب نموذج أكبر في ذاكرة وحدة معالجة الرسوميات (GPU). تدعم معظم طرق التكميم في مكتبة Transformers تقنية CUDA. راجع عمود CUDA في نظرة عامة على التكميم للمقارنة بينها.

لضبط نموذج لا يتسع في ذاكرة وحدة معالجة الرسوميات، حمّله بدقة 4 بت باستخدام bitsandbytes ودرّب محولات LoRA باستخدام PEFT.

التدريب باستخدام Trainer

يتعرّف TrainingArguments على وحدات معالجة الرسوميات من NVIDIA ويضبط الجهاز على cuda، لذا يقوم Trainer بالتدريب عليها دون الحاجة إلى أي إعدادات للجهاز. استخدم دقة مختلطة bf16 على وحدات معالجة الرسوميات من Ampere أو الأحدث، وfp16 على الوحدات الأقدم.

from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./outputs",
    bf16=True,
)
print(training_args.device)

يطبع cuda:0 عندما سيقوم Trainer بالتدريب على وحدة معالجة رسومية واحدة.

التدريب الموزّع

يستخدم التدريب متعدد وحدات المعالجة الرسومية (Multi-GPU) واجهة NCCL الجماعية. شغّل عملية واحدة لكل وحدة معالجة رسومية باستخدام torchrun أو accelerate launch.

torchrun --nproc_per_node=4 train.py

راجع DDP وFSDP2 وDeepSpeed ZeRO وTensor parallelism لاختيار استراتيجية التوازي.

الخطوات التالية

Update on GitHub