TRL 文档

命令行界面 (CLI)

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始操作

命令行界面 (CLI)

你可以使用 TRL 通过监督微调 (SFT) 或直接策略优化 (DPO) 微调 Language Model,甚至可以通过 TRL CLI 与你的模型聊天。

当前支持的 CLI 如下:

  • trl sft:在文本/指令数据集上微调 LLM
  • trl dpo:在偏好数据集上通过 DPO 微调 LLM
  • trl chat:快速生成经过微调以进行聊天的 LLM

使用 CLI 进行微调

开始之前,先从 Hugging Face Hub 中选择一个 Language Model。模型中使用 “文本生成” 过滤条件可以找到受支持的模型。确保为你的任务选择一个相关的数据集。

在使用 sftdpo 命令前,确保运行

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_alpha (int可选,默认为 32) — LoRA alpha。
  • lora_dropout (float可选,默认为 0.05) — LoRA dropout。
  • lora_modules_to_save (Optional[列表(str)], 可选, 默认为 ) — 要解冻和训练的模型层。
  • lora_task_type (str, 可选, 默认为 "CAUSAL_LM") — 为 LoRA 传递的任务类型(对奖励建模使用 "SEQ_CLS")。
  • load_in_8bit (bool, 可选, 默认为 False) — 是否对基础模型使用 8 位精度。 仅适用于 LoRA。
  • load_in_4bit (bool, 可选, 默认为 False) — 是否对基础模型使用 4 位精度。 仅适用于 LoRA。
  • use_bnb_nested_quant (bool, 可选,默认为 False) — 是否使用嵌套量化。

模型的配置类。

使用 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 格式的数据集,比如

这些数据集始终至少有三个列 prompt、chosen、rejected

  • 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 传递自己的示例,你可以在其中指定默认生成参数。

< > 网站更新于 GitHub