성능 최적화

성능 최적화 (Performance Optimization)

이 페이지는 지연 시간, 처리량, 메모리, 품질 트레이드오프에 따라 SGLang Diffusion의 성능 레버를 선택하는 방법을 설명해요. SGLang Diffusion 성능 작업의 시작점으로, 출력 보존(lossless 스타일) 레버와 품질 트레이드오프(손실/근사) 레버의 두 결정 클래스로 나눠요.

출처: 문서

본문

이 페이지는 SGLang Diffusion 성능 작업의 시작점으로 사용해요. 성능 레버를 두 가지 결정 클래스로 분리해요:

  • 출력 보존 / lossless 스타일: 상주(residency), 병렬 처리, 커널 또는 스케줄링을 변경하는 동안 모델 동작을 보존해야 하는 시스템 설정.
  • 품질 트레이드오프 / 손실 또는 근사: 디노이징 경로, 수치 표현 또는 생성 출력을 바꿀 수 있는 기법.

문서는 비트 정확한 "lossless"를 약속하는 대신 "출력 보존"을 사용해요. 서로 다른 커널, GPU 유형 또는 정밀도 경로가 여전히 작은 수치 차이를 만들어낼 수 있기 때문이에요. 결정 경계는 최적화가 속도를 위해 의도적으로 품질 또는 출력 동등성을 거래하는지 여부예요.

여기서 시작 (Start Here)

  1. Deployment and Performance Modes에서 서빙 또는 생성 모드를 선택해요. --performance-mode auto가 기본이고, 모델이 GPU 메모리에 맞고 지연 시간이 가장 중요할 때 speed, GPU 메모리가 병목일 때 memory, 모든 성능 플래그가 명시적이어야 할 때 manual을 사용해요.
  2. Attention Backends에서 올바른 어텐션 백엔드를 선택해요.
  3. 모델과 비디오 형태가 시퀀스 분할을 활용할 때만 Sequence Parallelism을 사용해요.
  4. 서빙 중 동시 호환 요청에는 Inference Batching을 사용해요.
  5. 여러 레버를 한 번에 바꾸기 전에 Profiling을 사용해요.

요청 품질 등급 선택 (Choose a request quality tier)

--quality는 누적적이에요. 더 넓은 등급은 더 엄격한 등급의 최적화를 절대 버리지 않아요.

Tier Optimization boundary
lossless (기본값) 선택된 배포의 참조 실행 + 모든 무조건적 비트 정확 대체
extra-high lossless의 모든 것 + 요청 게이팅된 DiT/VAE 커널 융합만; 등급 자체로는 sparse, caching 또는 다른 근사 경로를 활성화하지 않음
high extra-high의 모든 것 + 감사된 Cache-DiT 정책이나 저정밀 VAE 디코드 같은 모델 소유 고품질 전용 경로

융합 이득을 근사 가속화로부터 격리하고 싶을 때 extra-high를 사용해요. 활성 모델에 적격 경로가 없으면 등급이 no-op일 수 있어요. 별도로 구성된 양자화, 어텐션 또는 캐싱 옵션은 여전히 적용돼요. 현재 요청 게이팅 패밀리와 수치 계약은 Fused Kernels를 참고해요.

출력 보존 / Lossless 스타일 레버 (Output-Preserving / Lossless-Style Levers)

이 설정들은 상주, 병렬 처리, 커널 또는 스케줄링을 변경하면서 모델 동작을 보존해야 해요. 프로덕션 튜닝의 첫 선택이에요.

