gpumode · 강의 아카이브
《GPU Mode》 L091 2025 · Mega Lecture High priority transcript · failed · OpenEnv repo 로 보강

Mega Lecture: Reinforcement Learning, Agents & OpenEnv

2025년 LLM 의 다음 동력은 RL — 그리고 RL 을 굴리려면 표준화된 environment 가 필요하다. Meta-PyTorch / HuggingFace / Unsloth / TRL 진영이 모여 만든 OpenEnv 의 추상을 GPU Mode 청중에게 깔고, 그것이 어떻게 agentic RL training pipeline 으로 묶이는지를 한 자리에 모은 mega 강의. transcript 가 실패해서 본 노트는 OpenEnv repo · TRL · Unsloth blog 를 기반으로 재구성.

OpenEnv RL training agents GRPO TRL Unsloth torchforge Gymnasium
M
Speakers
Meta · HuggingFace · Unsloth 진영 합동
스피커 명단 (확인 필요) · OpenEnv 메인테이너 · TRL/Unsloth 메인테이너 합동
강의 번호
L091 · Mega
스피커
Multi · 확인 필요
학습 우선순위
High · 정독
자막 상태
failed · repo 로 보강
§ 01왜 mega lecture 인가· RL · agents · environments

2025년의 LLM 학습은 “environment 가 데이터다” 의 시대로 들어섰다

강의의 출발점. SFT 와 DPO/APO 가 이미 거의 saturate 된 시점에서, 다음 step 의 능력 (수학 · 코드 · 도구 사용 · 멀티턴 추론)은 환경 안에서 직접 학습해서 얻는다. 단순 preference 가 아니라 실제로 풀린 문제 / 실제로 실행된 코드 의 reward 가 신호가 된다. 그 environment 를 표준화하는 것이 OpenEnv 의 미션.

강의의 정신

“RL 의 병목은 알고리즘이 아니라 환경의 다양성과 안정성이다. 그래서 framework 가 표준화 layer 가 된다 — model · trainer · env 셋이 분리돼야 한다.”

이 mega lecture 의 의도는 한 자리에 여러 진영 을 모은다는 점이다. Meta 의 OpenEnv 코어, HuggingFace 의 TRL (GRPO 학습 루프), Unsloth 의 sample efficiency 트릭, 그리고 그 위에서 도는 agent 프레임 — 한 사람이 만들어 한 사람이 쓰는 게 아니라, layer 가 잘 분리된 stack 이 어떻게 조립되는지가 전체 그림.

FIG · 2025 RL training stack 전체 단면top-down
L7 · 학습 알고리즘GRPO · PPO · DPO 변형 · APO. trl · unsloth · torchforge 가 이 layer 의 구현체.
L6 · trainer 통합model · sampler · reward 를 한 학습 루프에 묶는 layer. rollout 과 update 의 분리.
L5 · sampling backendvLLM / SGLang / Unsloth 의 fast inference. rollout 의 latency 가 학습 throughput 의 80% 를 결정.
L4 · agent looptool use · ReAct · planner. observation 을 받아 action 을 만드는 정책 코드.
L3 · environment clientOpenEnv EnvClient. WebSocket 으로 server 와 통신. async-first.
L2 · environment serverOpenEnv Environment. reset() · step(action) · state(). Docker/K8s 로 격리.
L1 · 격리 / schedulercontainer provider. 같은 environment 의 여러 인스턴스를 동시에. HF Spaces 도 backend 가 될 수 있음.
강의의 핵심 명제 — L2/L3 (environment) 가 표준화돼야 L4 (agent) 와 L7 (algo) 가 자유롭게 조합된다. OpenEnv 는 정확히 L2/L3 layer 의 contract.
§ 02RL framework 의 진화· Gym → OpenAI → Gymnasium → OpenEnv

같은 인터페이스가 10년에 걸쳐 다듬어졌다 — 그리고 LLM agent 라는 새 부담이 생겼다

OpenEnv 의 디자인을 이해하려면 그 위에 깔린 역사를 짧게 본다. reset/step 이라는 두 함수의 인터페이스는 거의 그대로다 — 그러나 “step 한 번에 무엇이 통신되는가” 는 시대마다 바뀌었다.

바뀐 본질

Gym 시절 environment 는 한 process 안 함수 호출이었다. OpenEnv 시대에는 — environment 가 분리된 컨테이너 / 다른 머신 / 다른 언어 일 수 있다. 그래서 인터페이스가 RPC 친화적으로 바뀌었다 (typed dataclass + async + WS).

