AI・機械学習
上級
TRL (Transformer Reinforcement Learning)(ティーアールエル トランスフォーマー レインフォースメント ラーニング)
Hugging Faceが開発するLLMの強化学習・選好学習ライブラリ。PPO・DPO・GRPO・KTO・ORPOなど最新の選好最適化アルゴリズムをTransformers/PEFTと統合して提供し、SFTTrainer・DPOTrainer・PPOTrainerの各コンポーネントが業界標準として広く使われる。
0 回閲覧
0 いいね
2026/6/5 更新
関連タグ
ai
llm
fine-tuning
rlhf
dpo
ppo
huggingface
reinforcement-learning
TRL(Transformer Reinforcement Learning)とは
Hugging Faceが開発するLLMのファインチューニング・強化学習専用ライブラリ。2022年の公開以来、RLHF(Reinforcement Learning from Human Feedback)の実装標準として進化し続け、2024年時点でSFT・DPO・PPO・GRPO・KTO・ORPO・RewardModelingなど業界で注目される学習アルゴリズムを網羅している。
主要コンポーネント
SFTTrainer(Supervised Fine-Tuning)
from datasets import load_dataset
from trl import SFTTrainer, SFTConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B-Instruct")
dataset = load_dataset("trl-lib/Capybara", split="train")
peft_config = LoraConfig(
r=16, lora_alpha=32,
target_modules=["q_proj", "v_proj"],
)
training_args = SFTConfig(
output_dir="./sft-qwen2.5",
num_train_epochs=3,
per_device_train_batch_size=4,
learning_rate=2e-4,
bf16=True,
)
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=dataset,
peft_config=peft_config,
tokenizer=tokenizer,
)
trainer.train()
DPOTrainer(Direct Preference Optimization)
from trl import DPOTrainer, DPOConfig
# DPOデータセット形式: {prompt, chosen, rejected}
training_args = DPOConfig(
output_dir="./dpo-model",
beta=0.1, # KLダイバージェンス係数
per_device_train_batch_size=2,
learning_rate=5e-7,
)
trainer = DPOTrainer(
model=model,
ref_model=ref_model, # 参照モデル(frozenのコピー)
args=training_args,
train_dataset=dataset,
tokenizer=tokenizer,
)
trainer.train()
GRPOTrainer(Group Relative Policy Optimization)
DeepSeek-R1の訓練で使われたアルゴリズム。Reward Modelを使わずに、同一プロンプトから生成した複数の回答をグループ内で相対評価する。
from trl import GRPOTrainer, GRPOConfig
def reward_function(completions, **kwargs):
return [1.0 if "正解" in c else 0.0 for c in completions]
training_args = GRPOConfig(
output_dir="./grpo-model",
num_generations=8, # 各プロンプトから生成する回答数
max_new_tokens=512,
)
trainer = GRPOTrainer(
model=model,
args=training_args,
reward_funcs=reward_function,
train_dataset=dataset,
tokenizer=tokenizer,
)
trainer.train()
アルゴリズム比較
| 手法 | Reward Model | 特徴 | 2025年の位置付け |
|---|---|---|---|
| SFT | 不要 | 基本的な教師あり学習 | 全モデルの起点 |
| DPO | 不要 | オフライン選好学習・安定 | 最も広く使われる |
| GRPO | 不要 | グループ相対評価・推論強化 | R1系モデルの標準 |
| PPO | 必要 | オンライン強化学習・強力 | 大規模RLHF |
| KTO | 不要 | バイナリフィードバック | ラベル取得容易 |
| ORPO | 不要 | SFT+選好学習を同時実行 | 計算効率良 |
Unslothとの連携
UnslothはTRLのSFTTrainer/DPOTrainerをバックエンドで使いつつ高速化カーネルを適用:
# Unsloth経由でTRL SFTTrainerを高速化
from unsloth import FastLanguageModel
from trl import SFTTrainer
model, tokenizer = FastLanguageModel.from_pretrained(...)
# 通常のTRL SFTTrainerをそのまま使用
# Unslothのカスタムカーネルが自動適用される
trainer = SFTTrainer(model=model, ...)
trainer.train() # 2-5x高速