Lever Use when Docs
--performance-mode 명시적 플래그를 재정의하지 않고 속도 또는 메모리용 안전 프리셋을 원함 Deployment and Performance Modes
Breakable CUDA graph 지원되는 파이프라인이 고정된 형태 집합을 서빙하고 eager 실행이 실행-바운드 CLI reference
Offload, FSDP, CFG parallelism GPU 메모리, 다중 GPU 상주 또는 CFG 브랜치 분할이 주요 병목 Deployment and Performance Modes
Sequence parallelism 긴 이미지/비디오 시퀀스가 시퀀스 수준 병렬 처리를 필요로 함 Sequence Parallelism
--encoder-parallel 텍스트/이미지 인코딩이 요청의 눈에 보이는 비중이고 그동안 DiT 복제본이 유휴 Encoder Parallelism
Attention backend 커널 선택이 DiT 지연 시간이나 메모리를 지배 Attention Backends
Fused kernels 어떤 elementwise 체인이 이미 융합됐는지 알거나 요청 게이팅 집합에 옵트인하려 함 Fused Kernels
Dynamic batching 많은 호환 요청을 동시 서빙 Inference Batching

품질 트레이드오프 / 손실 또는 근사 레버 (Quality-Tradeoff / Lossy Or Approximate Levers)

이 기법들은 디노이징 경로, 수치 표현 또는 생성 출력을 바꿀 수 있어요. 기준선과 품질 수용 기준이 생긴 후에 유용해요.

Lever Tradeoff Docs
Cache-DiT 캐시 결정에 따라 선택된 DiT 블록 또는 스텝 계산을 건너뜀 Cache-DiT
TeaCache 연속 디노이징 스텝이 충분히 유사할 때 잔차 재사용 TeaCache
Progressive resolution 지원 파이프라인에서 초기 디노이징을 더 낮은 잠재 해상도로 실행 Progressive Resolution Generation
Quantization 저정밀 트랜스포머 가중치 또는 활성화 사용 Quantization

실용적인 순서 (Practical Order)

  1. 대상 모델, 해상도, 프레임 수, 스텝 수, GPU 유형으로 기준선 수립.
  2. --performance-mode와 명시적 상주 또는 병렬 처리 플래그 선택.
  3. quality=losslessquality=extra-high를 비교해 요청 게이팅 융합 집합을 격리.
  4. 지원되는 고정 형태 파이프라인에서 breakable CUDA graph를 eager 실행과 비교. 모든 서빙 해상도를 --warmup-resolutions에 전달하고 서버 로그에서 캡처를 확인. 요청 게이팅 DiT 융합이 있는 모델은 그 융합을 lossless 브랜치에서 캡처된 그래프와 결합할 수 없음.
  5. 배포 패턴에 맞춰 어텐션 백엔드와 배칭 튜닝.
  6. 병목이 불명확하면 프로파일링.
  7. 품질 트레이드오프 레버는 출력 품질을 수용 대상과 비교한 후에만 추가.

모델별 튜닝 시작점 (Per-model tuning starting points)

워밍업과 breakable CUDA graph(BCG)는 서로 다른 문제를 해결해요. --warmup-mode request는 첫 요청에서 파생된 워밍업 복사본을 실행해 일회성 컴파일과 캐시를 준비하며, 각 디노이징 스텝의 반복 Python 실행을 제거하지 않아요. BCG는 지원되는 DiT 세그먼트를 캡처하고 캡처된 형태의 반복 실행 오버헤드를 줄일 수 있어요. 아래 표를 첫 실험으로 사용하고, 프로파일링이 레버가 활성 병목을 다룬다고 확인할 때만 유지해요.

