# واجهات سطر الأوامر (CLIs)

توفّر TRL واجهة سطر أوامر (CLI) قوية لضبط نماذج اللغة الكبيرة (LLMs) باستخدام طرق مثل الضبط الإشرافي (SFT) وتحسين التفضيلات المباشرة (DPO) وغيرها. تُخفي واجهة سطر الأوامر معظم الشيفرة التمهيدية، مما يتيح لك إطلاق مهام التدريب بسرعة وبشكل قابل للتكرار.

## الأوامر

الأوامر المدعومة حاليًا هي:

### أوامر التدريب

- `trl distillation`: تقطير نموذج المعلم إلى نموذج الطالب باستخدام تقطير المعرفة على السياسة
- `trl dpo`: ضبط نموذج لغة كبير باستخدام DPO
- `trl grpo`: ضبط نموذج LLM باستخدام GRPO
- `trl kto`: ضبط نموذج لغة كبير باستخدام KTO
- `trl reward`: تدريب نموذج المكافأة
- `trl rloo`: ضبط نموذج لغة كبير باستخدام RLOO
- `trl sft`: ضبط نموذج لغة كبير باستخدام SFT

### أوامر أخرى

- `trl env`: الحصول على معلومات النظام
- `trl vllm-serve`: تقديم نموذج باستخدام vLLM (مُتروك، استخدم `vllm serve` مباشرة، راجع [تكامل vLLM](vllm_integration))

## الضبط الدقيق باستخدام واجهة سطر الأوامر TRL

### الاستخدام الأساسي

يمكنك بدء التدريب مباشرةً من سطر الأوامر عن طريق تحديد الحجج المطلوبة مثل النموذج ومجموعة البيانات:

```bash
trl sft \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name stanfordnlp/imdb
```

```bash
trl dpo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name anthropic/hh-rlhf
```

```bash
trl reward \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/ultrafeedback_binarized
```

```bash
trl grpo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name HuggingFaceH4/Polaris-Dataset-53K \
  --reward_funcs accuracy_reward
```

```bash
trl rloo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name HuggingFaceH4/Polaris-Dataset-53K \
  --reward_funcs accuracy_reward
```

```bash
trl kto \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/kto-mix-14k
```

### استخدام ملفات الإعداد

للحفاظ على أوامر سطر الأوامر نظيفة وقابلة للتكرار، يمكنك تحديد جميع حُجج التدريب في ملف تكوين بصيغة YAML:

```yaml
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: stanfordnlp/imdb
```

شغّل باستخدام:

```bash
trl sft --config sft_config.yaml
```

```yaml
# dpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: anthropic/hh-rlhf
```

شغّل باستخدام:

```bash
trl dpo --config dpo_config.yaml
```

```yaml
# reward_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/ultrafeedback_binarized
```

شغّل باستخدام:

```bash
trl reward --config reward_config.yaml
```

```yaml
# grpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
  - accuracy_reward
```

شغّل باستخدام:

```bash
trl grpo --config grpo_config.yaml
```

```yaml
# rloo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
  - accuracy_reward
```

شغّل باستخدام:

```bash
trl rloo --config rloo_config.yaml
```

```yaml
# kto_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/kto-mix-14k
```

شغّل باستخدام:

```bash
trl kto --config kto_config.yaml
```

### التوسع باستخدام torchrun

