NVIDIA Model Optimizer(ModelOpt) 정리 — 학습 끝난 모델을 '배포용'으로 줄이는 라이브러리
리포: github.com/NVIDIA/Model-Optimizer · 문서: nvidia.github.io/Model-Optimizer · PyPI:
nvidia-modelopt
모델을 학습시키는 것과 그 모델을 싸고 빠르게 서빙하는 것은 다른 문제입니다. 가중치가 BF16이면 파라미터 1개에 2바이트가 들고, 수천억 파라미터 모델은 GPU 몇 장을 채우고 시작합니다. NVIDIA Model Optimizer(줄여서 ModelOpt)는 이 간극을 메우는 도구로, 학습이 끝난 모델을 양자화·가지치기·증류 등으로 줄여 추론 프레임워크가 바로 올릴 수 있는 체크포인트로 내보내는 라이브러리입니다. 이 글은 리포 README, 공식 문서, 릴리스 노트(0.47.0), NVIDIA 기술 블로그만 근거로 정리했습니다.
1. 한 줄 정의와 위치
README의 정의를 옮기면, ModelOpt는 양자화(quantization), 가지치기(pruning), 신경망 구조 탐색(NAS), 증류(distillation), 추측 디코딩(speculative decoding), 희소성(sparsity) 같은 모델 최적화 기법을 모아 둔 라이브러리입니다(README).
흐름은 세 단계로 설명됩니다.
| 단계 | 내용 |
|---|---|
| Input | Hugging Face, PyTorch, ONNX 모델 |
| Optimize | 위 기법들을 Python API로 조합. Megatron-Bridge, Megatron-LM, HF Accelerate 와 연동해 학습이 필요한 기법(QAT·증류)도 수행 |
| Export | 최적화된 체크포인트를 TensorRT-LLM, TensorRT, vLLM, SGLang 에서 바로 배포. HF 통합 export 는 transformers·diffusers 모델 모두 지원 |
즉 ModelOpt 자체는 서빙 엔진이 아닙니다. 모델을 “줄이는 공장”이고, 실제 서빙은 TensorRT-LLM·vLLM·SGLang 같은 엔진이 맡습니다. 이 분업이 이 도구를 이해하는 핵심입니다.
연혁 (README “Latest News” 기준)
- 2024-04: 리포 생성 (GitHub API
createdAt), 2024-05 정식 공개 발표(NVIDIA 블로그) - 2025-01-28: 오픈소스화, 같은 날 NVFP4 지원 추가
- 2025-12-08: 이름이 “NVIDIA TensorRT Model Optimizer” → “NVIDIA Model Optimizer” 로 변경. TensorRT 전용 도구가 아니라 vLLM·SGLang까지 겨냥한다는 방향 전환이 이름에 반영된 것으로 읽힙니다(해석).
- 2026-09-23: 최신 릴리스 0.47.0 (릴리스 노트)
라이선스는 Apache 2.0 입니다.
2. 기법 6가지 — 무엇을 줄이나
| 기법 | 하는 일 | 학습 필요? |
|---|---|---|
| PTQ (Post-Training Quantization) | 학습 끝난 가중치·활성값을 FP8/NVFP4/INT8/INT4 등으로 낮춤. README 는 “모델 크기 2~4배 압축”이라고 설명 | ✗ (소량 캘리브레이션만) |
| QAT / QAD (Quantization-Aware Training / Distillation) | 양자화로 잃은 정확도를 짧은 추가 학습으로 회복. QAD 는 원본 모델을 선생으로 삼아 증류 | ○ |
| Pruning | 불필요한 가중치·레이어·차원을 제거 (Minitron, 2026-05 추가된 Puzzletron 등) | 보통 증류와 함께 |
| Distillation | 큰 모델(teacher)의 동작을 작은 모델(student)에게 학습 | ○ |
| Speculative Decoding | 작은 draft 모듈이 토큰을 미리 여러 개 예측하고 본 모델이 검증 → 지연시간 단축 | ○ (draft 학습) |
| Sparsity | 0이 아닌 값과 위치만 저장해 압축 | 경우에 따라 |
이 중 가장 많이 쓰이고 README 뉴스의 대부분을 차지하는 건 양자화입니다.
3. 핵심 기능: 양자화, 그리고 NVFP4
3.1 코드는 이 정도로 짧다
공식 PTQ 예제의 골자입니다(examples/hf_ptq).
import modelopt.torch.quantization as mtq
from modelopt.torch.export import export_hf_checkpoint
model = AutoModelForCausalLM.from_pretrained("...")
calib_set = get_dataloader(num_samples=calib_size) # 보통 128~512 샘플
def forward_loop(model):
for batch in calib_set:
model(batch)
# 1) 양자화 모듈로 교체 + 캘리브레이션
model = mtq.quantize(model, mtq.NVFP4_DEFAULT_CFG, forward_loop)
# 2) HF 통합 체크포인트로 내보내기 → TRT-LLM / vLLM / SGLang 에서 로드
with torch.inference_mode():
export_hf_checkpoint(model, export_dir)
forward_loop 로 소량의 데이터를 흘려 보내 각 층의 값 범위(amax)를 측정하고 스케일을 정하는 것이 캘리브레이션입니다. 문서는 기본 캘리브레이션 데이터로 cnn_dailymail 과 nemotron-post-training-dataset-v2 를 섞어 쓴다고 밝히고, PTQ 정확도는 캘리브레이션 데이터 선택에 대체로 둔감하다고 설명합니다.
실무 팁도 문서에 있습니다. NVFP4 는 NVFP4_DEFAULT_CFG 보다 NVFP4_MLP_ONLY_CFG(MLP·MoE 만 양자화), NVFP4_EXPERTS_ONLY_CFG(MoE 전문가만) 를 권장합니다. 민감한 어텐션 QKV 프로젝션은 높은 정밀도로 남겨 두고 압축 이득이 큰 부분만 줄이자는 전략입니다.
3.2 NVFP4 가 뭔데
NVFP4 는 Blackwell 세대에서 도입된 NVIDIA 의 4비트 부동소수점 형식입니다(NVIDIA 기술 블로그, 2025-06-24).
- 값 자체는 E2M1(부호 1, 지수 2, 가수 1비트), 표현 범위는 대략 −6~6
- 16개 값마다 FP8(E4M3) 스케일 1개 + 텐서 전체에 FP32 스케일 1개의 2단 스케일링
- 비교 대상인 MXFP4 는 32개 값마다 2의 거듭제곱 스케일(E8M0) 1개를 씁니다
블록을 16개로 더 잘게 나누고, 스케일을 2의 거듭제곱이 아닌 소수 표현이 가능한 FP8 로 두어 양자화 오차를 줄이는 것이 설계의 요지입니다. 같은 블로그는 메모리가 FP16 대비 약 3.5배, FP8 대비 약 1.8배 줄고, DeepSeek-R1-0528 에서 FP8 대비 정확도 하락이 1% 이하였다고 밝힙니다 — 벤더 1차 수치입니다.
3.3 “4비트로 떨어뜨리면 멍청해지지 않나” — QAD
공격적인 W4A4(가중치·활성값 모두 4비트)는 정확도를 깎습니다. ModelOpt 가 최근 가장 밀고 있는 답이 QAD(양자화 인지 증류) 입니다. 양자화된 모델을 학생으로, 원본 BF16 모델을 선생으로 두고 짧게 증류해 잃은 정확도를 되찾습니다. 2026-08 에는 Nemotron 3.5 Lightning 을 NVFP4 + QAD 로 만든 사례가 NVIDIA 블로그로 나왔고, 2026-09-16 에는 Qwen3.6-35B-A3B 의 W4A4 NVFP4 + QAD 튜토리얼이 리포에 추가됐습니다.
3.4 AutoQuantize — 층마다 다른 정밀도
모든 층을 같은 형식으로 누를 필요는 없습니다. AutoQuantize 는 층별로 NVFP4/FP8/BF16 중 무엇을 쓸지 “유효 비트 수” 예산 안에서 자동 탐색하는 혼합 정밀도 기능입니다(공식 소개글). 0.47.0 에서는 이 설정이 CLI 플래그에서 YAML recipe 방식으로 완전히 옮겨졌습니다(아래 5절).
4. 실제 어디에 쓰였나 (벤더·고객 발표)
아래는 전부 NVIDIA 또는 해당 고객사의 1차 발표 수치이고, 중립 제3자의 재현 결과는 확인하지 못했습니다.
| 사례 | 주장 | 출처 |
|---|---|---|
| Nemotron-3-Nano-30B-A3B | 가지치기 + 2단계 증류 + FP8 → vLLM 처리량 2.6배, 메모리 2.6배 절감 | 리포 튜토리얼 |
| Qwen3.6-35B-A3B | W4A4 NVFP4 + QAD → BF16 대비 vLLM 처리량 최대 1.30배, 체크포인트 3.1배 축소 | 리포 튜토리얼 |
| Bielik Minitron 7B | Minitron 가지치기+증류 → 33% 작고 50% 빠르며 품질 90% 유지 | Bielik.AI |
| Domyn Colosseum | 355B → 260B 압축 | Domyn 블로그 |
흥미로운 점은 두 번째 사례입니다. 4비트로 체크포인트는 3.1배 줄었지만 처리량은 1.30배에 그쳤습니다. 크기 감소가 곧바로 같은 배율의 속도 향상으로 이어지지는 않는다는 걸 벤더 스스로 보여 주는 수치라 오히려 믿을 만합니다. 처리량은 배치 크기, 디코드/프리필 비중, 커널 지원에 좌우됩니다.
바로 쓸 수 있는 사전 양자화 체크포인트도 Hugging Face 의 NVIDIA 컬렉션에 올라와 있습니다(예: DeepSeek-R1-FP4, Llama-3.1-405B-Instruct-FP8, Nemotron-3-Super NVFP4).
5. 최신 0.47.0 (2026-09-23) 에서 볼 것
릴리스 노트에서 방향성이 보이는 항목만 추렸습니다.
- “조용한 실패”를 막는 변경 — 설정은 가중치 양자화를 요구하는데 패턴이 모델의 어떤 모듈과도 매칭되지 않으면, 이전엔 캘리브레이션까지 돌고 양자화 안 된 체크포인트(
"quant_algo": null) 를 내보냈습니다. 이제mtq.quantize가 에러를 냅니다. 모듈 이름이 다른 신규 아키텍처(예: Step-3.7 의 전문가 층)를 다룰 때 특히 중요합니다. - MoE 전문가별 스케일 — Transformer Engine 의 fused MoE(
TEGroupedLinear)가 전문가 전체가 하나의 amax 를 공유하던 방식에서 전문가마다 독립 amax 로 바뀌었습니다. 대신 0.47 이전 체크포인트와 호환되지 않아 PTQ 를 다시 돌려야 합니다. - NVFP4 활성값 캘리브레이션
nvfp4_act_headroom— 캘리브레이션 중 본 최댓값에 스케일을 딱 맞추면 실전에서 더 큰 활성값이 들어올 때 포화됩니다. 분포의 낮은 백분위에 스케일을 고정해 여유(headroom)를 남기는 알고리즘입니다. - Recipe 체계로 이관 — AutoQuantize 의
--auto_quantize_*플래그, 옛--qformat단축명들이 제거되고modelopt_recipes/의 YAML recipe 로 일원화됐습니다. - ONNX Autotune — INT8/FP8 Q/DQ 를 넣었을 때 TensorRT 에서 기본 1.02배 이상 빨라지지 않으면 양자화하지 않은 모델을 저장합니다. “양자화했는데 오히려 느려지는” 경우를 걸러 내는 장치입니다.
6. 쓰기 전에 알아둘 제약
- 아직 0.x, 호환성이 자주 깨진다. README 의 Deprecation Policy 는 1.0 이전이라 deprecate 후 1릴리스(약 1개월) 만 유예하고 마이너 버전에서도 breaking change 가 있을 수 있다고 명시합니다. 0.47 한 번에도 제거 항목이 여럿이었습니다. 버전 고정이 필수입니다.
- 하드웨어가 형식을 정한다. NVFP4 는 Blackwell 세대에서 도입된 형식입니다(NVFP4 블로그). 이전 세대 GPU 에서는 FP8·INT8·INT4 AWQ 쪽을 봐야 합니다. 어떤 모델이 어떤 형식을 지원하는지는 support matrix에서 모델별로 다릅니다.
- 서빙 엔진 쪽 지원이 따라와야 한다. 예를 들어 0.47 의 FP8 Vision Encoder recipe 는 “양자화된 비전 인코더 Linear 를 지원하는 런타임”이 있어야 한다고 릴리스 노트가 명시합니다. ModelOpt 로 만들 수 있다고 모든 엔진에서 돌아가는 건 아닙니다.
- NVIDIA 생태계 중심. 입력은 HF/PyTorch/ONNX 로 열려 있지만, 최적화 이득이 가장 크게 나오는 경로는 NVIDIA GPU + TensorRT-LLM/vLLM/SGLang 입니다.
- 벤치마크는 대부분 벤더 발표. 4절의 수치는 NVIDIA·고객사 발표이며, 다른 양자화 도구와의 중립적 헤드투헤드 비교는 찾지 못했습니다.
7. 덤: 에이전트 스킬 제공
README 에는 Claude Code / Codex 용 플러그인을 리포에서 바로 설치하는 방법이 있습니다.
claude plugin marketplace add https://github.com/NVIDIA/Model-Optimizer.git
claude plugin install modelopt@modelopt
라이브러리가 “코딩 에이전트가 쓸 스킬”까지 같이 배포하는 흐름이 요즘 오픈소스 리포의 새 관행이 되어 가는 모습입니다.
정리
- ModelOpt 는 학습과 서빙 사이의 압축 공장이다. 서빙은 TRT-LLM·vLLM·SGLang 이 한다.
- 중심은 양자화, 그중에서도 Blackwell 의 NVFP4 이고, 4비트의 정확도 손실을 QAD(증류)로 회복하는 쪽으로 무게가 옮겨 가고 있다.
- 몇 줄의 API(
mtq.quantize→export_hf_checkpoint)로 쓸 수 있지만, 0.x 의 잦은 호환성 변경과 하드웨어·엔진 지원 매트릭스를 먼저 확인해야 한다.
References
- NVIDIA, Model-Optimizer GitHub 리포지토리 README — https://github.com/NVIDIA/Model-Optimizer
- NVIDIA, Model Optimizer Documentation — https://nvidia.github.io/Model-Optimizer/
- NVIDIA, ModelOpt 0.47.0 Release Notes (2026-09-23) — https://github.com/NVIDIA/Model-Optimizer/releases/tag/0.47.0
- NVIDIA, Post-training quantization (PTQ) — examples/hf_ptq — https://github.com/NVIDIA/Model-Optimizer/tree/main/examples/hf_ptq
- E. Alvarez, Introducing NVFP4 for Efficient and Accurate Low-Precision Inference, NVIDIA Technical Blog (2025-06-24) — https://developer.nvidia.com/blog/introducing-nvfp4-for-efficient-and-accurate-low-precision-inference/
- NVIDIA, AutoQuantize: A Fast Automatic Mixed-Precision Assignment — https://nvidia.github.io/Model-Optimizer/announcements/autoquantize.html
- NVIDIA Technical Blog, Developing Nemotron 3.5 Lightning NVFP4 with QAD Using NVIDIA Model Optimizer — https://developer.nvidia.com/blog/developing-nemotron-3-5-lightning-nvfp4-with-qad-using-nvidia-model-optimizer/
- NVIDIA Technical Blog, Accelerate Generative AI Inference Performance with NVIDIA TensorRT Model Optimizer, Now Publicly Available (2024-05) — https://developer.nvidia.com/blog/accelerate-generative-ai-inference-performance-with-nvidia-tensorrt-model-optimizer-now-publicly-available/
- Bielik.AI, NVIDIA GTC Bielik Minitron premiere (고객 발표) — https://bielik.ai/en/nvidia-gtc-bielik-minitron-premiere/
- Domyn, Domyn Large: the journey of a European sovereign AI model (고객 발표) — https://www.domyn.com/blog/domyn-large-the-journey-of-a-european-sovereign-ai-model-for-regulated-industries