# وحدة معالجة الرسوميات من Intel

تعمل معالجات Intel الرسومية مع PyTorch عبر واجهة XPU، مع سلسلة الأجهزة `xpu`. يأتي بناء XPU الخاص بـ PyTorch من فهرس حزم منفصل، لذا يضيف أمر التثبيت أدناه هذا الفهرس كفهرس إضافي.

## التثبيت

قم بتثبيت [مُحركات Intel GPU الخاصة بـ PyTorch](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu/2-15.html)، ثم شغّل `xpu-smi` لـ [التحقق من أن نظامك يكتشف وحدة المعالجة الرسومية](https://dgpu-docs.intel.com/driver/verification.html).

قم بتثبيت PyTorch من فهرس XPU إلى جانب Transformers.

```bash
pip install "transformers[torch]" --extra-index-url https://download.pytorch.org/whl/xpu
```

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

```py
import torch

print(torch.xpu.is_available(), torch.xpu.device_count())
```

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

## اختيار وترتيب وحدات المعالجة XPU

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

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

```cli
ZE_AFFINITY_MASK=0,2 torchrun trainer-program.py ...
```

يرى PyTorch وحدات XPUs 0 و2 فقط. لا يغيّر ترتيب القيم في `ZE_AFFINITY_MASK` الترتيب الذي يعرّف به PyTorch هذه الوحدات. للحصول على ترتيب متسق عبر التشغيلات، اضبط أيضاً `ZE_ENABLE_PCI_ID_DEVICE_ORDER=1`، والذي يُبلّغ عن الأجهزة من أدنى معرّف ناقل PCI إلى أعلى معرّف.

```cli
ZE_ENABLE_PCI_ID_DEVICE_ORDER=1 ZE_AFFINITY_MASK=0,2 torchrun trainer-program.py ...
```

راجع [مواصفة Level Zero](https://oneapi-src.github.io/level-zero-spec/level-zero/latest/core/PROG.html) لمزيد من المعلومات حول تعداد الأجهزة.

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

تحدد واجهة الانتباه الخلفية باستخدام `attn_implementation` عند تحميل النموذج، وتُطبَّق على كل من الاستدلال والتدريب. تستخدم النماذج [SDPA](./attention_interface) افتراضياً. مع PyTorch 2.8 أو أحدث، يتعامل SDPA على XPU مع انتباه الاستعلام المجمّع مباشرةً، دون الحاجة إلى تكرار رؤوس المفتاح والقيمة أولاً.

`attn_implementation="flash_attention_2"` يحمّل [kernels-community/flash-attn2](https://huggingface.co/kernels-community/flash-attn2) من Hub، والذي يتضمن إصدارات XPU. ثبّت الإضافة `kernels` لاستخدامه. يعمل FlashAttention-3 وFlashAttention-4 على وحدات معالجة الرسوميات من NVIDIA فقط.

```bash
pip install "transformers[kernels]"
```

```py
from transformers import AutoModelForCausalLM

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

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

مرّر `device_map="auto"` إلى [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتقسيم نموذج لا يتسع على XPU واحد عبر XPUs المتاحة، أو مرّر `device_map="xpu"` لتحميله على XPU واحد. يختار [pipeline()](/docs/transformers/main/ar/main_classes/pipelines#transformers.pipeline) XPU تلقائيًا عندما لا تمرّر `device`.

```py
from transformers import AutoModelForCausalLM, AutoTokenizer

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

inputs = tokenizer("Intel 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](./continuous_batching) رسوميات XPU والتدريج غير المتزامن على معالجات Intel الرسومية، ويقرر تلقائيًا ما إذا كان سيستخدمها أم لا.

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

Set `use_kernels=True` in [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) to replace supported layers with optimized kernels from the Hub. Intel GPUs cover most of the same layers as NVIDIA GPUs, such as activations, RMSNorm, and rotary embeddings. Install the `kernels` extra to use them.

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

تُطبَّق نوى Hub على التدريب أيضًا. عند استدعاء `model.train()` أو `model.eval()` يتم تبديل النوى الخاصة بذلك الوضع. لاختيار نواة بنفسك، مرّر [KernelConfig](/docs/transformers/main/ar/main_classes/kernels#transformers.KernelConfig) واستخدم `"xpu"` كمفتاح جهاز للخرائط الخاصة بـ XPU. راجع [تحميل النوى](./kernel_doc/loading_kernels) للتعرف على الخرائط الكاملة.

## كمّ النماذج

تتيح تقنية التكميم (Quantization) استيعاب نموذج أكبر في ذاكرة وحدة معالجة الرسوميات (GPU). راجع عمود معالجات Intel GPU في [نظرة عامة على التكميم](./quantization/overview) لمعرفة الطرق التي تعمل على XPU.

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

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

يتعرّف [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments) على معالجات الرسوميات من Intel ويضبط الجهاز على `xpu`، بحيث يقوم [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer) بالتدريب عليها دون الحاجة إلى أي إعدادات خاصة بالجهاز. يتحقق `TrainingArguments` من دعم bf16 باستخدام `torch.xpu.is_bf16_supported()`، ويرمي `ValueError` إذا لم يدعم المعالج الرسومي ذلك.

```py
from transformers import TrainingArguments

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

يطبع `xpu:0` عندما يتدرب `Trainer` على وحدة XPU واحدة.

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

يستخدم التدريب الموزّع الخلفية الجماعية `xccl`. شغّل عملية واحدة لكل وحدة معالجة XPU باستخدام `torchrun` أو `accelerate launch`.

```bash
torchrun --nproc_per_node=2 train.py
```

راجع [DDP](./ddp) و[FSDP2](./fsdp) و[DeepSpeed ZeRO](./deepspeed) و[Tensor parallelism](./tensor_parallelism) لاختيار استراتيجية التوازي.

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

- اقرأ دليل [البدء باستخدام PyTorch على معالجات Intel الرسومية](https://docs.pytorch.org/docs/stable/notes/get_start_xpu.html) لمعرفة الأجهزة والمنصات المدعومة.
- اقرأ [واجهات الانتباه الخلفية](./attention_interface) لمعرفة كيفية اختيار `attn_implementation` لدالة الانتباه.

