《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 메인테이너 합동
§ 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 한 번에 무엇이 통신되는가” 는 시대마다 바뀌었다.
- OpenAI Gym (2016) —
env.reset(), env.step(action). observation 은 numpy array, action 은 discrete 또는 continuous. RL 의 lingua franca.
- Gymnasium (2022, 포크) — Gym 의 유지보수가 멈추자 Farama Foundation 으로 이전.
terminated / truncated 분리, type stub 추가. 현대 RL 의 표준.
- LLM agent 시대 (2023–24) — observation 이 더 이상 array 가 아니라 구조화된 dict (도구 호출 결과 · 멀티턴 메시지). action 도 자연어 + 구조화 호출. Gym 인터페이스가 그대로는 안 맞는다.
- OpenEnv (2025) —
Action, Observation, StepResult 를 강타입 dataclass 로. WebSocket / async 가 1차 시민. Docker/K8s 격리 표준화.
바뀐 본질
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가지가 다 보인다.
- typed dataclass — observation 의 schema 가 코드에서 검증됨. tool 의 결과가 dict 로 넘어가다가 누락되는 사고를 줄임.
- async 가 default — 한 episode 가 쇼핑몰 API · 코드 실행 · 검색 같은 외부 호출을 포함. blocking 이면 GPU 가 비어 있음. async-first 가 throughput 에 결정적.
- WebSocket — REST 의 round-trip 비용을 피한다. 멀티턴이 길어지면 길수록 차이가 커진다.
- 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 결정.
- rollout 전용 GPU — 학습 가능 model 과는 별도 GPU 위에서 vLLM 으로 빠른 inference. PagedAttention · continuous batching 의 이점을 그대로.
- learner GPU — backward 가 도는 자리. FSDP 또는 DeepSpeed ZeRO. memory 가 가장 많이 필요.
- reference model — frozen. learner 와 같은 노드에서 weight share, 또는 별도 GPU.
- weight sync — 매 학습 step 후 새 weight 를 sampler 로. NVLink/IB 위 collective 또는 RDMA 직접 transfer.
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 라는 같은 추상 위에서.
- 같은 env, 다른 모드 — 학습 시는 reward 를 학습 신호로, 평가 시는 reward 를 metric 으로. 코드 한 줄 바꾸지 않음.
- seed isolation — eval 시 사용하는 seed/instance 를 학습 데이터에서 제외. environment 가 instance 단위 split 을 native 지원.
- 환경 버전 고정 — 같은 환경의 새 버전이 reward 를 미세하게 바꾸면 모든 비교가 깨진다. Hub 위 environment 는 SHA 기반 immutable 버전.
- cross-env transfer — 한 env 에서 학습한 모델을 다른 env 에서 평가. 진짜 능력의 transfer 가 일어나는가의 질문.
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차 문제가 된다.
- environment 의 reproducibility: 같은 env 의 같은 instance 가 1년 후에도 같은 reward 를 줘야. 외부 API 가 있는 env 는 이 보장이 어려움.
- cost of an env: agent 가 코드를 실행하는 env 는 GPU/CPU 비용이 든다. “env 를 누가 비용을 내는가” 가 새 질문. HF Spaces 의 paid tier 가 자연스러운 후보.
- security: agent 가 임의 코드를 실행하는 env 는 sandboxing 이 핵심. Docker 격리는 1차 방어선.
- open vs closed: 회사 내부의 production env (실제 고객 데이터 위) vs 공개 env (Hub 위). 같은 contract 위에서 둘 다 가능해야.
- environment 의 진화: env 자체가 학습되는 단계 — 더 어려운 task 를 자동 생성, curriculum 자동화.
§ 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급 시민.
실습 시퀀스
- EchoEnv 구현 — OpenEnv repo 의 cookbook 에서 EchoEnv 를 따라 짠다.
openenv init 로 scaffolding 생성, server 띄우고 client 로 연결.
- 2048 env 학습 — Unsloth Colab notebook 으로 GPT-OSS-20B 를 2048 env 위에서 GRPO 학습. 처음 RL 을 굴리는 가장 짧은 길.
- BlackJack + torchforge — torchforge 의 BlackJack 예제 실행. agent loop 안의 ReAct 패턴이 어떻게 코딩되는지 직접.
- verifiable math env — TRL + math env 로 GRPO. reward 를 정답일치(1/0) 로 두고 학습. length hacking 이 어떻게 일어나는지 관찰.
- weight sync 비용 측정 — N step 마다 weight sync 의 시간을 wandb 로 로깅. 어느 step 부터 sync 가 dominant 가 되는지 그래프.
§ 11다른 강의로 이어지는 길· connections
RL · 분산 · LLM 시리즈 안의 연결
§ 12열린 질문· open questions
다음에 다시 들었을 때 직접 검증해야 할 것들
- 스피커 명단 확인 필요 — mega lecture 형식이라 여러 스피커가 등장했을 가능성. transcript 가 복원되면 명단 갱신.
- OpenEnv 의 정확한 추상 — repo 의 현재 README 기준으로 본 노트를 작성. 강의 시점의 API 와 약간 다를 가능성.
- weight sync 의 구체 패턴 — 강의에서 어떤 방식(NCCL collective vs RDMA vs file sync)을 강조했는지 영상에서 직접 확인.
- reward design 의 디테일 — verifiable vs PRM 의 trade-off 가 강의에서 어떻게 정리됐는지 미확인.
- cost analysis — RL 학습이 SFT 대비 몇 배 비싼지의 구체적 비교 — 강의에서 숫자가 등장했을 수 있음.
- OpenEnv 의 미래 — multi-agent: 한 env 안에서 여러 agent 가 상호작용하는 setting. 강의 시점에 다뤘는지 확인.
검증 메모
본 노트의 OpenEnv 코드 예시는 repo 의 현재 README 패턴을 학습용으로 단순화한 것이다. 정확한 API 호출 형태(예: EchoEnv 의 실제 선언)는 repo 의 example 파일을 참조해야 한다.