콘텐츠로 이동

ART (Agent Reinforcement Trainer) Cheatsheet

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

StepCommand
Installpip install openpipe-art
With extras (backend)pip install "openpipe-art[backend]"
uvuv add openpipe-art
Requirements백엔드용 CUDA GPU (학습/inference)

Core Concepts

TermMeaning
Model백엔드에 등록된 학습 가능한 모델 핸들 (art.TrainableModel)
Backendinference + 학습이 실행되는 곳 (로컬 GPU 또는 원격)
Rollout궤적과 리워드를 생성하는 하나의 에이전트 에피소드
TrajectoryART가 점수를 매기고 학습하는 메시지/도구-호출/선택
GRPOGroup 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)
ObjectPurpose
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))
CallDescription
art.TrajectoryGroup(...)서로 비교되는 rollouts 그룹 (GRPO)
art.gather_trajectory_groups(...)rollouts을 동시에 실행하고 그룹 수집
model.train(groups, config=...)수집된 그룹에서 하나의 GRPO 업데이트
art.TrainConfig(...)학습 속도 및 학습 하이퍼파라미터
model.get_step()현재 학습 단계 (체크포인트/재개용)

Reward Design Tips

GuidelineWhy
리워드를 경계 내로 유지GRPO 장점 추정을 안정화함
표현이 아닌 결과에 보상표현 기반 리워드 해킹 방지
도구 성공에 대한 작은 shaping 추가멀티 스텝 신용 할당 지원
상대적 점수 지정에 RULER 사용깨끗한 메트릭이 없을 때 그룹 내 궤적 순위 지정을 위한 ART의 헬퍼

Observability

ToolIntegration
Weights & Biases리워드/손실 곡선의 기본 로깅
Weave추적 캡처를 위해 rollouts을 @weave.op으로 장식
LangfuseTracing궤적 검사를 위해 지원

ART vs Other RL Trainers

AspectARTOpenRLHFverl
Focus멀티 스텝 에이전트확장 가능한 RLHF고처리량 RL
ArchitectureSplit 클라이언트/서버Ray + vLLMRay + vLLM
BackendvLLM + UnslothvLLMvLLM
Best for자신의 코드에서 학습된 에이전트대규모 RLHF 파이프라인연구 처리량

Resources