用於後期訓練基礎模型的綜合庫
TRL 是一個尖端庫,專為訓練後基礎模型而設計,使用監督微調 (SFT)、近端策略優化 (PPO) 和直接偏好優化 (DPO) 等先進技術。建立在? Transformers 生態系統,TRL 支援各種模型架構和模式,並且可以跨各種硬體設定進行擴展。
高效且可擴展:
PEFT
完全集成,可以透過量化和 LoRA/QLoRA 對具有適度硬體的大型模型進行訓練。命令列介面 (CLI) :簡單的介面讓您無需編寫程式碼即可微調模型並與模型互動。
訓練器:透過SFTTrainer
、 DPOTrainer
、 RewardTrainer
、 ORPOTrainer
等訓練器可以輕鬆存取各種微調方法。
AutoModels :使用AutoModelForCausalLMWithValueHead
等預定義模型類別來簡化法學碩士的強化學習 (RL)。
使用pip
安裝庫:
pip install trl
如果您想在正式發布之前使用最新功能,可以從原始程式碼安裝 TRL:
pip install git+https://github.com/huggingface/trl.git
如果您想使用範例,可以使用以下命令克隆儲存庫:
git clone https://github.com/huggingface/trl.git
您可以使用 TRL 命令列介面 (CLI) 快速開始監督微調 (SFT) 和直接偏好最佳化 (DPO),或使用聊天 CLI 檢查您的模型:
斯夫特:
trl sft --model_name_or_path Qwen/Qwen2.5-0.5B
--dataset_name trl-lib/Capybara
--output_dir Qwen2.5-0.5B-SFT
資料保護專員:
trl dpo --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct
--dataset_name argilla/Capybara-Preferences
--output_dir Qwen2.5-0.5B-DPO
聊天:
trl chat --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct
在相關文件部分中閱讀有關 CLI 的更多信息,或使用--help
了解更多詳細信息。
為了提高訓練的靈活性和控制力,TRL 提供了專用的訓練器課程,用於在自訂資料集上訓練後語言模型或 PEFT 適配器。 TRL 中的每個訓練器都是圍繞 ? 的輕型包裝器。 Transformers 訓練器本身支援 DDP、DeepSpeed ZeRO 和 FSDP 等分散式訓練方法。
SFTTrainer
以下是如何使用SFTTrainer
的基本範例:
from trl import SFTConfig , SFTTrainer
from datasets import load_dataset
dataset = load_dataset ( "trl-lib/Capybara" , split = "train" )
training_args = SFTConfig ( output_dir = "Qwen/Qwen2.5-0.5B-SFT" )
trainer = SFTTrainer (
args = training_args ,
model = "Qwen/Qwen2.5-0.5B" ,
train_dataset = dataset ,
)
trainer . train ()
RewardTrainer
以下是如何使用RewardTrainer
的基本範例:
from trl import RewardConfig , RewardTrainer
from datasets import load_dataset
from transformers import AutoModelForSequenceClassification , AutoTokenizer
tokenizer = AutoTokenizer . from_pretrained ( "Qwen/Qwen2.5-0.5B-Instruct" )
model = AutoModelForSequenceClassification . from_pretrained (
"Qwen/Qwen2.5-0.5B-Instruct" , num_labels = 1
)
model . config . pad_token_id = tokenizer . pad_token_id
dataset = load_dataset ( "trl-lib/ultrafeedback_binarized" , split = "train" )
training_args = RewardConfig ( output_dir = "Qwen2.5-0.5B-Reward" , per_device_train_batch_size = 2 )
trainer = RewardTrainer (
args = training_args ,
model = model ,
processing_class = tokenizer ,
train_dataset = dataset ,
)
trainer . train ()
RLOOTrainer
RLOOTrainer
為 RLHF 實現了 REINFORCE 式最佳化,比 PPO 具有更高的效能和記憶體效率。以下是如何使用RLOOTrainer
的基本範例:
from trl import RLOOConfig , RLOOTrainer , apply_chat_template
from datasets import load_dataset
from transformers import (
AutoModelForCausalLM ,
AutoModelForSequenceClassification ,
AutoTokenizer ,
)
tokenizer = AutoTokenizer . from_pretrained ( "Qwen/Qwen2.5-0.5B-Instruct" )
reward_model = AutoModelForSequenceClassification . from_pretrained (
"Qwen/Qwen2.5-0.5B-Instruct" , num_labels = 1
)
ref_policy = AutoModelForCausalLM . from_pretrained ( "Qwen/Qwen2.5-0.5B-Instruct" )
policy = AutoModelForCausalLM . from_pretrained ( "Qwen/Qwen2.5-0.5B-Instruct" )
dataset = load_dataset ( "trl-lib/ultrafeedback-prompt" )
dataset = dataset . map ( apply_chat_template , fn_kwargs = { "tokenizer" : tokenizer })
dataset = dataset . map ( lambda x : tokenizer ( x [ "prompt" ]), remove_columns = "prompt" )
training_args = RLOOConfig ( output_dir = "Qwen2.5-0.5B-RL" )
trainer = RLOOTrainer (
config = training_args ,
processing_class = tokenizer ,
policy = policy ,
ref_policy = ref_policy ,
reward_model = reward_model ,
train_dataset = dataset [ "train" ],
eval_dataset = dataset [ "test" ],
)
trainer . train ()
DPOTrainer
DPOTrainer
實現了流行的直接偏好最佳化 (DPO) 演算法,該演算法用於對 Llama 3 和許多其他模型進行後期訓練。以下是如何使用DPOTrainer
的基本範例:
from datasets import load_dataset
from transformers import AutoModelForCausalLM , AutoTokenizer
from trl import DPOConfig , DPOTrainer
model = AutoModelForCausalLM . from_pretrained ( "Qwen/Qwen2.5-0.5B-Instruct" )
tokenizer = AutoTokenizer . from_pretrained ( "Qwen/Qwen2.5-0.5B-Instruct" )
dataset = load_dataset ( "trl-lib/ultrafeedback_binarized" , split = "train" )
training_args = DPOConfig ( output_dir = "Qwen2.5-0.5B-DPO" )
trainer = DPOTrainer ( model = model , args = training_args , train_dataset = dataset , processing_class = tokenizer )
trainer . train ()
如果您想為trl
做出貢獻或根據您的需求進行自訂,請務必閱讀貢獻指南並確保進行開發安裝:
git clone https://github.com/huggingface/trl.git
cd trl/
make dev
@misc { vonwerra2022trl ,
author = { Leandro von Werra and Younes Belkada and Lewis Tunstall and Edward Beeching and Tristan Thrush and Nathan Lambert and Shengyi Huang and Kashif Rasul and Quentin Gallouédec } ,
title = { TRL: Transformer Reinforcement Learning } ,
year = { 2020 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/huggingface/trl} }
}
此儲存庫的原始程式碼可根據 Apache-2.0 授權取得。