본문으로 건너뛰기

[llm-compressor] 프로젝트 전체 아키텍처 분석 - 개요 및 목차

llm-compressor란

llm-compressor는 vLLM 프로젝트에서 관리하는 LLM 후훈련 압축(Post-Training Compression) 프레임워크이다. HuggingFace transformers 모델을 입력으로 받아, 양자화(Quantization), 가지치기(Pruning), 변환(Transform) 등 다양한 알고리즘을 "레시피(Recipe)" 기반으로 조합해 적용한 뒤, compressed-tensors 포맷의 체크포인트로 저장한다. 저장된 체크포인트는 vLLM이나 SGLang 같은 추론 엔진에서 그대로 로딩해 가속 추론에 활용할 수 있다.

llm-compressor의 설계 철학은 다음 세 가지로 요약할 수 있다.

  1. 알고리즘을 Modifier라는 단위로 추상화한다. GPTQ, AWQ, SmoothQuant, SparseGPT, Wanda, AutoRound, QuIP, SpinQuant 등 서로 다른 논문 구현이 동일한 Modifier 인터페이스를 구현한다.
  2. Recipe라는 선언적 DSL로 Modifier를 조합한다. YAML 또는 Python 리스트 형태로 "어느 레이어에 어떤 Modifier를 어느 순서로 적용할지"를 기술한다.
  3. Pipeline이 실제 실행 방식을 결정한다. 데이터가 필요 없는(data_free) 레시피는 한 번에, 캘리브레이션 데이터가 필요한 레시피는 레이어를 순차적으로 돌면서(sequential) 실행된다.

이 시리즈는 llm-compressor의 전체 아키텍처를 11개 계층으로 분해하고, 논문 구현 8편을 포함한 45개의 포스트로 코드를 분석한다. vLLM과 SGLang 시리즈가 "추론" 관점에서 LLM 서빙을 해부했다면, 이 시리즈는 "모델 준비" 관점에서 LLM 압축 파이프라인을 해부한다.

전체 아키텍처

 ┌──────────────────────────────────────────────────────────────────────────┐
 │  HuggingFace Model + Calibration Dataset (옵션)                          │
 └────────────────────────────────┬─────────────────────────────────────────┘
                                  │
                                  ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │  1. Entrypoints                         src/llmcompressor/entrypoints/  │
 │     oneshot() / model_free                                               │
 └────────────────────────────────┬─────────────────────────────────────────┘
                                  │
                                  ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │  2. Args & Recipe DSL                   src/llmcompressor/{args,recipe}/ │
 │     ModelArguments / DatasetArguments / RecipeArguments / Recipe YAML    │
 └────────────────────────────────┬─────────────────────────────────────────┘
                                  │
                                  ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │  3. Core / Session                      src/llmcompressor/core/         │
 │     CompressionSession ─→ Lifecycle ─→ State ─→ EventBroadcaster        │
 └────────────────────────────────┬─────────────────────────────────────────┘
                                  │
                                  ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │  4. Pipelines                           src/llmcompressor/pipelines/    │
 │     registry → basic / sequential / data_free / independent             │
 │                              │                                           │
 │                              ▼                                           │
 │  5. Modifiers                           src/llmcompressor/modifiers/    │
 │     ┌──────────────────┬─────────────┬─────────────────┐                │
 │     │ Quantization     │ Pruning     │ Transform       │                │
 │     │ (GPTQ/AWQ/SQ/AR) │ (SGPT/Wanda)│ (QuIP/Spin/iMat)│                │
 │     └─────────┬────────┴──────┬──────┴────────┬────────┘                │
 │               │               │               │                         │
 │               ▼               ▼               ▼                         │
 │  6. Observers                            src/llmcompressor/observers/   │
 │     min_max / mse / moving_base / imatrix                                │
 └────────────────────────────────┬─────────────────────────────────────────┘
                                  │
                                  ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │  7. Modeling Overrides                  src/llmcompressor/modeling/     │
 │     DeepSeek-V3 / Llama4 / Qwen3-MoE / GPT-OSS / Gemma4 등              │
 └────────────────────────────────┬─────────────────────────────────────────┘
                                  │
                                  ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │  8. Transformers Integration            src/llmcompressor/transformers/ │
 │     tracing / compression save / data loaders (c4, wikitext, ...)       │
 └────────────────────────────────┬─────────────────────────────────────────┘
                                  │
                                  ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │  Compressed checkpoint → vLLM / SGLang 로딩 → 가속 추론                 │
 └──────────────────────────────────────────────────────────────────────────┘

