مكتبة شاملة لنماذج التأسيس ما بعد التدريب
TRL هي مكتبة متطورة مصممة للنماذج الأساسية لمرحلة ما بعد التدريب باستخدام تقنيات متقدمة مثل الضبط الدقيق الخاضع للإشراف (SFT)، وتحسين السياسة القريبة (PPO)، وتحسين التفضيل المباشر (DPO). بنيت على رأس؟ النظام البيئي للمحولات، يدعم TRL مجموعة متنوعة من بنيات النماذج والطرائق، ويمكن توسيع نطاقه عبر إعدادات الأجهزة المختلفة.
فعالة وقابلة للتطوير :
PEFT
التدريب على النماذج الكبيرة ذات الأجهزة المتواضعة عبر القياس الكمي وLoRA/QLoRA.واجهة سطر الأوامر (CLI) : تتيح لك الواجهة البسيطة ضبط النماذج والتفاعل معها دون الحاجة إلى كتابة تعليمات برمجية.
المدربون : يمكن الوصول بسهولة إلى العديد من أساليب الضبط الدقيق عبر المدربين مثل SFTTrainer
و DPOTrainer
و RewardTrainer
و ORPOTrainer
والمزيد.
AutoModels : استخدم فئات النماذج المحددة مسبقًا مثل AutoModelForCausalLMWithValueHead
لتبسيط التعلم المعزز (RL) باستخدام LLMs.
تثبيت المكتبة باستخدام 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)، أو التحقق من النموذج الخاص بك من خلال واجهة سطر أوامر الدردشة:
سفت:
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 عبارة عن غلاف خفيف حول ؟ مدرب المحولات ويدعم أصلاً أساليب التدريب الموزعة مثل 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.