딥러닝 모델의 파라미터 규모가 수백억 개를 넘어가며 이제 단일 GPU로는 더 이상 훈련이 불가능한 시대가 되었습니다.
2025년, 이 문제를 해결하는 유망한 기술 5가지입니다.
- DeepSpeed ZeRO — 메모리 최적화의 절대 표준
- Megatron-LM — 6,000개 GPU까지 선형 확장의 상징
- NVIDIA NeMo — 엔터프라이즈급 생성 AI 풀스택
- vLLM — 24배 빠른 추론 성능의 정석
- SGLang — 구조화 생성의 게임체인저
이 글은 실험 로그, 프로덕션 경험, 최신 벤치마크, GitHub 이슈 분석까지 모두 반영한 실전형 가이드입니다.
단순 설명이 아니라, 현업에서 바로 쓸 수 있는 엔지니어링 관점에서 재구성했습니다.
1. 훈련 최적화의 양대 산맥: DeepSpeed ZeRO vs Megatron-LM
🔹 DeepSpeed ZeRO — “단일 GPU 한계를 깨버린 기술”
DeepSpeed ZeRO의 철학은 단순합니다.
“반복되는 메모리를 없애자.”
전통적인 데이터 병렬화가 모든 GPU에 모델 전체를 복제하는 반면,
ZeRO는 옵티마이저·그래디언트·파라미터를 GPU 간에 분할합니다.
- ZeRO-1: 옵티마이저 분할 → 4배 메모리 절감
- ZeRO-2: 그래디언트 분할 → 8배 절감
- ZeRO-3: 파라미터까지 분할 → 16배 이상 절감
ZeRO-Offload, ZeRO-Infinity는 CPU·NVMe까지 활용하며 단일 GPU로도
100억~300억 규모 모델을 다룰 수 있게 했습니다.
이 기술이 실전에서 얼마나 강력한가요?
- 단일 V100에서 64 TFLOP/s, NVIDIA 공식 대비 28% 더 빠름
- 1,024개 V100으로 BERT 사전학습을 44분, 경쟁 대비 30% 적은 자원
- 1조 파라미터 모델도 512 GPU로 초당 25 PFLOP 유지
즉, ZeRO는 메모리가 부족한 환경에서 가장 강력한 선택지입니다.
🔹 Megatron-LM — “6,144 GPU까지 거의 선형 확장”
NVIDIA가 만든 Megatron-LM은 분산 훈련의 정교함 자체입니다.
- Tensor Parallelism(TP): 한 레이어를 여러 GPU에 분할
- Pipeline Parallelism(PP): 레이어 자체를 단계화
- Data Parallelism(DP): 전체 배치 확장
Megatron-Core v0.14.0 기준:
- H100 클러스터에서 47% MFU(Model FLOPs Utilization)
- GPT-3 175B 훈련 시 GPU당 138 TFLOP/s
- 6,144개 GPU까지 거의 선형적 확장성
핵심은 Megatron 고유의 1F1B(One-Forward-One-Backward) 스케줄링입니다.
파이프라인 버블을 최소화하며, 인터리브드 스케줄링은 이를 더욱 줄여줍니다.
최근 연구에 따르면 이 방식만으로 15–30% 처리량 향상이 가능합니다.
Megatron은 단 한 가지 목적을 위해 존재합니다.
“가장 빠르고 가장 큰 모델을 훈련하기 위해.”
2. 엔터프라이즈급 AI 플랫폼: NVIDIA NeMo
NeMo는 단순 훈련 프레임워크가 아닙니다.
데이터 → 사전학습 → 파인튜닝 → RLHF → 배포까지 한 번에 처리하는 생성 AI 플랫폼입니다.
특징은 다음과 같습니다.
- 2B ~ 462B 모델까지 41–47% MFU
- 3,584개 H100 GPU로 GPT-3 175B를 10.9분 만에 훈련
- Llama 2 RLHF에서 5.6배 성능 향상(TensorRT-LLM)
- 단일 H100으로 Llama 3 8B 파인튜닝을 48시간에 완료
2025년의 변화도 중요합니다.
- NeMo 2.0은 Python 기반 설정으로 전환 (YAML 제거)
- LLM/VLM은 Megatron-Bridge로 통합
- 2025.11 이후 NeMo LLM/VLM은 deprecated 예정
따라서 NeMo는 다음 환경에서 최적입니다.
“엔터프라이즈 규모의 전체 파이프라인을 하나의 스택으로 구축해야 한다면.”
3. 추론 최적화의 절대 강자: vLLM vs SGLang
훈련이 끝났다면 다음 과제는 추론 성능입니다.
2025년 현재, 추론 엔진의 양대 축은 vLLM과 SGLang입니다.
🔹 vLLM — “최고의 범용 LLM 추론 엔진”
핵심 혁신은 PagedAttention입니다.
운영체제 페이징처럼 KV 캐시를 “블록 단위”로 저장해
메모리 단편화를 해결합니다.
효과는 단순하지만 압도적입니다.
- 메모리 낭비 60–80% → 4% 미만
- HuggingFace 대비 최대 24배 빠른 처리량
- vLLM V1(2025년 1월 출시)에서는 추가로 1.7배 속도 개선
Continuous Batching은 동적 요청 처리량을 극대화해
실제 서비스에서 탁월한 효율을 보여줍니다.
기업들이 vLLM을 선택하는 이유는 명확합니다.
- OpenAI API와 완전 호환
- NVIDIA·AMD·TPU·Inferentia·Intel 등 광범위한 하드웨어 지원
- 빠른 업데이트와 강력한 커뮤니티(PyTorch Foundation 소속)
🔹 SGLang — “구조화 생성(JSON/XML)의 절대적 기준”
SGLang은 단순 LLM 추론기가 아닙니다.
프로그램 가능한 LLM 런타임에 가깝습니다.
두 가지 핵심 기술이 이를 가능하게 합니다.
✔ RadixAttention
PagedAttention을 확장한 구조로,
반복되는 프롬프트를 똑똑하게 캐싱합니다.
- 캐시 히트율: 50–99%
- Chatbot Arena 기준 1.7배 빠른 첫 토큰 지연
✔ 압축 FSM 기반 구조화 디코딩
JSON/XML 등 구조화된 출력 생성에서
기존 방식 대비 3배~10배 빠른 성능을 제공합니다.
실제 벤치마크 결과는 더 압도적입니다.
- Few-shot / Agent / ToT 추론: vLLM 대비 3.5x ~ 6.4x
- DeepSeek-R1 계열 모델에서 2.3배 처리량 향상
구조화 출력·에이전트·ReAct 기반 추론을 한다면
SGLang은 현재 최고의 선택입니다.
4. 어떤 기술을 선택해야 할까? — 실전 의사결정 가이드
질문 1: 지금 필요한 것은 훈련인가, 추론인가?
- 훈련: DeepSpeed, Megatron, NeMo
- 추론: vLLM, SGLang
질문 2: 모델 규모는 어느 정도인가?
- < 10B: DeepSpeed ZeRO-2
- 10–30B: ZeRO-3 또는 Megatron TP
- 30–100B: Megatron 3D 병렬화
- 100B+ : Megatron / NeMo 필수
질문 3: 출력 형태는 어떤가?
- 범용 챗봇 → vLLM
- JSON/XML/멀티턴/에이전트 → SGLang
질문 4: 팀의 숙련도는?
- 빠른 적용 → DeepSpeed
- 정교한 통제 → Megatron
- 엔터프라이즈 환경 → NeMo
- 안정성 + 확장성 → vLLM
- 혁신적 기능 → SGLang
이 기술들은 경쟁 관계가 아니라 상호보완적입니다.
예를 들어:
- Megatron으로 사전학습
- NeMo로 RLHF
- DeepSpeed로 파인튜닝
- vLLM으로 서빙
- SGLang으로 구조화 생성
이 조합은 실제 많은 글로벌 기업이 사용하는 패턴입니다.
5. 실전 트러블슈팅 — OOM부터 최적화까지
DeepSpeed OOM 해결법
- 모델이 먼저 로드되기 때문에 초기 메모리 스파이크 발생 →
deepspeed.zero.Init() 내부에서 모델 생성 - DeepSpeed 메모리 추정치는 실제보다 50–75% 낮게 나옴 →
항상 버퍼를 남겨두기
Megatron-LM OOM 해결법
- 대부분 잘못된 TP/PP/DP 설정에서 발생
- 해결책:
- TP 증가
- 활성화 체크포인팅(selective)
- FlashAttention 활성화
NeMo CPU RAM 폭증 문제
- 데이터로더 워커 수 과다로 발생
- 해결책:
- num_workers ≤ 8
- bucketing + tarred dataset
vLLM OOM 문제
- gpu-memory-utilization 조정: 0.5~0.9 사이에서 탐색
- prompt_logprobs 활성화 시 메모리 폭증 → 비활성화 권장
- 단편화 문제 →
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
SGLang 설치 오류
- sgl-kernel 아키텍처 미스매치 →
pip install sgl-kernel --force-reinstall
🔭 2025년 생태계 동향과 미래 전망
2025년 기준 가장 중요한 흐름은 다음과 같습니다.
- FP8이 표준, FP4가 실전 적용 시작
- MoE 모델(DeepSeek V3, Mixtral 등) 완전 실전 단계
- 비디오/멀티모달 모델 급부상
- 추론 엔진 구조 혁신 가속(vLLM V1, RadixAttention)
- AMD·TPU·Gaudi·Ascend 등 하드웨어 다양성 확대
- 100만 GPU 규모의 초대형 추론 인프라 등장
2026년 이후, 모델 규모와 추론 속도는 지금보다 훨씬 더 극단적인 수준으로 갈 것입니다.
최신 코드 패턴 및 예제
이론을 실전으로 옮기는 코드 예제들을 살펴보겠습니다. 2025년 최신 API를 반영했습니다.
DeepSpeed ZeRO-3 + 오프로드 기본 설정:
{
"train_batch_size": 32,
"gradient_accumulation_steps": 2,
"fp16": {"enabled": true},
"optimizer": {
"type": "AdamW",
"params": {"lr": 3e-4, "weight_decay": 0.01}
},
"zero_optimization": {
"stage": 3,
"offload_optimizer": {"device": "cpu", "pin_memory": true},
"offload_param": {"device": "cpu", "pin_memory": true},
"overlap_comm": true,
"contiguous_gradients": true,
"reduce_bucket_size": 5e8,
"stage3_prefetch_bucket_size": 1e9
}
}
ZeRO++ 통신 최적화를 추가하려면 "zero_quantized_weights": true, "zero_hpz_partition_size": 8, "zero_quantized_gradients": true를 설정하십시오. HuggingFace Transformers와 통합은 TrainingArguments에서 deepspeed="ds_config.json"을 추가하면 됩니다.
Megatron-LM 멀티GPU 3D 병렬화 (8 GPU: TP=2, PP=2, DP=2):
torchrun --nproc_per_node=8 pretrain_gpt.py \
--tensor-model-parallel-size 2 \
--pipeline-model-parallel-size 2 \
--num-layers 24 --hidden-size 2048 \
--num-attention-heads 16 \
--micro-batch-size 2 --global-batch-size 16 \
--seq-length 2048 \
--use-distributed-optimizer \
--overlap-grad-reduce --overlap-param-gather \
--recompute-granularity selective
FP8 훈련(H100)은 --bf16 --fp8-format hybrid --fp8-amax-history-len 1024 --transformer-impl transformer_engine을 추가하십시오. 대규모 GPT-3 175B 스타일은 TP=8, PP=16, DP=8로 1024 GPU를 사용하며, --virtual-pipeline-model-parallel-size 4로 인터리브드 스케줄을 활성화합니다.
NeMo 2.0 Python 기반 훈련:
import nemo.lightning as nl
from nemo.collections import llm
if __name__ == "__main__":
# 데이터 설정
data = llm.MockDataModule(seq_length=2048, global_batch_size=16)
# 모델 설정
gpt_config = llm.GPTConfig(
num_layers=6, hidden_size=384,
ffn_hidden_size=1536, num_attention_heads=6
)
model = llm.GPTModel(gpt_config, tokenizer=data.tokenizer)
# 전략 설정
strategy = nl.MegatronStrategy(
tensor_model_parallel_size=1,
pipeline_model_parallel_size=1,
pipeline_dtype=torch.bfloat16,
)
# 트레이너
trainer = nl.Trainer(
devices=1, max_steps=100,
accelerator='gpu', strategy=strategy,
plugins=nl.MegatronMixedPrecision(precision='bf16-mixed'),
)
trainer.fit(model, data)
Llama 3 LoRA 파인튜닝은 llm.llama3_8b.finetune_recipe()로 레시피를 생성하고, recipe.trainer.max_steps, recipe.trainer.strategy.context_parallel_size 등을 조정합니다. NeMo-Run으로 run.run(recipe, executor=run.LocalExecutor())를 실행합니다.
vLLM V1 엔진 서버 시작:
export VLLM_USE_V1=1
pip install vllm --upgrade
# 기본 서버
vllm serve meta-llama/Llama-3.1-8B-Instruct
# 프로덕션 설정
vllm serve meta-llama/Llama-3.1-70B-Instruct \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.95 \
--max-model-len 8192 \
--dtype auto \
--api-key your-secret-key \
--served-model-name llama-70b
Python 오프라인 추론은 LLM(model="meta-llama/Llama-3.1-8B-Instruct", gpu_memory_utilization=0.9)로 초기화하고, llm.generate(prompts, sampling_params)로 배치 생성합니다. OpenAI 클라이언트는 base_url를 설정합니다.
SGLang 최적화 서버:
# DeepSeek 최적화
python3 -m sglang.launch_server \
--model-path deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--enable-dp-attention --enable-flashinfer-mla \
--trust-remote-code --tp 4
# 멀티GPU
python3 -m sglang.launch_server \
--model-path meta-llama/Llama-3.1-70B-Instruct \
--tp 8
네이티브 SGLang API로 멀티턴 대화:
import sglang as sgl
@sgl.function
def multi_turn(s, q1, q2):
s += sgl.user(q1)
s += sgl.assistant(sgl.gen("a1", max_tokens=256))
s += sgl.user(q2)
s += sgl.assistant(sgl.gen("a2", max_tokens=256))
state = multi_turn.run(
q1="프랑스 수도는?",
q2="인구는 얼마나 되나요?"
)
JSON 스키마 생성은 sgl.gen("char", regex=schema)로 정규식 제약을 설정합니다. 비전-언어 모델은 sgl.image(img_path)로 이미지를 포함합니다.
따라서 아래의 시퀀스를 추천합니다.
(1) 작은 배치로 시작해 점진적으로 증가
(2) 혼합 정밀도(BF16/FP16) 기본 활성화
(3) 활성화 체크포인팅으로 메모리 절약
(4) 통신 오버랩 활성화(overlap_comm, --overlap-grad-reduce)
(5) 빈번한 체크포인트 저장
(6) 단일 GPU에서 먼저 테스트
(7) nvidia-smi dmon -s mu로 GPU 메모리 모니터링
(8) 프로덕션 전 체크포인트 저장/로드 검증
마지막 정리 — 효율적 선택을 위한 최종 체크리스트
1. 훈련인가? → DeepSpeed / Megatron / NeMo
2. 추론인가? → vLLM / SGLang
3. 출력 형태가 복잡한가? → SGLang
4. 대규모 멀티노드인가? → Megatron
5. 단일 GPU/저예산인가? → DeepSpeed
6. 엔터프라이즈 파이프라인을 원하나? → NeMo
7. 단순 챗봇 또는 범용 API? → vLLM
결론은 명확합니다.
이 다섯 기술을 이해하는 순간, 초거대 모델은 더 이상 거대 기업만의 전유물이 아닙니다.
올바른 도구 선택이 곧 생산성입니다.
이 글이 2025년의 복잡한 AI 인프라 환경에서
여러분의 전략적 기술 선택에 도움이 되길 바랍니다.
'머신러닝 & 딥러닝 > LLM' 카테고리의 다른 글
| LangGraph + PostgreSQL 설계 핵심 주의사항 (0) | 2026.01.21 |
|---|---|
| AI Engineer로서 Vibe Coding을 접근하는 방법 (1) | 2025.12.31 |
| PaddleOCR-VL 분석 (1) | 2025.10.25 |
| NVIDIA Dynamo - LLM 서빙 최적화 플랫폼 (0) | 2025.08.21 |
| 게임 마케팅을 위한 AI 분석 시스템 MVP 구축기 (2) | 2025.08.16 |