왼쪽 경로는 "선언" 영역, 가운데 경로는 "실행" 영역, 오른쪽 끝은 "출력" 영역이다. vLLM/SGLang 시리즈와 달리 llm-compressor는 한 번 실행되고 끝나는 오프라인 파이프라인이므로, 모든 계층이 oneshot() 한 번의 호출 안에서 한 방향으로 흐른다.

시리즈 목차

1. Entrypoints (진입점)

2. Args & Recipe DSL (선언 계층)

  • Args Dataclasses — ModelArguments / DatasetArguments / RecipeArguments
  • Recipe DSL — YAML/Python 레시피 파싱과 Modifier 조합
  • Recipe Metadata — 레시피 해시, 버전 관리, 상태 직렬화

3. Core / Session (실행 엔진)

4. Pipelines (실행 파이프라인)

5. Modifier 프레임워크

6. Quantization Modifiers

7. Pruning Modifiers

8. Transform Modifiers

9. Observers

10. HuggingFace Integration

11. 부록

핵심 데이터 흐름

llm-compressor의 데이터 흐름은 Recipe → Modifier 리스트 → Pipeline 실행 → Observer 수집 → 체크포인트 저장의 단방향이다.

 Recipe (YAML/Python)
      │
      ▼
 RecipeArguments → Modifier 인스턴스 리스트
      │
      ▼
 CompressionSession.initialize()
      │  ├─ State 준비 (model, calibration_data)
      │  └─ Lifecycle(Modifier 목록).initialize() → on_initialize 훅
      ▼
 Pipeline.run()
      │  ├─ [basic]      한 번의 forward로 모든 Modifier 데이터 수집
      │  ├─ [sequential] 레이어 단위로 forward → GPTQ/SparseGPT 호출 → 다음 레이어
      │  └─ [data_free]  forward 없이 Modifier의 변환만 적용
      ▼
 Lifecycle.finalize() → Modifier.on_finalize() → 가중치 최종화
      │
      ▼
 compressed-tensors 체크포인트 저장
단계 데이터 구조 위치
입력 ModelArguments, DatasetArguments, RecipeArguments src/llmcompressor/args/
레시피 Recipe src/llmcompressor/recipe/recipe.py
세션 CompressionSession, State src/llmcompressor/core/
실행 단위 Modifier src/llmcompressor/modifiers/modifier.py
실행 정책 Pipeline + registry src/llmcompressor/pipelines/
관측 Observer src/llmcompressor/observers/
출력 compressed-tensors src/llmcompressor/transformers/compression/

이 시리즈의 읽는 순서 제안

  1. 처음 접한다면: OneshotRecipe DSLCompressionSession 순서로 읽어 "한 번의 호출이 어떻게 흘러가는지" 감을 잡는다.
  2. 양자화 알고리즘이 궁금하다면: Quantization BaseGPTQ / AWQ / SmoothQuant 순서로 각 논문 구현을 비교한다.
  3. 왜 GPTQ는 sequential pipeline만 쓰는지 궁금하다면: Sequential PipelineIntermediates CacheGPTQ 순서로 읽는다.
  4. 가지치기 알고리즘에 관심이 있다면: Pruning OverviewSparseGPTWanda 순서로 읽는다.
  5. 2비트 양자화에 관심이 있다면: Transform OverviewQuIPSpinQuant 순서로 읽는다.

참고 자료

댓글

관련 포스트

llm-compressor 의 다른글