其他
需要命令行训练/微调 Transformer 语言模型时…
当需要用 TRL 命令行对 Hugging Face Transformer 语言模型进行监督微调、偏好对齐、在线 RL 或奖励模型训练时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
需要命令行训练/微调 Transform特定
解决思路
- 使用 `trl sft` 进行监督微调:`trl sft --model_name_or_path Qwen/Qwen2-0.5B --dataset_name trl-lib/Capybara --learning_rate 2.0e-5 --num_train_epochs 1 --packing --per_device_train_batch_size 2 --gradient_accumulation_steps 8 --eos_token '<|im_end|>' --eval_strategy steps --eval_steps 100 --output_dir Qwen2-0.5B-SFT --push_to_hub`
- 使用 `trl sft` 加 LoRA 适配器训练:`trl sft --model_name_or_path Qwen/Qwen2-0.5B --dataset_name trl-lib/Capybara --learning_rate 2.0e-4 --num_train_epochs 1 --packing --per_device_train_batch_size 2 --gradient_accumulation_steps 8 --eos_token '<|im_end|>' --eval_strategy steps --eval_steps 100 --use_peft --lora_r 32 --lora_alpha 16 --output_dir Qwen2-0.5B-SFT --push_to_hub`
- 使用 `trl dpo` 进行直接偏好优化:`trl dpo --dataset_name trl-lib/ultrafeedback_binarized --model_name_or_path Qwen/Qwen2-0.5B-Instruct --learning_rate 5.0e-7 --num_train_epochs 1 --per_device_train_batch_size 2 --max_steps 1000 --gradient_accumulation_steps 8 --eval_strategy steps --eval_steps 50 --output_dir Qwen2-0.5B-DPO --no_remove_unused_columns`
- 使用 `trl dpo` 加 LoRA 适配器训练:`trl dpo --dataset_name trl-lib/ultrafeedback_binarized --model_name_or_path Qwen/Qwen2-0.5B-Instruct --learning_rate 5.0e-6 --num_train_epochs 1 --per_device_train_batch_size 2 --max_steps 1000 --gradient_accumulation_steps 8 --eval_strategy steps --eval_steps 50 --output_dir Qwen2-0.5B-DPO --no_remove_unused_columns --use_peft --lora_r 32 --lora_alpha 16`
- 使用 `trl grpo` 进行组相对策略优化:`trl grpo --model_name_or_path Qwen/Qwen2.5-0.5B --dataset_name trl-lib/gsm8k --reward_funcs accuracy_reward --output_dir Qwen2-0.5B-GRPO --push_to_hub`
- 使用 `trl rloo` 进行 Reinforce Leave One Out 在线 RL 训练:`trl rloo --model_name_or_path Qwen/Qwen2.5-0.5B --dataset_name trl-lib/tldr --reward_model_name_or_path sentiment-analysis:nlptown/bert-base-multilingual-uncased-sentiment --output_dir Qwen2-0.5B-RLOO --push_to_hub`
- 使用 `trl reward` 训练奖励模型:`trl reward --model_name_or_path Qwen/Qwen2-0.5B-Instruct --dataset_name trl-lib/ultrafeedback_binarized --output_dir Qwen2-0.5B-Reward --per_device_train_batch_size 8 --num_train_epochs 1 --learning_rate 1.0e-5 --eval_strategy steps --eval_steps 50 --max_length 2048`
- 使用 `trl reward` 加 LoRA 适配器训练奖励模型:`trl reward --model_name_or_path Qwen/Qwen2-0.5B-Instruct --dataset_name trl-lib/ultrafeedback_binarized --output_dir Qwen2-0.5B-Reward-LoRA --per_device_train_batch_size 8 --num_train_epochs 1 --learning_rate 1.0e-4 --eval_strategy steps --eval_steps 50 --max_length 2048 --use_peft --lora_task_type SEQ_CLS --lora_r 32 --lora_alpha 16`
- 使用 YAML 配置文件:创建 `sft_config.yaml`,内容包含 `model_name_or_path: Qwen/Qwen2.5-0.5B`、`dataset_name: trl-lib/Capybara`、`learning_rate: 2.0e-5`、`num_train_epochs: 1`、`per_device_train_batch_size: 8`、`gradient_accumulation_steps: 2`、`output_dir: ./sft_output`、`use_peft: true`、`lora_r: 16`、`lora_alpha: 16`、`report_to: trackio`,用 `trl sft --config sft_config.yaml` 启动
- 覆盖配置文件中的值:`trl sft --config sft_config.yaml --learning_rate 1.0e-5`
- 多 GPU 训练:`trl sft --config sft_config.yaml --num_processes 4`
- 使用预定义 Accelerate 配置:`trl sft --config sft_config.yaml --accelerate_config zero2`,可选值有 `single_gpu`、`multi_gpu`、`fsdp1`、`fsdp2`、`zero1`、`zero2`、`zero3`
- 生成自定义 Accelerate 配置:`accelerate config`,然后使用 `trl sft --config sft_config.yaml --config_file ~/.cache/huggingface/accelerate/default_config.yaml`
- 使用 FSDP:`trl sft --config sft_config.yaml --accelerate_config fsdp2`
- 使用 DeepSpeed ZeRO:`trl sft --config sft_config.yaml --accelerate_config zero3`
- CUDA Out of Memory 时:减少 `--per_device_train_batch_size` 并增加 `--gradient_accumulation_steps`;启用 `--use_peft` 进行 LoRA 训练;使用 `--gradient_checkpointing` 节省内存;尝试更小模型或更长序列截断
- 数据集加载问题时:验证数据集存在(检查 Hugging Face Hub 或本地路径);检查数据集格式是否匹配预期列;使用 `--dataset_config` 处理多配置数据集;用 `from datasets import load_dataset; ds = load_dataset(name)` 检查数据集
- 模型加载问题时:验证模型在 Hugging Face Hub 上存在;检查 gated 模型是否需要认证,需要时运行 `hf auth login`;本地模型提供绝对路径;确保足够磁盘空间和内存
- 训练慢时:启用数据集 `--packing` 用于短序列;内存允许时使用更大 `--per_device_train_batch_size`;在 Ampere GPU 上启用 `--tf32` 加快计算;在支持的硬件上使用 `--bf16`;考虑用 `--num_processes` 进行多 GPU 训练
- 生成问题(GRPO/RLOO)时:检查数据集中的 prompt 格式;调整 `--temperature` 和 `--top_p` 用于生成;验证奖励函数(GRPO/RLOO)
- 最佳实践:先用 SFT 微调基础模型,再进行偏好对齐
- 最佳实践:使用 LoRA 提高效率,启用 `--use_peft` 以加快训练并降低内存
- 最佳实践:监控训练,使用 `--report_to trackio`(或 `--report_to wandb` 或 `--report_to tensorboard`)进行跟踪
- 最佳实践:保存检查点,TRL 自动在 `--output_dir` 中保存检查点
- 最佳实践:先在小数据集上测试,验证流程后再进行完整训练
- 最佳实践:使用配置文件,创建 YAML 配置以保证可复现性
- 最佳实践:利用 Accelerate,使用多 GPU 训练以加快迭代
- 帮助用户时:检查哪种训练方法适合其用例;验证数据集格式匹配预期 schema;推荐从小模型开始测试;在资源受限环境建议 LoRA;指向具体文档章节了解高级功能
适用边界 · 注意事项
- 未安装 TRL 及 Hugging Face Transformers/Accelerate 环境时。
- 需要训练非 Transformer 模型或非 Hugging Face 生态工作流时。
- 没有 GPU 或内存严重不足且无法使用 LoRA、量化、多卡等方案时。