TRL documentation
واجهات سطر الأوامر (CLIs)
واجهات سطر الأوامر (CLIs)
توفّر TRL واجهة سطر أوامر (CLI) قوية لضبط نماذج اللغة الكبيرة (LLMs) باستخدام طرق مثل الضبط الإشرافي (SFT) وتحسين التفضيلات المباشرة (DPO) وغيرها. تُخفي واجهة سطر الأوامر معظم الشيفرة التمهيدية، مما يتيح لك إطلاق مهام التدريب بسرعة وبشكل قابل للتكرار.
الأوامر
الأوامر المدعومة حاليًا هي:
أوامر التدريب
trl distillation: تقطير نموذج المعلم إلى نموذج الطالب باستخدام تقطير المعرفة على السياسةtrl dpo: ضبط نموذج لغة كبير باستخدام DPOtrl grpo: ضبط نموذج LLM باستخدام GRPOtrl kto: ضبط نموذج لغة كبير باستخدام KTOtrl reward: تدريب نموذج المكافأةtrl rloo: ضبط نموذج لغة كبير باستخدام RLOOtrl sft: ضبط نموذج لغة كبير باستخدام SFT
أوامر أخرى
trl env: الحصول على معلومات النظامtrl vllm-serve: تقديم نموذج باستخدام vLLM (مُتروك، استخدمvllm serveمباشرة، راجع تكامل vLLM)
الضبط الدقيق باستخدام واجهة سطر الأوامر TRL
الاستخدام الأساسي
يمكنك بدء التدريب مباشرةً من سطر الأوامر عن طريق تحديد الحجج المطلوبة مثل النموذج ومجموعة البيانات:
trl sft \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name stanfordnlp/imdb
trl dpo \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name anthropic/hh-rlhf
trl reward \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name trl-lib/ultrafeedback_binarized
trl grpo \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name HuggingFaceH4/Polaris-Dataset-53K \ --reward_funcs accuracy_reward
trl rloo \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name HuggingFaceH4/Polaris-Dataset-53K \ --reward_funcs accuracy_reward
trl kto \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name trl-lib/kto-mix-14k
استخدام ملفات الإعداد
للحفاظ على أوامر سطر الأوامر نظيفة وقابلة للتكرار، يمكنك تحديد جميع حُجج التدريب في ملف تكوين بصيغة YAML:
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: stanfordnlp/imdbشغّل باستخدام:
trl sft --config sft_config.yaml
# dpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: anthropic/hh-rlhfشغّل باستخدام:
trl dpo --config dpo_config.yaml
# reward_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/ultrafeedback_binarizedشغّل باستخدام:
trl reward --config reward_config.yaml
# grpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
- accuracy_rewardشغّل باستخدام:
trl grpo --config grpo_config.yaml
# rloo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: HuggingFaceH4/Polaris-Dataset-53K
reward_funcs:
- accuracy_rewardشغّل باستخدام:
trl rloo --config rloo_config.yaml
# kto_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/kto-mix-14kشغّل باستخدام:
trl kto --config kto_config.yaml
التوسع باستخدام torchrun
يبدأ TRL CLI التدريب باستخدام torchrun، بعملية واحدة لكل وحدة معالجة رسومية متاحة. يمكن تمرير أي حجة من torchrun مباشرة إلى trl، مثل --nproc_per_node أو --nnodes.
trl sft \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name stanfordnlp/imdb \ --nproc_per_node 4
أو، باستخدام ملف تكوين:
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: stanfordnlp/imdb
nproc_per_node: 4شغّل باستخدام:
trl sft --config sft_config.yaml
trl dpo \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name anthropic/hh-rlhf \ --nproc_per_node 4
أو، باستخدام ملف تكوين:
# dpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: anthropic/hh-rlhf
nproc_per_node: 4شغّل باستخدام:
trl dpo --config dpo_config.yaml
trl reward \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name trl-lib/ultrafeedback_binarized \ --nproc_per_node 4
أو، باستخدام ملف تكوين:
# reward_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/ultrafeedback_binarized
nproc_per_node: 4شغّل باستخدام:
trl reward --config reward_config.yaml
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
أو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl grpo --config grpo_config.yaml
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
أو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl rloo --config rloo_config.yaml
trl kto \ --model_name_or_path Qwen/Qwen2.5-0.5B \ --dataset_name trl-lib/kto-mix-14k \ --nproc_per_node 4
أو، باستخدام ملف تكوين:
# kto_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: trl-lib/kto-mix-14k
nproc_per_node: 4شغّل باستخدام:
trl kto --config kto_config.yaml
DeepSpeed و FSDP
يتم تكوين DeepSpeed ZeRO و FSDP من خلال حُجج التدريب، تمامًا كما هو الحال مع أي Trainer: حيث يقبل --deepspeed ملف تكوين JSON الخاص بـ DeepSpeed، بينما يُفعّل --fsdp تقنية FSDP، ويُضبط عبر --fsdp_config. يتطلب استخدام --fsdp وحده في سطر الأوامر إصدار transformers 5.10 أو أحدث؛ أما مع الإصدارات الأقدم، فيجب تعيين fsdp: true في ملف التكوين. توجد ملفات التكوين الجاهزة للاستخدام في examples/deepspeed_configs و examples/fsdp_configs. إذا قمت بتثبيت TRL باستخدام pip، فاحفظ هذا تكوين ZeRO-2 باسم zero2.json وقم بتمرير --deepspeed zero2.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"
}trl sft \
--model_name_or_path Qwen/Qwen2.5-0.5B \
--dataset_name stanfordnlp/imdb \
--deepspeed examples/deepspeed_configs/zero2.json # or --fsdpأو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl sft --config sft_config.yaml
trl dpo \
--model_name_or_path Qwen/Qwen2.5-0.5B \
--dataset_name anthropic/hh-rlhf \
--deepspeed examples/deepspeed_configs/zero2.json # or --fsdpأو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl dpo --config dpo_config.yaml
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أو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl reward --config reward_config.yaml
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أو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl grpo --config grpo_config.yaml
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أو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl rloo --config rloo_config.yaml
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أو، باستخدام ملف تكوين:
# 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شغّل باستخدام:
trl kto --config kto_config.yaml
حتى إصدار TRL v2.0.0، ما يزال
trlيُشغَّل عبرaccelerate launchعندما يستقبل حُججاً لا يعرفها سوىaccelerate launch، مثل--num_processesأو--accelerate_config، أو عندما يوجد ملف افتراضي لـaccelerate config. هذا المسار مُتقادم ويُصدر تحذيراً.
استخدام خلطات مجموعات البيانات
يمكنك استخدام خلطات مجموعات البيانات لدمج عدة مجموعات بيانات في مجموعة بيانات تدريب واحدة. وهذا مفيد عند التدريب على مصادر بيانات متنوعة أو عندما ترغب في خلط أنواع مختلفة من البيانات.
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
- path: stanfordnlp/imdb
- path: roneneldan/TinyStoriesشغّل باستخدام:
trl sft --config sft_config.yaml
# dpo_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
datasets:
- path: BAAI/Infinity-Preference
- path: argilla/Capybara-Preferencesشغّل باستخدام:
trl dpo --config dpo_config.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شغّل باستخدام:
trl reward --config reward_config.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شغّل باستخدام:
trl grpo --config grpo_config.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شغّل باستخدام:
trl rloo --config rloo_config.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شغّل باستخدام:
trl kto --config kto_config.yaml
للاطلاع على جميع الكلمات المفتاحية المتاحة لتعريف خلطات مجموعات البيانات، راجع فئتي scripts.utils.DatasetConfig وDatasetMixtureConfig.
الحصول على معلومات النظام
يمكنك الحصول على معلومات النظام من خلال تنفيذ الأمر التالي:
trl envسيؤدي هذا إلى طباعة معلومات النظام، بما في ذلك معلومات وحدة معالجة الرسوميات (GPU)، وإصدار CUDA، وإصدار PyTorch، وإصدار transformers، وإصدار TRL، وأي تبعيات اختيارية مثبتة.
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هذا المعلومات مطلوبة عند الإبلاغ عن مشكلة.
Update on GitHub