최적화 레벨
최적화 레벨 (Optimization Levels)
vLLM에는 시작 시간과 성능을 맞바꿀 수 있는 4가지 최적화 레벨(-O0, -O1, -O2, -O3)이 있어요. 개발 단계에서는 빨리 켜는 게 좋고, 운영 환경에서는 성능이 더 중요하죠. 이 레벨 하나로 컴파일·퓨전·cudagraph 동작을 통째로 조정할 수 있어요.
-O0: 최적화 없음. 시작이 가장 빠르지만 성능은 가장 낮아요.-O1: 빠른 최적화. 단순 컴파일과 빠른 퓨전, PIECEWISE cudagraph를 써요.-O2: 기본 최적화. 컴파일 범위와 퓨전을 추가하고 FULL_AND_PIECEWISE cudagraph를 사용해요.-O3: 공격적 최적화. 지금은-O2와 같지만, 앞으로 시간이 오래 걸리거나 실험적인 최적화가 추가될 수 있어요.
모든 최적화 레벨 기본값은 내부 플래그를 직접 설정해서 똑같이 만들 수 있어요. 사용자가 직접 설정한 플래그가 최적화 레벨 기본값보다 우선해요.
레벨 요약과 사용 예시
# CLI usage
vllm serve RedHatAI/Llama-3.2-1B-FP8 -O1
# Python API usage
from vllm.entrypoints.llm import LLM
llm = LLM(
model="RedHatAI/Llama-3.2-1B-FP8",
optimization_level=2 # equivalent to -O2
)
-O0: 최적화 없음
가능한 한 빨리 시작하는 레벨이에요. 오토튜닝, 컴파일, cudagraph 모두 없어요. 개발 초기 단계나 디버깅에 좋아요.
설정:
-cc.cudagraph_mode=NONE-cc.mode=NONE(-cc.custom_ops=["none"]도 함께 적용)-cc.pass_config.fuse_...=False(모든 퓨전 비활성)--kernel-config.enable_flashinfer_autotune=False
-O1: 빠른 최적화
빠른 시작을 우선하되 컴파일과 cudagraph 같은 기본 최적화는 유지해요. 코드가 cudagraph나 컴파일을 깨지 않는지 확인하면서 시작 속도를 원하는 대부분의 개발 시나리오에 좋은 균형이에요.
설정:
-cc.cudagraph_mode=PIECEWISE-cc.mode=VLLM_COMPILE--kernel-config.enable_flashinfer_autotune=True
퓨전:
-cc.pass_config.fuse_norm_quant=True*-cc.pass_config.fuse_act_quant=True*-cc.pass_config.fuse_act_padding=True†-cc.pass_config.fuse_mla_dual_rms_norm=True†
* 두 연산 중 하나라도 커스텀 커널을 쓰면 이 퓨전이 켜지고, 아니면 Inductor 퓨전이 더 좋아요. † ROCm 전용이고 AITER가 필요해요.
-O2: 전체 최적화 (기본)
시작 시간을 희생하더라도 성능을 우선해요. 프로덕션 워크로드에 권장되기 때문에 기본값이에요. 이 레벨의 퓨전은 컴파일 범위가 추가돼 더 오래 걸릴 수 있어요.
설정 (-O1에 더해):
-cc.cudagraph_mode=FULL_AND_PIECEWISE-cc.pass_config.fuse_allreduce_rms=True-cc.pass_config.fuse_rope_kvcache=True†
† ROCm 전용이고 AITER가 필요해요.
-O3: 공격적 최적화
현재는 -O2와 같지만, 앞으로 시간이 더 걸리거나 실험적인 최적화가 추가될 수 있어요.
문제 해결
흔한 이슈
- 시작 시간이 너무 길다 —
-O0이나-O1을 써서 시작을 빠르게 - 컴파일 오류 — 추가 디버깅 정보를 위해
debug_dump_path사용 - 성능 이슈 — 프로덕션이면
-O2사용 확인
더 알아보기 (Learn more)
- vLLM 공식 문서: Optimization Levels
- 관련 문서: torch.compile 통합, CUDA Graphs