그리고 강의에서 강조되는 점 — “Gymnasium-style”이라는 표현. OpenEnv 는 새 패러다임이 아니다. 같은 정신의 새 구현체. 이 결정은 학습 곡선을 낮춘다 — 기존 RL 코드를 OpenEnv 로 옮기는 게 며칠 단위.

§ 03OpenEnv 의 추상· Action · Observation · StepResult

세 개의 dataclass 와 두 개의 함수 — 그게 전부다

OpenEnv repo 의 README 가 강조하는 단순함. 새 environment 를 짠다는 건 — Action, Observation 두 개의 dataclass 를 정의하고, server 안에서 reset(), step(action), state() 셋을 구현하는 일이 전부.

# server 측 — Environment 정의
from dataclasses import dataclass
from openenv import Environment, StepResult

@dataclass
class EchoAction:
    text: str

@dataclass
class EchoObservation:
    last_text: str
    turn: int

class EchoEnv(Environment):
    def reset(self):
        self.turn = 0
        return EchoObservation("", 0)

    def step(self, action: EchoAction):
        self.turn += 1
        obs = EchoObservation(action.text, self.turn)
        reward = 1.0 if action.text else 0.0
        done = self.turn >= 5
        return StepResult(obs, reward, done)
# client 측 — async 가 1차 시민
from openenv import EnvClient

async def rollout():
    async with EnvClient(
        base_url="ws://localhost:9000"
    ) as client:

        obs = await client.reset()

        for _ in range(5):
            action = policy(obs)         # 정책
            result = await client.step(action)
            obs, r, done = (
                result.observation,
                result.reward,
                result.done,
            )
            if done: break

이 짧은 코드 안에 OpenEnv 의 디자인 결정 4가지가 다 보인다.

  1. typed dataclass — observation 의 schema 가 코드에서 검증됨. tool 의 결과가 dict 로 넘어가다가 누락되는 사고를 줄임.
  2. async 가 default — 한 episode 가 쇼핑몰 API · 코드 실행 · 검색 같은 외부 호출을 포함. blocking 이면 GPU 가 비어 있음. async-first 가 throughput 에 결정적.
  3. WebSocket — REST 의 round-trip 비용을 피한다. 멀티턴이 길어지면 길수록 차이가 커진다.
  4. StepResult 가 dataclass — observation/reward/done/info 를 한 객체로. Gym 의 5-tuple 의 후예지만 검증 가능한 형태.
CLI — environment 도 wheel 처럼 배포된다

openenv init my_env 가 standard 한 layout 을 만들고, openenv push 가 HuggingFace Spaces 에 배포한다. environment 가 Hub 의 1급 시민이라는 디자인 — 모델/데이터셋과 함께 environment 도 검색되고 버전된다.

§ 04agent 패턴· tool use · reflexion · ReAct

한 step 안에 LLM 이 무엇을 결정하는가 — observation 위에서 action 까지

강의의 가장 시각적인 부분. environment 가 표준화돼도 — 그 위에서 어떤 action 을 만들지의 정책 코드는 별도. 자주 쓰이는 4가지 패턴.

FIG · agent loop 의 4가지 표준 패턴policy code 의 구조
DIRECT 관찰 → LLM → action. 가장 단순. obs 를 그대로 prompt 에 넣고 LLM 한 번 호출 후 그 출력을 action 으로 파싱. latency × 1
REACT 관찰 → think → act → observe 의 명시적 두 단계. think 단계에서 LLM 이 “지금 무엇이 필요한가” 를 자연어로 적고, act 단계에서 실제 도구 호출. 강의에서 가장 자주 등장하는 baseline. latency × 1.5
REFLEXION 실패 후 “왜 실패했는가” 를 LLM 이 적게 한 뒤 재도전. 자기 비판 단계가 episode 간 메모리 역할. 수학/코드 task 에서 큰 효과. latency × 2–3
PLANNER + EXECUTOR 상위 LLM 이 전체 plan 을 한 번에 생성, 하위 LLM/도구가 step 단위로 실행. plan 이 진행되며 갱신된다. long-horizon agent 의 표준. latency × 3–5
latency 는 같은 task 에서 DIRECT 대비 상대치. RL 학습에서 큰 latency 는 곧 sample efficiency 손해 — 도구 호출 횟수가 늘면 한 episode 당 GPU 시간이 늘기 때문에. 그래서 학습 단계에서는 단순 패턴, eval 단계에서는 복잡 패턴이 일반적.

그리고 강의에서 자주 짚는 점 — “같은 environment 위에서 다른 agent 패턴을 갈아 끼울 수 있어야 한다”. agent 와 env 가 분리돼야 ablation 이 가능. ReAct 와 Direct 가 같은 env 의 같은 reward 위에서 비교 가능해야 “정책 코드가 진짜 도움이 되는가” 의 답이 나온다.

