NVIDIA-NeMo/labs-molt: 에이전트 중심의 연구용 RL 프레임워크
요약
NVIDIA가 연구용 RL 프레임워크인 Molt를 공개했습니다. 이 프레임워크는 PyTorch와 HuggingFace 네이티브 스택을 기반으로 하며, 1T급 완전 비동기 멀티모달 다중 턴 에이전트 중심의 강화 학습(RL)을 지원합니다. 특히 에이전트를 프로그램 단위로 설계하여 연구 효율성을 높였습니다.
핵심 포인트
- Molt는 에이전트 중심(agentic-first) RL 프레임워크입니다.
- PyTorch/HuggingFace 네이티브 스택으로 구현되어 접근성이 높습니다.
- 1T급 완전 비동기, 멀티모달 다중 턴 에이전트 학습을 지원합니다.
- Ray, vLLM 등 최신 기술 스택과 통합하여 확장성을 확보했습니다.
🦋 Molt
연구를 위한 에이전트 중심 (agentic-first) RL 프레임워크.
Ray · vLLM · NVIDIA AutoModel — 1T급 완전 비동기(fully-async), 멀티모달, 다중 턴 에이전트 중심 RL을 위한 가장 작은 PyTorch / HuggingFace 네이티브 스택.
<br/>
<a href="https://deepwiki.com/NVIDIA-NeMo/labs-molt"><img src="https://devin.ai/assets/deepwiki-badge.png" alt="Ask DeepWiki.com" style="height:20px;"></a>
논문 (Paper) ·
뉴스 (News) ·
아키텍처 (Architecture) ·
Molt를 사용해야 하는 이유 (Why Molt) ·
설치 (Installation) ·
빠른 시작 (Quick Start) ·
지원 범위 (Scope) ·
에이전트 계약 (Agent Contract) ·
레시피 (Recipes) ·
확장성 (Scaling) ·
심층 분석 (Deep dives) ·
기여하기 (Contributing)
| Package | SFT | RL | Runtime |
|---|---|---|---|
molt | molt.cli.train_sft | molt.cli.train_rl_ray | vLLM |
Molt는 **에이전트 중심(agentic-first)**이며 PyTorch / HuggingFace 네이티브합니다. 에이전트는 프로그램이고, 트레이너는 단일 액터입니다. 보상은 Env나 ChatAgent 내부에서 작성하는 모든 Python 코드 — 그레이더, 다중 턴 도구, VLM 환경, LLM-as-judge가 될 수 있습니다. 나머지 부분은 세 가지 구성 요소가 담당합니다: 배치 및 비동기 큐를 위한 Ray, 롤아웃을 위한 vLLM, 순수 PyTorch에서 학습을 위한 NVIDIA AutoModel + FSDP2입니다. 이것이 전체 스택입니다: vLLM 환경에서 TP / EP / CP로 1T급 MoE에 확장되는 약 9.2K 줄의 RL 코드 — --fsdp.ep_size 256을 사용하는 DeepSeek-V3나 가장 큰 액터들을 위한 Adam CPU 오프로드를 생각해보세요. 하나의 에이전트 API, 하나의 학습 가능한 액터로 끝까지 읽기 충분히 깨끗합니다.
📰 뉴스
- 2026-09 · Molt는 FlashREINFORCE를 지원하며, 6,000 스텝을 넘어서도 안정적인 학습이 가능한 비평가(critic-free) 단일 롤아웃 (single-rollout) RL 기능을 제공합니다 — 빠른 시작을 확인하세요.
🧩 아키텍처 (Architecture)
세 개의 박스. 하나의 비동기 루프(async loop).
<p align="center"> <img src="https://raw.githubusercontent.com/NVIDIA-NeMo/labs-molt/HEAD/assets/molt.jpg" alt="Molt 아키텍처: Agent · vLLM rollout · Ray async queue · single-actor AutoModel/FSDP2 trainer, fully async" width="920"/> </p>Ray가 배치(placement)와 세 박스 간의 비동기 큐(async queue)를 담당하며 — 이것이 전체 런타임입니다. 계약은 토큰 우선(token-first) 방식입니다: 토큰 ID, 로그 확률(logprobs), 액션 범위(action ranges), 보상(rewards), 그리고 멀티모달 텐서가 롤아웃부터 학습까지 정렬된 상태로 유지됩니다. Python에서 계산할 수 있는 모든 것은 유효한 보상이 될 수 있으며, 여기에는 롤아웃을 구동하는 동일한 vLLM 엔진을 통해 피드백되는 LLM-as-judge 호출이 포함됩니다.
✨ Molt를 사용해야 하는 이유 (Why Molt)
| 얻게 되는 것 (What you get) | 연구에 중요한 이유 (Why it matters for research) | |
|---|---|---|
| 🤖 Agentic-first | 평가자(graders), 다중 턴 도구, VLM 환경, 그리고 OpenAI/Anthropic과 호환되는 서버를 포괄하는 단일 Gymnasium 기반 API — Env.step() 또는 ChatAgent.run() | 에이전트 자체가 프로그램입니다 — 순수 Python으로 환경을 반복 개선할 수 있으며, 트레이너는 건드릴 필요가 없습니다 |
| ... |
📦 설치 (Installation)
레포지토리를 클론하세요: 실행 스크립트, 에이전트 및 레시피는 여기에 존재하며, 컨테이너는 이 체크아웃을 마운트합니다.
git clone https://github.com/NVIDIA-NeMo/labs-molt.git
cd labs-molt
🐳 컨테이너 (Container) (권장)
dockerfile/Dockerfile는 A100 / H100 / H200 / B200 / GB200용 전체 CUDA-13 스택(torch 2.13, vLLM, TransformerEngine, flash-attn, mamba, DeepEP, NVIDIA AutoModel)을 빌드합니다. SFT와 RL은 그대로 실행됩니다.
docker pull hijkzzz/molt:latest # 또는 고정된 릴리스: hijkzzz/molt:0.1.10
docker build -f dockerfile/Dockerfile -t hijkzzz/molt:latest . # CUDA / vLLM / AutoModel 고정을 변경하려면
Tags from 0.1.9는 다중 아키텍처(amd64 + arm64)를 지원합니다: 동일한 풀이 x86과 Grace-Blackwell 호스트 모두에서 작동하며, 하나의 Dockerfile로 둘 다 빌드할 수 있습니다 (docker buildx build --platform linux/amd64,linux/arm64 --push를 사용하여 태그 게시).
💻 로컬 설치
컨테이너 외부에서 개발하는 경우. 이 레포지토리가 검증된 정확한 git-pinned AutoModel을 가져오므로 (setup.py, AUTOMODEL), R3 라우팅 리플레이와 Muon이 별도의 설정 없이 작동합니다.
pip install -e ".[vllm]"
CUDA 13(torch==2.13.0+cu130)이 필요하며, CUDA-12 환경에서는 작동하지 않습니다. 호스트 드라이버가 580보다 오래된 경우 컨테이너를 사용하십시오: 이는 CUDA 순방향 호환성 레이어를 포함하고 자동으로 활성화합니다.
PyPI의 molt-rl 패키지는 git-pinned AutoModel을 담을 수 없으므로, 현재는 이 고정(pin) 버전을 따라가지 못하며 지원되는 설치 경로가 아닙니다. 컨테이너 또는 로컬 설치를 사용하십시오.
🪶 선택적 백엔드: AutoModel-Slim
기본값은 upstream NVIDIA AutoModel이며, setup.py에 고정되어 있습니다; 위의 모든 명령어는 이를 설치하며, 이 하위 섹션의 내용은 옵트인하지 않는 한 적용되지 않습니다.
automodel-slim은 molt가 사용하는 고정된 AutoModel 커밋을 기반으로, molt가 사용하는 부분만 간추려 이 레포지토리에서 유지 관리하는 것입니다. upstream과 마찬가지로 PyTorch 네이티브이며 Hugging Face 네이티브입니다: Hugging Face 체크포인트는 입력되고, 학습을 위한 네이티브 FSDP2 구현체가 사용되며, vLLM 및 transformers를 위해 Hugging Face safetensors가 출력됩니다. 패키지 이름(nemo_automodel), 임포트 경로, API가 모두 동일하므로 molt의 코드는 전환할 때 변경되지 않습니다.
이 프레임워크는 molt가 학습하는 모델군(Qwen2 / 2.5, Qwen3 / 3.5 / 3.6 / 3.8, DeepSeek V4.1 Flash, GLM 5.x, Gemma 4, Nemotron 3, Muse Glimmer, Inkling)과 그 뒤에 있는 학습 스택(TP / EP / CP를 사용한 FSDP2, THD 패킹을 적용한 TransformerEngine attention, DeepEP / HybridEP MoE 디스패치, 라우터 리플레이, LoRA, FP8, Dion / Muon, 통합된 HF 내보내기 체크포인트가 포함된 DCP)을 유지합니다. 그 외의 모든 것은 제거되어 758개 파일/282k 라인에서 252개 파일/~97k 라인으로 줄었습니다. 보존된 모든 모델군에 대해 순방향 로짓(Forward logits)은 상위 버전과 비트 단위로 정확하며, molt의 RL e2e 지표는 일치하고, 브랜치는 molt의 이미지와 러너를 사용하여 자체 7분 CI를 실행합니다. 각 모델군별 동등성 표, 보존/제거 목록 및 유지 관리 규칙은 해당 브랜치의 README에 있습니다.
MOLT_AUTOMODEL=slim pip install -e ".[vllm]" # 로컬 설치
docker build --build-arg MOLT_AUTOMODEL=slim -f dockerfile/Dockerfile -t molt:slim . # 이미지
EXTRA_PYTHONPATH=/path/to/automodel-slim ... # slurm 레시피: 빌드된 패키지보다 체크아웃이 우선함
setup.py는 두 가지 핀(AUTOMODEL)을 모두 포함하며, 슬림 설치는 브랜치 헤드를 따르므로 병합 시 다음 이미지 빌드 또는 재설치에 즉시 반영됩니다. 모델 및 병렬 스택 변경 사항은 이 저장소와 동일한 cicd 레이블 검사를 거쳐 PR로 해당 브랜치에 전달되어야 합니다. /review를 사용하여 검토를 요청하십시오. 레거시 /claude review 코멘트는 마이그레이션 가이드만 받습니다.
🚀 빠른 시작 (Quick Start)
📘 SFT
torchrun --standalone --nproc_per_node=8 -m molt.cli.train_sft \
--model.model_name_or_path /path/to/automodel \
--data.dataset /path/to/sft.jsonl \
...
SFT는 RL과 동일한 AutoModel/FSDP2 모델 로딩 경로를 사용합니다.
🎮 RL
python3 -m molt.cli.train_rl_ray \
--actor.model_name_or_path /path/to/automodel \
--data.prompt_dataset /path/to/prompts.jsonl \
...
일반적인 RL 스위치:
| 목표 | 플래그 |
|---|---|
| 참조 워커 비활성화 | --algo.kl.init_coef 0 |
| ... |
RL 생태계는 폭넓은 범위에 최적화되어 있습니다. Molt은 **대규모 에이전트 연구 속도(agentic research velocity at scale)**에 최적화되어 있으며, vLLM 기반의 최고 수준 MoE 규모에서 완전히 비동기적인 에이전트 RL을 구동하는 가장 작은 PyTorch 네이티브 스택입니다.
| 🦋 Molt | OpenRLHF | verl | slime | |
|---|---|---|---|---|
| 학습 백엔드 (Training backend) | PyTorch / FSDP2 + NVIDIA AutoModel | DeepSpeed ZeRO-3 | FSDP / FSDP2 / Megatron | Megatron (FSDP exp.) |
| ... | ||||
| 하나의 프레임워크, 하나의 작업. Molt은 SFT(Supervised Fine-Tuning)에서 vLLM 기반 최고 수준 에이전트 RL까지 NVIDIA AutoModel을 처리하는 가장 작은 PyTorch 네이티브 스택입니다. 그라디언트를 건드리는 모든 줄을 순수한 PyTorch로 확인하세요. |
¹ RL 코드는 프레임워크의 RL 경로가 사용하는 모든 Python 파일을 의미합니다 — 온라인 트레이너, 롤아웃(rollout), Ray 오케스트레이션, 경험/어드밴티지/보상/KL/손실(loss), 액터/크리틱/RM 추론, 그리고 공유 모델, 유틸리티, 병렬 처리 및 RL 학습 명령이 의존하는 커널을 포함합니다. 순수 SFT, DPO/KTO/IPO 트레이너, 보상 모델 학습, 증류(distillation), 임베드된 타사 코드, 테스트, 예제, 스크립트, 문서는 제외됩니다. 코드 라인 수만 계산했습니다 (공백 및 주석 전용 줄은 제외). 각 RL 진입점(
molt.cli.train_rl_ray,openrlhf.cli.train_ppo_ray,verl.trainer.main_ppo)에서 가져오는 import 그래프를 추적하여 측정되었습니다. slime은 Megatron/SGLang 백엔드를 지연 로드(lazily)하므로, 핵심slime/패키지와slime_plugins/모델-지오(model-zoo) (+~4.7K — RL 경로가 사용하는 인포 내 모델 코드이며, molt의models/와 동일한 기준으로 계산됨)를 SFT/증류 제외하고 계산합니다. Molt은 이 리포에서 2026-07-20에 측정했으며, 다른 프레임워크들은 각각의 리포에서 당시 최신 main HEAD(verl86e8123, slime243773c, OpenRLHFb3d2927)를 기준으로 2026-06-16에 측정되었습니다.</details>
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기