使用强化学习训练变换语言模型。
项目描述
TRL - 变换强化学习
全栈库,用于微调和校准大型语言模型。
这是什么?
《trl》库是一个全栈工具,用于通过监督微调步骤(SFT)、奖励建模(RM)和近端策略优化(PPO)以及直接偏好优化(DPO)等方法对变压器语言和扩散模型进行微调和对齐。
该库建立在transformers
库之上,因此可以使用那里提供的任何模型架构。
亮点
高效且可扩展
:accelerate
是《trl》的骨干,它允许使用DDP和DeepSpeed等方法将模型训练从单个GPU扩展到大型多节点集群。PEFT
完全集成,允许使用量化以及LoRA或QLoRA等方法在普通硬件上训练最大的模型。unsloth
也已集成,并允许使用专用内核显著加速训练。
CLI
:使用CLI,您可以使用单个命令和灵活的配置系统进行微调并与LLM进行聊天,而无需编写任何代码。Trainers
:Trainer类是应用许多微调方法的抽象,例如SFTTrainer
、DPOTrainer
、RewardTrainer
、PPOTrainer
、CPOTrainer
和ORPOTrainer
。AutoModels
:类AutoModelForCausalLMWithValueHead
和AutoModelForSeq2SeqLMWithValueHead
将额外的值头添加到模型中,允许使用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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e62baa5634d255def2a1280de19e6bbd8d878900b9f009981bc6c3947b0e8a69 |
|
MD5 | 53d81aaf7fc70419bb1bcf994a5aba01 |
|
BLAKE2b-256 | 9458983a5b6bf9c375b3ef75ec391224f50d664e8beb05613de9705cd54f32a5 |
trl-0.11.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f44c30ade4b96918ae431e7db9d73ff47f16608018a02f735e06f4fdf5badbd2 |
|
MD5 | f28210310671b9ac1441923042f94986 |
|
BLAKE2b-256 | 2f62fd2c8e9edebad14084370fa88cf6cb56816926040658f5bfcf5eab9ad8c7 |