TL;DR
강화학습으로 에이전트형 상호작용을 개선하려면 모델이 실제로 본 토큰 시퀀스와 일치하는 기록이 필요한데 하네스가 생성하는 전사에서는 포맷·요약·캐시로 인해 토큰 레벨 불일치가 발생해 학습 신호가 왜곡된다. Turnstile은 에이전트 하네스와 추론 백엔드 사이에 Rust 기반 프록시를 두어 생성 시점에 토큰 IDs, per-token logprob, 손실 마스크, 가중치 버전 경계, 선택적으로 MoE 라우팅과 처리된 이미지 피처를 캡처해 framework-중립적인 TrainingSequence로 내보낸다. 접두사 인식 멀티턴 병합과 불일치 시 트래젝토리 분리 전략을 통해 트레이너가 실제 행동 정책이 본 컨텍스트로만 학습하도록 보장하며, 멀티모달 실험에서 평균 보상이 약 0.2에서 0.71로 상승한 결과가 관찰되어 실용적 효과가 확인되었다. 구현은 Rust 코어·SGLang 백엔드·Python 바인딩을 포함하며 vLLM 지원과 추가 어댑터가 향후 계획으로 제시되었다.
빠른 이해
새로운 점
에이전트 하네스에 손대지 않고 생성 시점의 토큰·logprob·라우팅·이미지 처리 결과를 캡처해 RL 트레이닝에 직접 연결하는 실용적 프록시 접근법이 제시되었다.
핵심 메커니즘
하네스는 평소대로 Chat Completions API로 요청을 보내고 Turnstile 프록시가 요청을 백엔드로 전달하면서 모델이 샘플한 토큰 IDs·per-token logprobs·loss masks·(옵션)MoE 라우팅과 처리된 이미지 피처를 기록해 framework-중립적 TrainingSequence로 내보낸다.
핵심 수치
- mean reward per prompt: ≈0.2 → ≈0.71- 증가가 대략 165 롤아웃 스텝에 걸쳐 관찰됨
섹션별 상세
문제 정의와 필요성
토큰 불일치의 원인과 영향
Turnstile의 설계 원칙과 동작 흐름
API와 사용 예시
from openai import OpenAI
import turnstile
with turnstile.Proxy(
backend_url="http://localhost:30000",
model="Qwen/Qwen3-1.7B",
) as proxy:
group_id = proxy.create_group(max_trajectory_tokens=4096)
client = OpenAI(
base_url=f"http://{proxy.addr}/group/{group_id}/v1",
api_key="-",
)
client.chat.completions.create(
model="Qwen/Qwen3-1.7B",
messages=[{"role": "user", "content": "Solve this Python task."}],
)
sequences = proxy.get_training_sequences(group_id)이 코드는 기존 Chat Completions 클라이언트를 Turnstile 프록시로 향하게 하여 그룹 단위로 롤아웃을 캡처하고, 완료 후에 토큰 기반의 TrainingSequence들을 회수하는 사용 예시이다.
접두사 인식 멀티턴 트래젝토리 처리
MoE 라우팅 캡처와 재현성 보장
멀티모달 입력 처리와 이미지 처리 통합
class TrainingSequence:
tokens: list[int]
logprobs: list[float]
segment_info: list[tuple[bool, int]]
weight_versions: list[tuple[int, str]]
routed_experts: str | None
images: list[TrainingImage]
processed_images: list[TrainingProcessedImage]이 자료구조는 Turnstile가 내보내는 트레이닝 시퀀스의 필수 필드를 요약한 것으로 토큰 ID, 토큰별 logprob, 구간 정보, 가중치 버전 경계, MoE 라우팅 추적과 원본 및 처리된 이미지 정보를 포함한다.
검증 결과와 운영적 고찰
- 멀티모달 실험에서 평균 보상은 약 0.2에서 약 0.71로 상승했으며 그 변화는 대략 165개의 롤아웃 스텝에 걸쳐 관찰되었다. — 멀티모달 예시 단락과 차트 설명(Mean reward per prompt rose from about 0.2 to about 0.71 over roughly 165 rollout steps).
용어 해설
- Tokenizer
- — 텍스트를 정수 토큰 ID 열로 변환하고 토큰 ID를 다시 텍스트로 복원하는 결정적 함수로서, 모델과 정확히 짝지어진 구현체가 필요하고 공백·포맷 차이로 인해 동일한 문자열도 서로 다른 토큰 ID를 생성할 수 있어 RL 데이터 일관성에서 핵심 요소이다.
- Retokenization Drift
- — 동일한 렌더된 문자열를 나중에 다시 토크나이저에 통과시켰을 때 미세한 포맷 차이로 인해 생성되는 다른 토큰 ID 시퀀스로, 행동 정책이 실제 본 생성 시 본 토큰 시퀀스와 불일치하면 RL 업데이트의 타깃이 어긋나는 원인이 된다.
- Rollout
- — 한 번의 과제 시도에 해당하는 기록 단위로서 초기 프롬프트, 모든 툴 호출과 피드백, 모델 응답 및 최종 결과를 포함하며 RL에서 행동 정책이 본 맥락 전체에 대해 어떻게 수행했는지를 판단하는 단위이다.
- Loss Mask
- — 토큰 시퀀스에서 어떤 토큰들이 모델의 출력으로서 학습 신호에 기여해야 하는지와 사용자·시스템·툴 쪽 입력으로 무시해야 하는지를 표기하는 바이너리 마스크로서 정책 그레이디언트 계산에 직접 투입된다.
- MoE Routing
- — Mixture-of-Experts 아키텍처에서 각 레이어의 소규모 라우터가 입력 토큰마다 활성화할 소수의 전문가(expert)를 선택하는 결정 과정으로, 동일 토큰 ID라도 라우팅이 달라지면 활성화된 파라미터 집합이 달라져 재현성에 영향을 미친다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.