TRL documentation

命令行界面(CLI)

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

命令行界面(CLI)

TRL 提供了一个功能强大的命令行界面(CLI),用于使用监督微调(SFT)、直接偏好优化(DPO)等方法对大型语言模型(LLM)进行微调。该 CLI 屏蔽了大量样板代码,让你能够快速且可复现地启动训练任务。

命令

当前支持的命令为:

训练命令

  • trl distillation:使用基于策略的知识蒸馏将教师模型蒸馏到学生模型中
  • trl dpo:使用 DPO 微调 LLM
  • trl grpo:使用 GRPO 微调 LLM
  • trl kto:使用 KTO 微调 LLM
  • trl reward:训练奖励模型
  • trl rloo:使用 RLOO 微调 LLM
  • trl sft:使用 SFT 微调 LLM

其他命令

  • trl env:获取系统信息
  • trl vllm-serve:使用 vLLM 提供模型服务(已弃用,请直接使用 vllm serve,参见 vLLM 集成)

使用 TRL CLI 进行微调

基本用法

您可以通过指定模型和数据集等必需参数,直接从命令行启动训练:

SFT
DPO
奖励
GRPO
RLOO
KTO
trl sft \
  --model_name_or_path Qwen/Qwen2.5-0.5B \
  --dataset_name stanfordnlp/imdb

使用配置文件

为了让您的 CLI 命令保持简洁且可复现,您可以在 YAML 配置文件中定义所有训练参数:

SFT
DPO
奖励
GRPO
RLOO
KTO
# sft_config.yaml
model_name_or_path: Qwen/Qwen2.5-0.5B
dataset_name: stanfordnlp/imdb

使用以下命令启动:

trl sft --config sft_config.yaml

使用 torchrun 进行扩展

TRL CLI 使用 torchrun 启动训练,每个可用 GPU 对应一个进程。任何 torchrun 参数都可以直接传递给 trl,例如 --nproc_per_node 或 --nnodes。

SFT
DPO
奖励
GRPO
RLOO
KTO
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

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"
}
SFT
DPO
奖励
GRPO
RLOO
KTO
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 v2.0.0 之前,当 trl 接收到仅 accelerate launch 识别的参数(例如 --num_processes 或 --accelerate_config),或者存在 accelerate config 默认文件时,trl 仍会通过 accelerate launch 启动。此路径已被弃用,并会发出警告。

使用数据集混合

您可以使用数据集混合将多个数据集合并为一个训练数据集。这在需要基于多样化数据源进行训练,或希望混合不同类型数据时非常有用。

SFT
DPO
奖励
GRPO
RLOO
KTO
# 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

要查看用于定义数据集混合的所有可用关键字,请参阅 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