TRL documentation
命令行界面(CLI)
命令行界面(CLI)
TRL 提供了一个功能强大的命令行界面(CLI),用于使用监督微调(SFT)、直接偏好优化(DPO)等方法对大型语言模型(LLM)进行微调。该 CLI 屏蔽了大量样板代码,让你能够快速且可复现地启动训练任务。
命令
当前支持的命令为:
训练命令
trl distillation:使用基于策略的知识蒸馏将教师模型蒸馏到学生模型中trl dpo:使用 DPO 微调 LLMtrl grpo:使用 GRPO 微调 LLMtrl kto:使用 KTO 微调 LLMtrl reward:训练奖励模型trl rloo:使用 RLOO 微调 LLMtrl sft:使用 SFT 微调 LLM
其他命令
trl env:获取系统信息trl vllm-serve:使用 vLLM 提供模型服务(已弃用,请直接使用vllm serve,参见 vLLM 集成)
使用 TRL CLI 进行微调
基本用法
您可以通过指定模型和数据集等必需参数,直接从命令行启动训练:
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
使用配置文件
为了让您的 CLI 命令保持简洁且可复现,您可以在 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 启动训练,每个可用 GPU 对应一个进程。任何 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 接受一个 DeepSpeed JSON 配置文件,而 --fsdp 用于启用 FSDP,并通过 --fsdp_config 进行调优。在命令行中单独使用 --fsdp 需要 transformers 5.10 或更高版本;如果使用旧版本,请在配置文件中设置 fsdp: true。现成的配置文件位于 examples/deepspeed_configs 和 examples/fsdp_configs。如果您通过 pip 安装了 TRL,请将此 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识别的参数(例如--num_processes或--accelerate_config),或者存在accelerate config默认文件时,trl仍会通过accelerate launch启动。此路径已被弃用,并会发出警告。
使用数据集混合
您可以使用数据集混合将多个数据集合并为一个训练数据集。这在需要基于多样化数据源进行训练,或希望混合不同类型数据时非常有用。
# 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