跳转到主要内容

使用强化学习训练变换语言模型。

项目描述

TRL - 变换强化学习

全栈库,用于微调和校准大型语言模型。

License Documentation GitHub release

这是什么?

《trl》库是一个全栈工具,用于通过监督微调步骤(SFT)、奖励建模(RM)和近端策略优化(PPO)以及直接偏好优化(DPO)等方法对变压器语言和扩散模型进行微调和对齐。

该库建立在transformers库之上,因此可以使用那里提供的任何模型架构。

亮点

  • 高效且可扩展:
    • accelerate是《trl》的骨干,它允许使用DDP和DeepSpeed等方法将模型训练从单个GPU扩展到大型多节点集群。
    • PEFT完全集成,允许使用量化以及LoRA或QLoRA等方法在普通硬件上训练最大的模型。
    • unsloth也已集成,并允许使用专用内核显著加速训练。
  • CLI:使用CLI,您可以使用单个命令和灵活的配置系统进行微调并与LLM进行聊天,而无需编写任何代码。
  • Trainers:Trainer类是应用许多微调方法的抽象,例如SFTTrainerDPOTrainerRewardTrainerPPOTrainerCPOTrainerORPOTrainer
  • AutoModels:类AutoModelForCausalLMWithValueHeadAutoModelForSeq2SeqLMWithValueHead将额外的值头添加到模型中,允许使用PPO等RL算法对其进行训练。
  • 示例:训练GPT2生成积极的电影评论,使用BERT情感分类器,仅使用适配器进行完整的RLHF,训练GPT-j以减少毒性,遵循示例

安装

Python包

使用pip安装库

pip install trl

从源代码

如果您想在官方发布之前使用最新功能,可以从源代码安装

pip install git+https://github.com/huggingface/trl.git

存储库

如果您想使用示例,可以使用以下命令克隆存储库

git clone https://github.com/huggingface/trl.git

命令行界面(CLI)

您可以使用TRL命令行界面(CLI)快速开始使用监督微调(SFT)、直接偏好优化(DPO)并使用聊天CLI测试您的对齐模型

SFT

trl sft --model_name_or_path facebook/opt-125m --dataset_name stanfordnlp/imdb --output_dir opt-sft-imdb

DPO

trl dpo --model_name_or_path facebook/opt-125m --dataset_name trl-internal-testing/hh-rlhf-helpful-base-trl-style --output_dir opt-sft-hh-rlhf 

聊天

trl chat --model_name_or_path Qwen/Qwen1.5-0.5B-Chat

有关CLI的更多信息,请参阅相关文档部分或使用--help获取更多详细信息。

如何使用

为了获得更多灵活性和对训练的控制,您可以使用专用训练器类在Python中微调模型。

SFTTrainer

这是如何使用库中的SFTTrainer的基本示例。该SFTTrainer是围绕transformers Trainer的轻量级包装,便于在自定义数据集上微调语言模型或适配器。

# imports
from datasets import load_dataset
from trl import SFTTrainer

# get dataset
dataset = load_dataset("stanfordnlp/imdb", split="train")

# get trainer
trainer = SFTTrainer(
    "facebook/opt-350m",
    train_dataset=dataset,
    dataset_text_field="text",
    max_seq_length=512,
)

# train
trainer.train()

RewardTrainer

这是如何使用库中的RewardTrainer的基本示例。该RewardTrainer是围绕transformers Trainer的包装,便于在自定义偏好数据集上微调奖励模型或适配器。

# imports
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from trl import RewardTrainer

# load model and dataset - dataset needs to be in a specific format
model = AutoModelForSequenceClassification.from_pretrained("gpt2", num_labels=1)
tokenizer = AutoTokenizer.from_pretrained("gpt2")

...

# load trainer
trainer = RewardTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,
)

# train
trainer.train()

PPOTrainer

这是使用库中的PPOTrainer的基本示例。基于查询,语言模型生成响应,然后进行评估。评估可以是人工参与或另一个模型的输出。

# imports
import torch
from transformers import AutoTokenizer
from trl import PPOTrainer, PPOConfig, AutoModelForCausalLMWithValueHead, create_reference_model
from trl.core import respond_to_batch

# get models
model = AutoModelForCausalLMWithValueHead.from_pretrained('gpt2')
ref_model = create_reference_model(model)

tokenizer = AutoTokenizer.from_pretrained('gpt2')
tokenizer.pad_token = tokenizer.eos_token

# initialize trainer
ppo_config = PPOConfig(batch_size=1, mini_batch_size=1)

# encode a query
query_txt = "This morning I went to the "
query_tensor = tokenizer.encode(query_txt, return_tensors="pt")

# get model response
response_tensor  = respond_to_batch(model, query_tensor)

# create a ppo trainer
ppo_trainer = PPOTrainer(ppo_config, model, ref_model, tokenizer)

# define a reward for response
# (this could be any reward such as human feedback or output from another model)
reward = [torch.tensor(1.0)]

# train model for one step with ppo
train_stats = ppo_trainer.step([query_tensor[0]], [response_tensor[0]], reward)

DPOTrainer

DPOTrainer是一个使用直接偏好优化算法的trainer。这是使用库中的DPOTrainer的基本示例。DPOTrainer是围绕transformers Trainer的一个包装,可以轻松地对自定义偏好数据集上的奖励模型或适配器进行微调。

# imports
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import DPOTrainer

# load model and dataset - dataset needs to be in a specific format
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")

...

# load trainer
trainer = DPOTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,
)

# train
trainer.train()

开发

如果您想为trl做出贡献或根据您的需求对其进行自定义,请务必阅读贡献指南,并确保您已进行开发安装。

git clone https://github.com/huggingface/trl.git
cd trl/
make dev

参考文献

近端策略优化

PPO实现主要遵循D. Ziegler等人发表的论文《从人类偏好微调语言模型》中引入的结构[论文代码]。

直接偏好优化

DPO基于E. Mitchell等人发表的《直接偏好优化:您的语言模型其实是一个奖励模型》的原始实现[论文代码]。

引用

@misc{vonwerra2022trl,
  author = {Leandro von Werra and Younes Belkada and Lewis Tunstall and Edward Beeching and Tristan Thrush and Nathan Lambert and Shengyi Huang},
  title = {TRL: Transformer Reinforcement Learning},
  year = {2020},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/huggingface/trl}}
}

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

trl-0.11.1.tar.gz (306.7 kB 查看哈希值)

上传时间

构建分发

trl-0.11.1-py3-none-any.whl (318.4 kB 查看哈希值)

上传时间 Python 3

由以下支持