§ 05distributed training· rollout · learner · ref disaggregation

RL 학습은 “세 종류의 GPU 가 다른 일을 한다”

supervised 학습이 “모든 GPU 가 같은 일” 이라면, RL 은 본질적으로 disaggregated 하다. 한 학습 step 의 안을 들여다보면 세 역할이 동시에 돈다.

FIG · GRPO/PPO 학습 한 step 의 stageparallel
STG 1 rollout policy 가 env 와 상호작용 · trajectory 생성
STG 2 reward reward model 또는 verifier 가 점수
STG 3 ref logp frozen reference model 의 logprob
STG 4 advantage GRPO group-relative · baseline 빼기
STG 5 policy update 학습 가능 model 의 backward + step
STG 6 sync 새 weight 를 sampler/ref 로
stage 1 · 5 가 가장 비싼 자리. rollout 은 보통 학습 step 의 60–80% 를 차지한다 — 그래서 vLLM/SGLang 같은 빠른 sampler 와의 통합이 학습 throughput 의 결정 요인. (확인 필요 — 모델/task 별 비율 다름)

강의에서 강조되는 disaggregation 결정.

torchforge 의 등장

위 disaggregation 을 framework 차원에서 표준화한 게 PyTorch 의 torchforge. agentic RL 에 특화된 학습 루프. OpenEnv 와 직접 통합 — Blackjack 예제가 OpenEnv repo 의 cookbook 으로 들어 있음.

그리고 production-scale RL 에 진입할 때 만나는 디테일 — weight sync 의 비용. 70B 모델의 weight 를 매 step transfer 하는 건 비싸다. 보통 N step 마다 sync 하거나, LoRA delta 만 sync 하는 식으로 줄인다. RL 의 throughput 병목은 매번 다른 자리에 옮겨 다닌다 — 처음엔 rollout, 다음엔 weight sync, 그 다음엔 reward model 의 latency.

§ 06reward modeling· verifiable · process · preference

“RL 에 좋은 reward 가 있다” 가 RLHF 의 90%

강의에서 가장 강조되는 점 중 하나 — RL 알고리즘의 차이보다 reward signal 의 품질이 결과를 더 크게 바꾼다. 2025년 trend 는 reward 가 점점 verifiable 해지는 방향.

verifiable reward
  • 수학: 답이 정답과 일치 (1/0)
  • 코드: unit test 통과율
  • 구조화 출력: JSON schema 준수
  • 장점: 노이즈 없음, hack 불가능, 멀티턴에 강함
  • 한계: task 가 자동 검증 가능해야
process reward (PRM)
  • 최종 답뿐 아니라 중간 단계의 정확성 도 평가
  • chain-of-thought 의 각 step 에 점수
  • 장점: 신호 밀도 높음 — sample efficiency
  • 한계: PRM 자체 학습이 어려움
preference reward (RM)
  • 두 응답 중 어느 쪽이 좋은지 — Bradley-Terry
  • RLHF 의 고전적 형태
  • 장점: open-domain task 에 적용 가능
  • 한계: reward hacking 의 주된 출처
env-native reward
  • environment 자체가 점수를 준다 — 게임의 score, simulator 의 success
  • OpenEnv 가 자연스럽게 수용하는 형태
  • 예: Unsloth 의 2048 env, BlackJack env
  • 장점: verifiable + 환경의 풍부함
“2024년의 RLHF 는 ‘좋은 reward model 학습이 모델 학습보다 어렵다’ 의 시대였다. 2025년은 verifiable reward 로 reward model 자체를 우회한다.”학습 노트

강의에서 짚는 reward 디자인의 함정 — length hacking. reward 가 출력 길이와 양의 상관이 있으면, 모델이 길게만 쓰는 쪽으로 발산. 해결책: length-normalized reward, 또는 kl 페널티 강화.

§ 07평가 — environment 가 곧 benchmark· eval as env

학습용 env 가 그대로 evaluation 환경이 된다 — 이게 OpenEnv 의 큰 그림

기존 LLM 평가는 “정답이 있는 정적 dataset” 위에서. agentic 시대의 평가는 “환경 안에서 실제로 작동하는가”. 이 둘은 다른 인프라가 아니어야 한다 — environment 라는 같은 추상 위에서.

benchmark 의 미래

“정적 dataset” 위 benchmark 는 빠르게 saturate 된다. environment as benchmark 는 reward 가 dynamic 해서 saturate 가 어렵다 — 같은 env 에 새 task instance 를 무한히 만들 수 있기 때문. SWE-bench / WebArena 같은 environment 가 사실상 LLM benchmark 의 다음 세대.