관측된 병목 또는 제약 예시 모델 첫 실험 확인할 것
형태의 첫 실행이 상당한 컴파일 또는 캐시 설정을 지불 ERNIE-Image-Turbo, GLM-Image, FastWan / TurboWan family, FLUX.2-klein-4B, LingBot-World, LongLive, Cosmos3, SANA, LongCat-Image-Edit-Turbo --warmup-mode requestoff 비교 워밍업 시간, 첫 실제 요청 지연 시간, 워밍업된 정상 상태 지연 시간 분리. 요청 기반 워밍업은 주로 벤치마크 보조이며 첫 실제 요청 완료 전에 여전히 시간을 소비.
지원되는 고정 형태 파이프라인이 GPU 커널 사이의 반복 호스트 실행 간격을 보임 GLM-Image, Z-Image-Turbo, Qwen-Image-2512, Ideogram-4, LongCat-Image, LTX-2 / LTX-2.3, SANA-1.5 1.6B, JoyEcho eager 실행과 --enable-breakable-cuda-graph 비교 서버 로그에서 그래프 캡처와 재생 확인 후 정상 상태 지연 시간과 GPU 메모리 비교. 추가 프로덕션 형태를 --warmup-resolutions로 전달. 없으면 BCG는 모델의 기본 워밍업 해상도만 캡처.
두 DiT 단계가 상주하는 동안 모델이 맞지 않음 Wan2.2-T2V-A14B, Wan2.2-I2V-A14B, LingBot-Video-MoE --dit-layerwise-offload로 시작 먼저 피크 GPU 메모리 검증 후 전송 오버헤드 측정. 첫 실행 컴파일도 실질적이면 워밍업을 별도로 추가.
동적 마스크, 메타데이터 또는 이미지 조건이 그래프 재생을 비효율적으로 만듦 Qwen-Image-Edit family, FireRed-Image-Edit eager 실행을 기준선으로 유지 BCG 전에 프로파일링. 동적 스텝별 호스트 작업이 그래프 재생 절감보다 클 수 있고 지원되지 않는 파이프라인은 eager로 폴백.
커널 또는 집합 연산이 이미 다단계 워크로드를 지배 Qwen-Image, FLUX.1-dev, FLUX.2-dev, LTX-2, Wan2.1 14B, HunyuanVideo, MOVA 기준선 워밍업 후 다른 레버 활성화 전 프로파일링 작은 호스트 간격이 BCG의 이득을 제한. 트레이스에 따라 커널, 어텐션, 병렬 처리 또는 상주 우선 순위.
일회성 또는 매우 적은 스텝 워크로드가 워밍업을 상각할 수 없음 FastVideo-FastH3 (4-step) --warmup-mode off로 시작 워밍업 포함 end-to-end 지연 시간 비교. 콜드 스타트 설정을 측정 요청에서 의도적으로 분리할 때만 요청 워밍업 사용.

예시 할당은 단일 GPU NVIDIA B300/GB300 프로파일에서 나온 방향성이며 완전한 호환성 목록이 아니에요. 해상도, 프레임 수, 스텝 수, 병렬 처리 또는 GPU 유형이 바뀌면 모델이 여러 행과 일치할 수 있어요. 모델 이름보다 측정된 병목이 우선해요.

BCG는 런타임 지원 검사가 수용하는 모델 및 파이프라인 구성에 대해서만 활성화돼요. 기본 워밍업 형태를 자동으로 캡처해요. 추가 서빙 해상도에는 --warmup-resolutions을, 비디오와 가변 프롬프트 길이에는 --warmup-num-frames--bcg-text-buckets를 설정해 의도된 워크로드를 덮어요. 캡처된 시그니처와 일치하지 않는 요청은 eager 실행으로 폴백해요.

워밍업과 BCG는 속도를 위해 의도적으로 출력 품질을 거래하지 않지만, 이는 바이트 동일 출력의 보장이 아니에요. 서로 다른 실행 경로가 수치 차이를 만들 수 있고 일부 파이프라인은 합성 워밍업 요청이 사용하는 스케줄러 또는 스케줄을 커스터마이즈해요. 프로덕션 배포 전에 비트 단위 안정성이 필요하면 출력 해시를 비교하고, 그렇지 않으면 프로젝트의 품질 수용 검사를 실행해요.

성능 결과는 구성에 따라 달라져요. 정확한 체크포인트 리비전, GPU, 정밀도, 해상도, 프레임 수, 스텝 수, 병렬 처리, 명령줄, 측정에 워밍업 포함 여부를 기록해요. 다른 모델이나 형태에서 백분율을 옮기지 말고 대상 워크로드에서 Profiling으로 다시 프로파일해요.

진단 (Diagnostics)

Profiling은 그 자체로 최적화 기법이 아니에요. 여러 레버를 바꾸기 전에 어떤 단계, 커널 또는 디노이징 스텝을 최적화할 가치가 있는지 알려주므로 성능 워크플로우에 속해요.

참고 자료 (References)

더 알아보기