# Intel Gaudi

تعمل مُسرِّعات Intel Gaudi على تشغيل PyTorch ضمن مجموعة [Intel Gaudi](https://docs.habana.ai/en/latest/index.html)، مع استخدام سلسلة الأجهزة `hpu`. يشغّل Gaudi PyTorch في الوضع المباشر (eager mode) افتراضياً. في الوضع المباشر، يُنفَّذ كل عملية فور استدعائها، تماماً كما يعمل PyTorch على وحدة المعالجة المركزية (CPU) أو وحدة معالجة الرسوميات (GPU)، لذا تعمل نماذج Transformers على Gaudi دون الحاجة إلى أي تعديلات خاصة بـ Gaudi. أما لالتقاط النموذج في رسم بياني (graph) بدلاً من ذلك، ف[قم بتجميعه](#compile-the-model) باستخدام `torch.compile`.

## التثبيت

قم بتثبيت برنامج Intel Gaudi وحزمة PyTorch الخاصة به (`habana-torch-plugin`، والتي يتم استيرادها باسم `habana_frameworks`) باستخدام [دليل تثبيت Intel Gaudi](https://docs.habana.ai/en/latest/Installation_Guide/index.html)، بالإضافة إلى [Accelerate](https://huggingface.co/docs/accelerate/index) الإصدار 1.5.0 أو أحدث.

يستخدم Transformers تينسورات من نوع int64 لمعرّفات الرموز، لذا فعّل دعم int64 على Gaudi. تعمل اختبارات Gaudi المستمرة في Transformers مع نفس الإعداد.

```bash
export PT_ENABLE_INT64_SUPPORT=1
```

تحقق من أن Transformers يمكنه رؤية الجهاز.

```py
from transformers import is_torch_hpu_available

print(is_torch_hpu_available())
```

يطبع `True` عندما يكون Gaudi جاهزًا للاستخدام، ويطبع `False` مع إصدارات Accelerate الأقدم من 1.5.0، حتى لو كان جهاز Gaudi موجودًا.

## اختيار الأجهزة

اختر أجهزة Gaudi التي يمكن لحاوية Docker استخدامها عند تشغيلها. اضبط `HABANA_VISIBLE_MODULES` على معرّفات الوحدات، وهي تبقى ثابتة عبر عمليات إعادة التشغيل وإعادة تثبيت برامج التشغيل، أو اضبط `HABANA_VISIBLE_DEVICES` على فهارس الأجهزة، وهي قد تتغير. إذا لم تضبط أيًّا منهما، فسيستخدم PyTorch أي جهاز Gaudi متاح على الخادم.

```bash
docker run --runtime=habana -e HABANA_VISIBLE_MODULES=0,1,2,3 ...
```

شغّل `hl-smi -Q index,module_id -f csv` لربط فهارس الأجهزة بمعرّفات الوحدات. بالنسبة إلى عبء عمل موزّع على جزء من خادم، تدعم Intel مجموعات مكوّنة من جهازين وأربعة أجهزة فقط. راجع [عدة حاويات Docker، كل منها يحمل عبء عمل واحدًا](https://docs.habana.ai/en/latest/Orchestration/Multiple_Tenants_on_HPU/Multiple_Dockers_each_with_Single_Workload.html) لمعرفة تركيبات معرّفات الوحدات المدعومة.

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

مرّر `device_map="hpu"` إلى [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained). يختار [pipeline()](/docs/transformers/main/ar/main_classes/pipelines#transformers.pipeline) Gaudi تلقائيًا عندما لا تمرّر `device`.

```py
from transformers import AutoModelForCausalLM, AutoTokenizer

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

inputs = tokenizer("Intel Gaudi is", 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))
```

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

يقوم [bitsandbytes](./quantization/bitsandbytes) بتكميم النماذج إلى 4 أو 8 بت على Gaudi 2 و Gaudi 3. عند عدم تمرير `device_map`، يضع النموذج على جهاز Gaudi الحالي.

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

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

يتعرّف [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments) على Gaudi ويضبط الجهاز على `hpu`، لذا يتدرّب `Trainer` عليه دون أي إعدادات للأجهزة. تدعم جميع أجيال Gaudi نمط bf16.

```py
from transformers import TrainingArguments

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

يطبع جهاز `hpu` عندما سيُدرّب `Trainer` على Gaudi.

## تجميع النموذج

يغلّف Transformers استدعاء `torch.compile` على Gaudi، لذا فإن أي استدعاء بخلفية أخرى غير `hpu_backend` أو `eager`، بما في ذلك زخرفة `@torch.compile` في كود النمذجة، يبدّل إلى `hpu_backend` ويسجّل تحذيراً. ينطبق هذا الغلاف على كل استدعاء لـ `torch.compile`، سواء للاستدلال أو التدريب.

لترجمة نموذج للتدريب، اضبط `torch_compile=True` في [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments)، مما يضبط `torch_compile_backend` على `"hpu_backend"`.

```py
from transformers import TrainingArguments

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

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

يستخدم التدريب الموزّع واجهة [HCCL](https://docs.habana.ai/en/latest/API_Reference_Guides/HCCL_APIs/index.html) الجماعية. يختار Transformers هذه الواجهة على Gaudi، كما يمكنك ضبطها صراحةً باستخدام `ddp_backend="hccl"`.

```py
training_args = TrainingArguments(
    output_dir="./outputs",
    bf16=True,
    ddp_backend="hccl",
)
```

شغّل عملية واحدة لكل جهاز Gaudi باستخدام `torchrun` أو `accelerate launch`، بعد [اختيار الأجهزة](#select-devices). يحدد `accelerate launch` عدد العمليات مساوياً لعدد أجهزة Gaudi عندما لا تمرر `--num_processes`.

```bash
accelerate launch train.py
```

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

- اقرأ [توثيق Intel Gaudi](https://docs.habana.ai/en/latest/index.html) للحصول على تفاصيل العتاد، ومكدس البرمجيات، و[بنية Gaudi](https://docs.habana.ai/en/latest/Gaudi_Overview/Gaudi_Architecture.html).
- جرّب [Optimum for Intel Gaudi](https://huggingface.co/docs/optimum-habana/index) للحصول على تنسيقات نماذج مُحسّنة لـ Gaudi للتدريب والاستدلال.