يبدأ TRL CLI التدريب باستخدام [torchrun](https://docs.pytorch.org/docs/stable/elastic/run.html)، بعملية واحدة لكل وحدة معالجة رسومية متاحة. يمكن تمرير أي حجة من `torchrun` مباشرة إلى `trl`، مثل `--nproc_per_node` أو `--nnodes`.

```bash
trl sft \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name stanfordnlp/imdb \
  --nproc_per_node 4
```

أو، باستخدام ملف تكوين:

```yaml
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: stanfordnlp/imdb
nproc_per_node: 4
```

شغّل باستخدام:

```bash
trl sft --config sft_config.yaml
```

```bash
trl dpo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name anthropic/hh-rlhf \
  --nproc_per_node 4
```

أو، باستخدام ملف تكوين:

```yaml
# dpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: anthropic/hh-rlhf
nproc_per_node: 4
```

شغّل باستخدام:

```bash
trl dpo --config dpo_config.yaml
```

```bash
trl reward \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/ultrafeedback_binarized \
  --nproc_per_node 4
```

أو، باستخدام ملف تكوين:

```yaml
# reward_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/ultrafeedback_binarized
nproc_per_node: 4
```

شغّل باستخدام:

```bash
trl reward --config reward_config.yaml
```

```bash
trl grpo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name HuggingFaceH4/Polaris-Dataset-53K \
  --reward_funcs accuracy_reward \
  --nproc_per_node 4
```

أو، باستخدام ملف تكوين:

```yaml
# grpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
  - accuracy_reward
nproc_per_node: 4
```

شغّل باستخدام:

```bash
trl grpo --config grpo_config.yaml
```

```bash
trl rloo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name HuggingFaceH4/Polaris-Dataset-53K \
  --reward_funcs accuracy_reward \
  --nproc_per_node 4
```

أو، باستخدام ملف تكوين:

```yaml
# rloo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
  - accuracy_reward
nproc_per_node: 4
```

شغّل باستخدام:

```bash
trl rloo --config rloo_config.yaml
```

```bash
trl kto \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/kto-mix-14k \
  --nproc_per_node 4
```

أو، باستخدام ملف تكوين:

```yaml
# kto_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/kto-mix-14k
nproc_per_node: 4
```

شغّل باستخدام:

```bash
trl kto --config kto_config.yaml
```

### DeepSpeed و FSDP

يتم تكوين DeepSpeed ZeRO و FSDP من خلال حُجج التدريب، تمامًا كما هو الحال مع أي [Trainer](https://huggingface.co/docs/transformers/main/en/main_classes/trainer#transformers.Trainer): حيث يقبل `--deepspeed` ملف تكوين JSON الخاص بـ DeepSpeed، بينما يُفعّل `--fsdp` تقنية FSDP، ويُضبط عبر `--fsdp_config`. يتطلب استخدام `--fsdp` وحده في سطر الأوامر إصدار transformers 5.10 أو أحدث؛ أما مع الإصدارات الأقدم، فيجب تعيين `fsdp: true` في ملف التكوين. توجد ملفات التكوين الجاهزة للاستخدام في [`examples/deepspeed_configs`](https://github.com/huggingface/trl/tree/main/examples/deepspeed_configs) و [`examples/fsdp_configs`](https://github.com/huggingface/trl/tree/main/examples/fsdp_configs). إذا قمت بتثبيت TRL باستخدام pip، فاحفظ هذا تكوين ZeRO-2 باسم `zero2.json` وقم بتمرير `--deepspeed zero2.json`:

```json
{
  "bf16": {"enabled": "auto"},
  "zero_optimization": {
    "stage": 2,
    "offload_optimizer": {"device": "none"}
  },
  "gradient_accumulation_steps": "auto",
  "gradient_clipping": "auto",
  "train_batch_size": "auto",
  "train_micro_batch_size_per_gpu": "auto"
}
```

```bash
trl sft \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name stanfordnlp/imdb \
  --deepspeed examples/deepspeed_configs/zero2.json  # or --fsdp
```

أو، باستخدام ملف تكوين:

```yaml
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: stanfordnlp/imdb
deepspeed: examples/deepspeed_configs/zero2.json  # or fsdp: true
```

شغّل باستخدام:

```bash
trl sft --config sft_config.yaml
```

```bash
trl dpo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name anthropic/hh-rlhf \
  --deepspeed examples/deepspeed_configs/zero2.json  # or --fsdp
```

أو، باستخدام ملف تكوين:

```yaml
# dpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: anthropic/hh-rlhf
deepspeed: examples/deepspeed_configs/zero2.json  # or fsdp: true
```

شغّل باستخدام:

```bash
trl dpo --config dpo_config.yaml
```

```bash
trl reward \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/ultrafeedback_binarized \
  --deepspeed examples/deepspeed_configs/zero2.json  # or --fsdp
```

أو، باستخدام ملف تكوين:

```yaml
# reward_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/ultrafeedback_binarized
deepspeed: examples/deepspeed_configs/zero2.json  # or fsdp: true
```

شغّل باستخدام:

```bash
trl reward --config reward_config.yaml
```

```bash
trl grpo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name HuggingFaceH4/Polaris-Dataset-53K \
  --reward_funcs accuracy_reward \
  --deepspeed examples/deepspeed_configs/zero2.json  # or --fsdp
```

أو، باستخدام ملف تكوين:

```yaml
# grpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
  - accuracy_reward
deepspeed: examples/deepspeed_configs/zero2.json  # or fsdp: true
```

شغّل باستخدام:

```bash
trl grpo --config grpo_config.yaml
```

```bash
trl rloo \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name HuggingFaceH4/Polaris-Dataset-53K \
  --reward_funcs accuracy_reward \
  --deepspeed examples/deepspeed_configs/zero2.json  # or --fsdp
```

أو، باستخدام ملف تكوين:

```yaml
# rloo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
  - accuracy_reward
deepspeed: examples/deepspeed_configs/zero2.json  # or fsdp: true
```

شغّل باستخدام:

```bash
trl rloo --config rloo_config.yaml
```

```bash
trl kto \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/kto-mix-14k \
  --deepspeed examples/deepspeed_configs/zero2.json  # or --fsdp
```

أو، باستخدام ملف تكوين:

```yaml
# kto_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/kto-mix-14k
deepspeed: examples/deepspeed_configs/zero2.json  # or fsdp: true
```

شغّل باستخدام:

```bash
trl kto --config kto_config.yaml
```

> [!NOTE]
> حتى إصدار TRL v2.0.0، ما يزال `trl` يُشغَّل عبر `accelerate launch` عندما يستقبل حُججاً لا يعرفها سوى `accelerate launch`، مثل `--num_processes` أو `--accelerate_config`، أو عندما يوجد ملف افتراضي لـ`accelerate config`. هذا المسار مُتقادم ويُصدر تحذيراً.

### استخدام خلطات مجموعات البيانات

يمكنك استخدام خلطات مجموعات البيانات لدمج عدة مجموعات بيانات في مجموعة بيانات تدريب واحدة. وهذا مفيد عند التدريب على مصادر بيانات متنوعة أو عندما ترغب في خلط أنواع مختلفة من البيانات.

```yaml
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
  - path: stanfordnlp/imdb
  - path: roneneldan/TinyStories
```

شغّل باستخدام:

```bash
trl sft --config sft_config.yaml
```

```yaml
# dpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
  - path: BAAI/Infinity-Preference
  - path: argilla/Capybara-Preferences
```

شغّل باستخدام:

```bash
trl dpo --config dpo_config.yaml
```

```yaml
# reward_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
  - path: trl-lib/tldr-preference
  - path: trl-lib/lm-human-preferences-sentiment
```

شغّل باستخدام:

```bash
trl reward --config reward_config.yaml
```

```yaml
# grpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
  - path: HuggingFaceH4/Polaris-Dataset-53K
  - path: trl-lib/DeepMath-103K
reward_funcs:
  - accuracy_reward
```

شغّل باستخدام:

```bash
trl grpo --config grpo_config.yaml
```

```yaml
# rloo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
  - path: HuggingFaceH4/Polaris-Dataset-53K
  - path: trl-lib/DeepMath-103K
reward_funcs:
  - accuracy_reward
```

شغّل باستخدام:

```bash
trl rloo --config rloo_config.yaml
```

```yaml
# kto_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
  - path: trl-lib/kto-mix-14k
  - path: argilla/ultrafeedback-binarized-preferences-cleaned
```

شغّل باستخدام:

```bash
trl kto --config kto_config.yaml
```

للاطلاع على جميع الكلمات المفتاحية المتاحة لتعريف خلطات مجموعات البيانات، راجع فئتي [scripts.utils.DatasetConfig](/docs/trl/main/ar/script_utils#trl.scripts.utils.DatasetConfig) و[DatasetMixtureConfig](/docs/trl/main/ar/script_utils#trl.DatasetMixtureConfig).

## الحصول على معلومات النظام

يمكنك الحصول على معلومات النظام من خلال تنفيذ الأمر التالي:

```bash
trl env
```

سيؤدي هذا إلى طباعة معلومات النظام، بما في ذلك معلومات وحدة معالجة الرسوميات (GPU)، وإصدار CUDA، وإصدار PyTorch، وإصدار transformers، وإصدار TRL، وأي تبعيات اختيارية مثبتة.

```txt
Copy-paste the following information when reporting an issue:

- Platform: Linux-5.15.0-1048-aws-x86_64-with-glibc2.31
- Python version: 3.11.9
- PyTorch version: 2.4.1
- accelerator(s): NVIDIA H100 80GB HBM3
- Transformers version: 4.45.0.dev0
- Accelerate version: 0.34.2
- Accelerate config: 
  - compute_environment: LOCAL_MACHINE
  - distributed_type: DEEPSPEED
  - mixed_precision: no
  - use_cpu: False
  - debug: False
  - num_processes: 4
  - machine_rank: 0
  - num_machines: 1
  - rdzv_backend: static
  - same_network: True
  - main_training_function: main
  - enable_cpu_affinity: False
  - deepspeed_config: {'gradient_accumulation_steps': 4, 'offload_optimizer_device': 'none', 'offload_param_device': 'none', 'zero3_init_flag': False, 'zero_stage': 2}
  - downcast_bf16: no
  - tpu_use_cluster: False
  - tpu_use_sudo: False
  - tpu_env: []
- Datasets version: 3.0.0
- HF Hub version: 0.24.7
- TRL version: 0.12.0.dev0+acb4d70
- bitsandbytes version: 0.41.1
- DeepSpeed version: 0.15.1
- Diffusers version: 0.30.3
- Liger-Kernel version: 0.3.0
- LLM-Blender version: 0.0.2
- OpenAI version: 1.46.0
- PEFT version: 0.12.0
- vLLM version: not installed
```

هذا المعلومات مطلوبة عند الإبلاغ عن مشكلة.

