ART (Agent Reinforcement Trainer) Cheatsheet
ART (Agent Reinforcement Trainer)는 OpenPipe의 오픈소스 프레임워크로 LLM 기반 에이전트를 강화 학습으로 학습시키며, 주로 GRPO를 사용합니다. 이 도구의 정의적 개념은 split 아키텍처입니다. 경량 클라이언트는 OpenAI 호환 엔드포인트를 통해 자신의 코드에서 에이전트의 rollouts을 실행하고, 서버/백엔드는 inference (vLLM)과 학습 (Unsloth 기반 GRPO)을 처리하며, 선택적으로 별도의 GPU 머신에서 실행할 수 있습니다. 이는 리워드에 대해 “on-the-job” 학습이 필요한 멀티 턴, 도구 사용 에이전트에 잘 적합합니다.
강화 학습은 불안정할 수 있고 컴퓨팅 집약적입니다. 작게 시작하고, 모든 것을 기록하고, 리워드 함수를 소수의 rollouts으로 검증한 후 확장하세요.
Installation
| Step | Command |
|---|
| Install | pip install openpipe-art |
| With extras (backend) | pip install "openpipe-art[backend]" |
| uv | uv add openpipe-art |
| Requirements | 백엔드용 CUDA GPU (학습/inference) |
Core Concepts
| Term | Meaning |
|---|
| Model | 백엔드에 등록된 학습 가능한 모델 핸들 (art.TrainableModel) |
| Backend | inference + 학습이 실행되는 곳 (로컬 GPU 또는 원격) |
| Rollout | 궤적과 리워드를 생성하는 하나의 에이전트 에피소드 |
| Trajectory | ART가 점수를 매기고 학습하는 메시지/도구-호출/선택 |
| GRPO | Group Relative Policy Optimization — 기본 RL 알고리즘 |
| Reward | 코드가 궤적에 할당하는 스칼라 (높을수록 = 더 좋음) |
Defining a Model
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)
| Object | Purpose |
|---|
art.TrainableModel(...) | 학습하고 있는 정책 |
art.LocalBackend() | 로컬 GPU에서 inference + 학습 실행 |
model.register(backend) | 모델을 백엔드에 바인딩 |
model.openai_client() | rollouts용 OpenAI 호환 클라이언트 |
Writing a Rollout
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
Training Loop
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))
| Call | Description |
|---|
art.TrajectoryGroup(...) | 서로 비교되는 rollouts 그룹 (GRPO) |
art.gather_trajectory_groups(...) | rollouts을 동시에 실행하고 그룹 수집 |
model.train(groups, config=...) | 수집된 그룹에서 하나의 GRPO 업데이트 |
art.TrainConfig(...) | 학습 속도 및 학습 하이퍼파라미터 |
model.get_step() | 현재 학습 단계 (체크포인트/재개용) |
Reward Design Tips
| Guideline | Why |
|---|
| 리워드를 경계 내로 유지 | GRPO 장점 추정을 안정화함 |
| 표현이 아닌 결과에 보상 | 표현 기반 리워드 해킹 방지 |
| 도구 성공에 대한 작은 shaping 추가 | 멀티 스텝 신용 할당 지원 |
| 상대적 점수 지정에 RULER 사용 | 깨끗한 메트릭이 없을 때 그룹 내 궤적 순위 지정을 위한 ART의 헬퍼 |
Observability
| Tool | Integration |
|---|
| Weights & Biases | 리워드/손실 곡선의 기본 로깅 |
| Weave | 추적 캡처를 위해 rollouts을 @weave.op으로 장식 |
| LangfuseTracing | 궤적 검사를 위해 지원 |
ART vs Other RL Trainers
| Aspect | ART | OpenRLHF | verl |
|---|
| Focus | 멀티 스텝 에이전트 | 확장 가능한 RLHF | 고처리량 RL |
| Architecture | Split 클라이언트/서버 | Ray + vLLM | Ray + vLLM |
| Backend | vLLM + Unsloth | vLLM | vLLM |
| Best for | 자신의 코드에서 학습된 에이전트 | 대규모 RLHF 파이프라인 | 연구 처리량 |
Resources