# Accelerate

يوفر [Accelerate](https://hf.co/docs/accelerate/index) واجهة موحدة لأطر التدريب الموزع مثل [FSDP](https://docs.pytorch.org/tutorials/intermediate/FSDP_tutorial.html) أو [DeepSpeed](https://www.deepspeed.ai/). يقوم باكتشاف بيئتك (عدد وحدات معالجة الرسومات، إطار التدريب الموزع، الدقة المختلطة، إلخ) ويضبط التدريب تلقائيًا، سواء كنت تعمل على وحدة معالجة رسومات واحدة مع DDP أو على 8 وحدات معالجة رسومات مع FSDP.

يغلّف Accelerate النموذج في الغلاف الموزّع المناسب، وينقله إلى الجهاز الصحيح، وينشئ مُحسِّنًا متوافقًا. أثناء التدريب، يستخدم Accelerate طريقة [backward](https://huggingface.co/docs/accelerate/main/en/package_reference/accelerator#accelerate.Accelerator.backward) الخاصة به للتعامل مع تحجيم التدرجات في الدقة المختلطة. يستدعي [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer) واجهات برمجة تطبيقات Accelerate المناسبة ويوكل جميع آليات التوزيع إلى Accelerate.

قم بإعداد Accelerate لـ [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer) إما باستخدام ملف إعدادات Accelerate أو [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments).

## ملف إعدادات Accelerate

شغّل الأمر [accelerate config](https://huggingface.co/docs/accelerate/en/package_reference/cli#accelerate-config) وأجب عن الأسئلة المتعلقة بمكوناتك المادية وإعداد التدريب. سيؤدي هذا إلى إنشاء ملف `default_config.yaml` في ذاكرتك المؤقتة. المثال أدناه خاص بـ FSDP.

```yaml
compute_environment: LOCAL_MACHINE
distributed_type: FSDP
fsdp_config:
  fsdp_version: 2
  fsdp_reshard_after_forward: true
  fsdp_cpu_offload: false
  fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
  fsdp_cpu_ram_efficient_loading: true
  fsdp_activation_checkpointing: false
  fsdp_state_dict_type: SHARDED_STATE_DICT
  fsdp_transformer_layer_cls_to_wrap: LlamaDecoderLayer
mixed_precision: bf16
num_machines: 1
num_processes: 4
```

شغّل [accelerate launch](https://huggingface.co/docs/accelerate/en/package_reference/cli#accelerate-launch) مع سكربت مبني على [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer)، وسيقرأ Accelerate ملف الإعدادات لإعداد التدريب. لا حاجة إلى الحججين [fsdp_config](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments.fsdp_config) و[deepspeed](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments.deepspeed) لأن ملف إعدادات Accelerate يغطي نفس الإعدادات.

```cli
accelerate launch train.py
```

يقبل [accelerator_config](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments.accelerator_config) إعدادات لا تملك حُججاً مخصصة على المستوى الأعلى. على سبيل المثال، اضبط `non_blocking=True` مع `dataloader_pin_memory()` لتداخل نقل البيانات مع الحساب من أجل تحقيق معدل تشغيل أعلى للوحدة الرسومية (GPU).

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    dataloader_pin_memory=True,
    accelerator_config={
        "non_blocking": True,
    },
)
```

## TrainingArguments

مرّر إعدادًا خاصًا بالخلفية إلى [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments). تقرأ الطريقة [create_accelerator_and_postprocess()](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer.create_accelerator_and_postprocess) الإعدادات وتُهيّئ التدريب.

مرّر ملف تكوين JSON أو قاموس إلى `~TrainingArguments.fsdp_config`. راجع [FSDP](./fsdp) للحصول على دليل كامل ومرجع للتكوين.

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    fsdp=True,
    fsdp_config="path/to/fsdp.json",
)
```

مرّر ملف تكوين JSON أو قاموسًا إلى `~TrainingArguments.deepspeed`. راجع [DeepSpeed](./deepspeed) للحصول على دليل كامل ومرجع للتكوين.

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    deepspeed="path/to/ds_config.json",
)
```

يتم تكوين DDP مباشرةً من خلال حقول [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments). راجع [DDP](./ddp) للاطلاع على التفاصيل.

```py
from transformers import TrainingArguments

TrainingArguments(
    ...,
    ddp_backend="nccl",
    ddp_find_unused_parameters=False,
    ddp_bucket_cap_mb=25,
    ddp_timeout=1800,
)
```

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

- راجع [DDP](./ddp) للتدريب المتوازي على مستوى البيانات عندما يتسع نموذجك على وحدة معالجة رسومية واحدة.
- راجع [FSDP](./fsdp) لتقسيم المعاملات والتدرجات وحالات المُحسِّن عبر وحدات معالجة الرسوميات.
- راجع [DeepSpeed](./deepspeed) لتحسين ZeRO وإزالة التحميل.

