ART(エージェント強化学習トレーナー)チートシート
ART(Agent Reinforcement Trainer)by OpenPipeはLLMベースのエージェントを強化学習、主にGRPOでトレーニングするためのオープンソースフレームワークです。その定義的なアイデアは分割アーキテクチャです:軽量なクライアントがOpenAI互換エンドポイント経由で独自のコード内でエージェントのロールアウトを実行し、サーバー/バックエンドが推論(vLLM)とトレーニング(Unsloth搭載GRPO)を処理します。オプションで別のGPUマシン上で。これはマルチターン、ツール使用エージェントに非常に適しており、報酬に対する「仕事中」トレーニングが必要です。
強化学習は不安定で計算量が多い場合があります。小さく始めて、すべてをログに記録し、スケーリング前に報酬関数をほんの数回のロールアウトで検証してください。
インストール
| ステップ | コマンド |
|---|
| インストール | pip install openpipe-art |
| エクストラ付き(バックエンド) | pip install "openpipe-art[backend]" |
| uv | uv add openpipe-art |
| 要件 | バックエンド用のCUDA GPU(トレーニング/推論) |
コアコンセプト
| 用語 | 意味 |
|---|
| モデル | トレーニング可能なモデルハンドル(art.TrainableModel)バックエンドに登録されている |
| バックエンド | 推論とトレーニングが実行される場所(ローカルGPUまたはリモート) |
| ロールアウト | 軌跡と報酬を生成する1つのエージェントエピソード |
| 軌跡 | ARTがスコアと学習するメッセージ/ツール呼び出し/選択肢 |
| GRPO | グループ相対方針最適化 — デフォルトのRL アルゴリズム |
| 報酬 | コードが軌跡に割り当てるスカラー(高い方が良い) |
モデルの定義
import art
model = art.TrainableModel(
name="agent-001",
project="my-agent",
base_model="Qwen/Qwen2.5-7B-Instruct",
)
backend = art.LocalBackend() # or a remote backend
await model.register(backend)
| オブジェクト | 目的 |
|---|
art.TrainableModel(...) | トレーニングしている方針 |
art.LocalBackend() | ローカルGPUで推論とトレーニングを実行 |
model.register(backend) | モデルをバックエンドにバインド |
model.openai_client() | ロールアウト用のOpenAI互換クライアント |
ロールアウトの記述
import art, weave
@weave.op
async def rollout(model: art.Model, scenario) -> art.Trajectory:
client = model.openai_client()
traj = art.Trajectory(messages_and_choices=[], reward=0.0)
messages = [{"role": "user", "content": scenario.prompt}]
completion = await client.chat.completions.create(
model=model.name, messages=messages,
)
choice = completion.choices[0]
traj.messages_and_choices.append(choice)
traj.reward = score(choice.message.content, scenario) # your reward fn
return traj
トレーニングループ
for step in range(NUM_STEPS):
groups = await art.gather_trajectory_groups(
(art.TrajectoryGroup(rollout(model, s) for _ in range(GROUP_SIZE))
for s in scenarios)
)
await model.train(groups, config=art.TrainConfig(learning_rate=1e-5))
| 呼び出し | 説明 |
|---|
art.TrajectoryGroup(...) | 互いに比較されるロールアウトのグループ(GRPO) |
art.gather_trajectory_groups(...) | ロールアウトを同時実行して グループを収集 |
model.train(groups, config=...) | 集約されたグループからの1つのGRPO更新 |
art.TrainConfig(...) | 学習率とトレーニングハイパーパラメータ |
model.get_step() | 現在のトレーニングステップ(チェックポイント/再開用) |
報酬設計のヒント
| ガイドライン | 理由 |
|---|
| 報酬を境界内に保つ | GRPO利点推定値を安定化 |
| 結果に報酬を与える、言葉遣いではなく | フレーズング報酬ハッキングを回避 |
| ツール成功のための小さなシェイピングを追加 | マルチステップクレジット割り当てに役立つ |
| 相対スコアリングにはRULERを使用 | クリーンなメトリックが存在しないときにグループ内の軌跡をランク付けするARTのヘルパー |
可観測性
| ツール | 統合 |
|---|
| Weights & Biases | 報酬/損失曲線のネイティブログ |
| Weave | ロールアウトを@weave.opで装飾してトレース取得 |
| LangfuseTracing | 軌跡検査でサポート |
ART vs その他のRL トレーナー
| アスペクト | ART | OpenRLHF | verl |
|---|
| フォーカス | マルチステップエージェント | スケーラブルRLHF | 高スループットRL |
| アーキテクチャ | クライアント/サーバー分割 | Ray + vLLM | Ray + vLLM |
| バックエンド | vLLM + Unsloth | vLLM | vLLM |
| 最適な用途 | 独自のコードでトレーニングされたエージェント | 大規模RLHFパイプライン | 研究スループット |
リソース