Обширная библиотека для постобучения моделей фундамента
TRL — это передовая библиотека, разработанная для базовых моделей после обучения с использованием передовых методов, таких как контролируемая точная настройка (SFT), оптимизация проксимальной политики (PPO) и оптимизация прямых предпочтений (DPO). Построен на вершине? Экосистема трансформаторов, TRL поддерживает различные модельные архитектуры и модальности и может масштабироваться для различных аппаратных настроек.
Эффективный и масштабируемый :
PEFT
позволяет проводить обучение на больших моделях со скромным оборудованием посредством квантования и LoRA/QLoRA.Интерфейс командной строки (CLI) . Простой интерфейс позволяет точно настраивать модели и взаимодействовать с ними без необходимости писать код.
Тренеры : различные методы тонкой настройки легко доступны с помощью тренеров, таких как SFTTrainer
, DPOTrainer
, RewardTrainer
, ORPOTrainer
и других.
AutoModels : используйте предварительно определенные классы моделей, такие как AutoModelForCausalLMWithValueHead
чтобы упростить обучение с подкреплением (RL) с помощью LLM.
Установите библиотеку с помощью pip
:
pip install trl
Если вы хотите использовать новейшие функции до официального выпуска, вы можете установить TRL из исходного кода:
pip install git+https://github.com/huggingface/trl.git
Если вы хотите использовать примеры, вы можете клонировать репозиторий с помощью следующей команды:
git clone https://github.com/huggingface/trl.git
Вы можете использовать интерфейс командной строки (CLI) TRL, чтобы быстро начать работу с контролируемой точной настройкой (SFT) и прямой оптимизацией предпочтений (DPO), или проверить свою модель с помощью интерфейса командной строки чата:
СФТ:
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
реализует оптимизацию в стиле REINFORCE для RLHF, которая более производительна и эффективно использует память, чем 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.