mcpField
T
trl-training

trl-training

github.com/huggingface開発11.2k917 回インストール5 日前に更新
リポジトリ

trl-training について

言語モデル開発者向けのトレーニングスキルです。TRL による教師ありファインチューニング、選好最適化、オンライン強化学習、蒸留、報酬モデル学習と、設定やコマンドラインでの実行方法を扱います。

主な機能

  1. 01SFT、DPO、GRPO などの Trainer
  2. 02選好学習と報酬モデル学習
  3. 03シーケンスのパッキングとパディング削減
  4. 04LoRA 設定のサポート
  5. 05TRL コマンドラインでの学習

活用シーン

  1. 01会話データでの言語モデルのファインチューニング
  2. 02選好ペアを使ったモデル学習
  3. 03独自の報酬関数によるオンライン強化学習

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/huggingface/skills --skill trl-training

インストール後、Claude Code で/trl-trainingを入力して読み込まれたか確認します。

詳細

TRL

各メソッドは、*Trainer クラスと *Config データクラスを組み合わせて使用します。設定クラスは transformers.TrainingArguments を継承しているため、そのすべての引数を任意のトレーナー設定で使用できます。

トレーナーデータセットの種類
SFTTrainer言語モデリングまたはプロンプトと補完
DPOTrainer選好(選択・拒否のペア)
GRPOTrainerプロンプトのみ+報酬関数
DistillationTrainerプロンプトのみ+教師モデル(オンポリシー蒸留)
KTOTrainerペアなしの選好(サンプルごとのブール値ラベル)
RewardTrainer選好(選択・拒否のペア)。ポリシーではなく、スカラー報酬モデルを学習します

ほかにも多くのトレーナー(OnlineDPO、ORPO、CPO、GKD など)が、不安定な API とともに trl.experimental にあります:https://huggingface.co/docs/trl/experimental_overview

from datasets import load_dataset
from trl import SFTConfig, SFTTrainer

trainer = SFTTrainer(
    model="Qwen/Qwen2.5-0.5B",  # model ID or a PreTrainedModel instance
    args=SFTConfig(output_dir="Qwen2.5-0.5B-SFT"),
    train_dataset=load_dataset("trl-lib/Capybara", split="train"),
)
trainer.train()

model には文字列を渡し、from_pretrained を自分で呼び出すのではなく、model_init_kwargs(例:{"dtype": "bfloat16", "attn_implementation": "kernels-community/flash-attn2"})を通じて読み込み時の引数を指定します。トークナイザー/プロセッサーはモデルから推定されます。異なる場合に限り、processing_class を渡してください。LoRA を使う場合は、peft_config=LoraConfig(...) を渡します。

データセット形式

会話形式:{"messages": [{"role": ..., "content": ...}]}(言語モデリング)または {"prompt": [...], "completion": [...]}。チャットテンプレートは自動的に適用されるため、自分で適用しないでください。追加の列も使用できます。GRPO はそれらを報酬関数に渡します。参考:https://huggingface.co/docs/trl/dataset_formats

SFT:重要なフィールド

SFTConfig(
    max_length=1024,        # truncation length; None disables truncation
    packing=True,           # pack sequences into max_length blocks: fewer pad tokens, higher throughput
    padding_free=True,      # flatten batch, no padding; requires FlashAttention; implied by packing
    use_liger_kernel=True,  # fused Liger kernels, reduces peak memory
    assistant_only_loss=True,  # loss only on assistant turns (conversational datasets)
)

GRPO:オンライン RL

def reward_len(completions, **kwargs):
    return [-abs(20 - len(c[0]["content"])) for c in completions]

trainer = GRPOTrainer(
    model="Qwen/Qwen2.5-0.5B-Instruct",
    reward_funcs=reward_len,  # or a list; rewards are summed
    args=GRPOConfig(output_dir="Qwen2.5-0.5B-GRPO", max_completion_length=512),
    train_dataset=load_dataset("trl-lib/DeepMath-103K", split="train"),
)

報酬関数は、キーワード引数 prompts、completions、completion_ids、trainer_state と、データセットのすべての追加列を受け取って呼び出されます。使用しない引数は **kwargs で受け取ってください。補完ごとに1つの報酬を返す list[float] を返します。会話データでは、completions は文字列ではなく、メッセージリストのリストです。

生成バッチサイズは per_device_train_batch_size × num_processes × steps_per_generation です(または generation_batch_size を直接設定します)。また、num_generations(デフォルトは8)で割り切れる必要があります。通常、ボトルネックとなるのは生成です。use_vllm=True で vLLM を有効にします。vllm_mode="colocate" はトレーニング用 GPU を共有します(vllm_gpu_memory_utilization でサイズを調整します)。vllm_mode="server" は別の trl vllm-serve --model <model_id> を使用します。

AsyncGRPOTrainer(trl.experimental.async_grpo)は、生成とトレーニングを切り離した同じアルゴリズムを実装します。バックグラウンドワーカーが vLLM サーバーから補完をストリーミングする間にトレーニングループがそれらを消費するため、交互に実行するのではなく、両者を並行して進められます。

CLI

フラグは設定フィールドに対応しています:trl sft --model_name_or_path Qwen/Qwen2.5-0.5B --dataset_name trl-lib/Capybara。YAML は --config で指定します。分散実行用のプリセットは --accelerate_config zero3 で指定します(Python スクリプトの場合:accelerate launch train.py)。

コメント