§ 08채택 사례· TRL · Unsloth · torchforge · SkyRL

같은 OpenEnv 위에서 5개의 framework 가 도는 풍경

OpenEnv repo 의 README 가 자랑스럽게 보여주는 부분 — 이미 여러 RL framework 가 OpenEnv 인터페이스를 지원한다.

TRL (HuggingFace)
  • GRPO 학습 루프의 표준 구현
  • OpenEnv 통합 예제: 수학 task
  • vLLM rollout backend 와 결합
  • HF ecosystem (datasets · transformers · accelerate)
Unsloth
  • 2048 게임 env 위 GPT-OSS-20B 학습 Colab notebook
  • 4-bit / LoRA 로 작은 GPU 에서도 RL
  • sample efficiency 를 위한 trick 모음
  • 홈서버 RL 의 진입점
torchforge (PyTorch)
  • agentic RL 에 특화된 PyTorch native
  • BlackJack 예제 in OpenEnv repo
  • fault tolerance · Monarch 와의 연계 가능성
기타 — SkyRL · ART · Oumi
  • SkyRL: 분산 RL 의 다른 stack
  • ART: 작은 RL 라이브러리, 학습 용
  • Oumi: HF 외부의 RL 프레임
  • 모두 OpenEnv contract 지원

강의에서 던지는 질문 — “왜 이렇게 많은 framework 가 같은 contract 를 채택하는가”. 답은 OpenEnv 자체가 가벼운 인터페이스라는 점. 새 framework 가 OpenEnv 를 추가로 지원하는 비용이 며칠 단위. 그러면서 얻는 이득은 — HF Hub 위 모든 environment 에 즉시 접근.

§ 09다음· open vs closed env, hosting

environment 의 거버넌스 — 누가 만들고, 누가 검증하는가

강의의 마지막 섹션은 미래에 대한 질문. RL training 이 실제 production 에서 흔해지면 — environment 의 품질, 보안, 거버넌스가 1차 문제가 된다.

§ 10기억할 메모 · 실습· key takeaways

다시 열었을 때 5분 안에 잡혀야 할 것

3 dataclass · 2 함수
Action · Observation · StepResult + reset() · step(). OpenEnv 의 contract 전체.
async-first WebSocket
멀티턴 환경의 latency 를 가리는 핵심 디자인. blocking REST 였으면 GPU 가 비어 있을 시간을 hide.
role disaggregation
RL 은 본질적으로 분리됨. rollout · reward · ref · learner · sampler. 한 GPU 가 모든 일을 안 한다.
verifiable reward 가 RLHF 보다 안전
자동 검증 가능한 task 면 reward model 자체를 안 만든다. hack 거의 불가능.
env = benchmark
학습 env 가 그대로 평가 env. seed split 만 분리. 정적 dataset 시대의 끝.
HF Hub 가 env 의 배포 채널
openenv push → Spaces. environment 가 모델/데이터셋과 같은 1급 시민.

실습 시퀀스

  1. EchoEnv 구현 — OpenEnv repo 의 cookbook 에서 EchoEnv 를 따라 짠다. openenv init 로 scaffolding 생성, server 띄우고 client 로 연결.
  2. 2048 env 학습 — Unsloth Colab notebook 으로 GPT-OSS-20B 를 2048 env 위에서 GRPO 학습. 처음 RL 을 굴리는 가장 짧은 길.
  3. BlackJack + torchforge — torchforge 의 BlackJack 예제 실행. agent loop 안의 ReAct 패턴이 어떻게 코딩되는지 직접.
  4. verifiable math env — TRL + math env 로 GRPO. reward 를 정답일치(1/0) 로 두고 학습. length hacking 이 어떻게 일어나는지 관찰.
  5. weight sync 비용 측정 — N step 마다 weight sync 의 시간을 wandb 로 로깅. 어느 step 부터 sync 가 dominant 가 되는지 그래프.
§ 11다른 강의로 이어지는 길· connections

RL · 분산 · LLM 시리즈 안의 연결

§ 12열린 질문· open questions

다음에 다시 들었을 때 직접 검증해야 할 것들

검증 메모

본 노트의 OpenEnv 코드 예시는 repo 의 현재 README 패턴을 학습용으로 단순화한 것이다. 정확한 API 호출 형태(예: EchoEnv 의 실제 선언)는 repo 의 example 파일을 참조해야 한다.

← Lecture 090Building resilient ML Engineering skills Lecture 092 →Smol Training Playbook — Loubna Ben Allal