命令行界面 (CLI)
你可以使用 TRL 通过监督微调 (SFT) 或直接策略优化 (DPO) 微调 Language Model,甚至可以通过 TRL CLI 与你的模型聊天。
当前支持的 CLI 如下:
trl sft
:在文本/指令数据集上微调 LLMtrl dpo
:在偏好数据集上通过 DPO 微调 LLMtrl chat
:快速生成经过微调以进行聊天的 LLM
使用 CLI 进行微调
开始之前,先从 Hugging Face Hub 中选择一个 Language Model。模型中使用 “文本生成” 过滤条件可以找到受支持的模型。确保为你的任务选择一个相关的数据集。
在使用 sft
或 dpo
命令前,确保运行
accelerate config
并为你的训练设置(单/多 GPU、DeepSpeed 等)选择正确的配置。在运行任何 CLI 命令之前,请确保完成 accelerate config
的所有步骤。
我们还建议你传递一个 YAML 配置文件,以配置你的训练协议。以下是你可以用于使用 trl sft
命令训练你的模型的 YAML 文件的一个简单示例。
model_name_or_path:
trl-internal-testing/tiny-random-LlamaForCausalLM
dataset_name:
stanfordnlp/imdb
dataset_text_field:
text
report_to:
none
learning_rate:
0.0001
lr_scheduler_type:
cosine
在 .yaml
中保存配置并立即开始!示例 CLI 配置作为 examples/cli_configs/example_config.yaml
提供。请注意,可以通过将参数从配置文件显式传递到 CLI 来覆盖这些参数,例如从根文件夹
trl sft --config examples/cli_configs/example_config.yaml --output_dir test-trl-cli --lr_scheduler_type cosine_with_restarts
强制将 cosine_with_restarts
用作 lr_scheduler_type
。
支持的参数
我们支持 transformers.TrainingArguments
中的所有参数,用于加载模型,我们支持 ~trl.ModelConfig
中的所有参数。
类 trl.ModelConfig
< 源 >( model_name_or_path:可选 = 无 model_revision:str = 'main' torch_dtype:可选 = 无 trust_remote_code:bool = False attn_implementation:可选 = 无 use_peft:bool = False lora_r:int = 16 lora_alpha:int = 32 lora_dropout:float = 0.05 lora_target_modules:可选 = 无 lora_modules_to_save:可选 = 无 lora_task_type:str = 'CAUSAL_LM' use_rslora:bool = False load_in_8bit:bool = False load_in_4bit:bool = False bnb_4bit_quant_type:Literal = 'nf4' use_bnb_nested_quant:bool = False )
参数
- model_name_or_path (
Optional[str]
, 可选项,默认为None
) — 权重初始化的模型检查点。 - model_revision (
str
, 可选项,默认为"main"
) — 要使用的特定模型版本。可以是分支名称、标签名称或提交 ID。 - torch_dtype (
Optional[Literal["auto", "bfloat16", "float16", "float32"]]
, 可选,默认值为None
) — 覆盖默认的torch.dtype
,并在该数据类型下加载模型。可能的值有"bfloat16"
:torch.bfloat16
"float16"
:torch.float16
"float32"
:torch.float32
"auto"
: 自动从模型的权重派生数据类型。
- trust_remote_code (
bool
, 可选,默认值为False
) — 是否允许在各自的建模文件中,使用在 Hub 中自定义定义的模型。此选项仅应为受信任的存储库(并且您已阅读相关代码的存储库)设置为True
,因为它会在本地计算机中执行存在于 Hub 中的代码。 - attn_implementation (
可选[str]
,可选,默认为None
) — 使用的注意力实现方式。你可以运行--attn_implementation=flash_attention_2
,在这种情况下你必须通过运行pip install flash-attn --no-build-isolation
手动安装它。 - use_peft (
bool
,可选,默认为False
) — 在训练中是否使用 PEFT。 - lora_dropout (
float
,可选,默认为0.05
) — LoRA dropout。 - lora_task_type (
str
, 可选, 默认为"CAUSAL_LM"
) — 为 LoRA 传递的任务类型(对奖励建模使用"SEQ_CLS"
)。 - load_in_4bit (
bool
, 可选, 默认为False
) — 是否对基础模型使用 4 位精度。 仅适用于 LoRA。
模型的配置类。
使用 HfArgumentParser,我们可以将该类转换成 argparse 参数,这些参数可以在命令行中指定。
你可以将其中任何参数传递给 CLI 或 YAML 文件。
有监督微调 (SFT)
按照上面基本说明执行,并运行 trl sft --output_dir <output_dir> <*args>
trl sft --model_name_or_path facebook/opt-125m --dataset_name stanfordnlp/imdb --output_dir opt-sft-imdb
SFT CLI 基于 examples/scripts/sft.py
脚本。
直接策略优化 (DPO)
要使用 DPO CLI,您需要具有采用 TRL 格式的数据集,比如
- TRL 的 Anthropic HH 数据集:https://huggingface.co/datasets/trl-internal-testing/hh-rlhf-helpful-base-trl-style
- TRL 的 OpenAI TL;DR 摘要数据集:https://huggingface.co/datasets/trl-internal-testing/tldr-preference-trl-style
这些数据集始终至少有三个列 prompt、chosen、rejected
要快速入门,您可以运行以下命令
trl dpo --model_name_or_path facebook/opt-125m --output_dir trl-hh-rlhf --dataset_name trl-internal-testing/hh-rlhf-helpful-base-trl-style
DPO CLI 基于 examples/scripts/dpo.py
脚本。
自定义偏好数据集
将数据集格式化为 TRL 格式(您可以改编 examples/datasets/anthropic_hh.py
)
python examples/datasets/anthropic_hh.py --push_to_hub --hf_entity your-hf-org
聊天界面
聊天 CLI 可让你快速加载模型并与其对话。只需运行以下操作
trl chat --model_name_or_path Qwen/Qwen1.5-0.5B-Chat
若要将聊天 CLI 与开发者安装搭配使用,你必须运行 make dev
请注意,聊天界面依赖分词器的 聊天模板 为模型格式化输入。请确保你的分词器已定义聊天模板。
除了与模型对话外,你还可以使用以下几个命令
- 清除:清除当前会话并开始新的会话
- 示例 {名称}:从配置中加载名为
{名称}
的示例并将其用作用户输入 - 设置 {设置名称}={设置值};:更改系统提示或生成设置(多个设置由 ’;’ 分隔)。
- 重置:与清除相同,但如果生成配置已通过设置更改,则还会将生成配置重置为默认值
- 保存 {保存名称} (可选):将当前聊天和设置默认保存到文件
./chat_history/{模型名称}/chat_{日期时间}.yaml
或(如果提供){保存名称}
- 退出:关闭界面
默认示例定义在 examples/scripts/config/default_chat_config.yaml
中,但你可以使用 --config CONFIG_FILE
传递自己的示例,你可以在其中指定默认生成参数。