기초 모델 학습 후를 위한 포괄적인 라이브러리
TRL은 SFT(Supervised Fine-Tuning), PPO(Proximal Policy Optimization) 및 DPO(Direct Preference Optimization)와 같은 고급 기술을 사용하여 훈련 후 기초 모델용으로 설계된 최첨단 라이브러리입니다. 위에 지어진? Transformers 생태계인 TRL은 다양한 모델 아키텍처와 양식을 지원하며 다양한 하드웨어 설정에 걸쳐 확장할 수 있습니다.
효율성 및 확장성 :
PEFT
와의 완전한 통합을 통해 양자화 및 LoRA/QLoRA를 통해 적당한 하드웨어로 대규모 모델에 대한 교육이 가능합니다.명령줄 인터페이스(CLI) : 간단한 인터페이스를 통해 코드를 작성할 필요 없이 모델을 미세 조정하고 상호 작용할 수 있습니다.
트레이너 : SFTTrainer
, DPOTrainer
, RewardTrainer
, ORPOTrainer
등과 같은 트레이너를 통해 다양한 미세 조정 방법에 쉽게 액세스할 수 있습니다.
AutoModels : AutoModelForCausalLMWithValueHead
와 같은 사전 정의된 모델 클래스를 사용하여 LLM을 통한 강화 학습(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로 모델을 확인할 수 있습니다.
SFT:
trl sft --model_name_or_path Qwen/Qwen2.5-0.5B
--dataset_name trl-lib/Capybara
--output_dir Qwen2.5-0.5B-SFT
DPO:
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
PPO보다 성능이 뛰어나고 메모리 효율성이 뛰어난 RLHF에 대한 REINFORCE 스타일 최적화를 구현합니다. 다음은 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
Llama 3 및 기타 여러 모델을 사후 학습하는 데 사용된 인기 있는 DPO(Direct Preference Optimization) 알고리즘을 구현합니다. 다음은 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 라이선스에 따라 제공됩니다.