Cache-DiT 가속화
Cache-DiT 가속화 (Cache-DiT Acceleration)
이 페이지는 확산 추론용 Cache-DiT 가속화를 구성하는 방법을 설명해요. SGLang은 Diffusion Transformer(DiT)용 캐싱 가속화 엔진인 Cache-DiT를 통합해, 품질 저하를 최소화하며 최대 1.69배 추론 속도 향상을 달성해요.
출처: 문서
본문
SGLang은 Diffusion Transformer(DiT)용 캐싱 가속화 엔진인 Cache-DiT를 통합해, 품질 저하를 최소화하며 최대 1.69배 추론 속도 향상을 달성해요.
개요 (Overview)
Cache-DiT는 지능형 캐싱 전략으로 디노이징 루프의 중복 연산을 건너뛰어요:
- DBCache (Dual Block Cache): 잔차 차이(residual differences)를 기반으로 transformer 블록을 캐시할 때를 동적으로 결정
- TaylorSeer: 테일러 전개(Taylor expansion)로 보정(calibration)해 캐싱 결정을 최적화
- DMD Calibrator: 지수 기반(exponential-basis) 예측 보정기(Dynamic Mode Decomposition. Distribution Matching Distillation 아님). TaylorSeer의 다항 기반을 위한 drop-in 대안이며, flow-matching 모델에서 가장 강력함
- SCM (Step Computation Masking): 추가 속도 향상을 위한 스텝 수준 캐싱 제어
Cache-DiT는 또한 SVDQuant W4A4(int4 / NVFP4) 동적 양자화를 제공하며, DBCache 캐싱과 결합할 수 있어요(아래 Quantization 참고).
기본 사용법 (Basic Usage)
Cache-DiT는 요청별(request) 스위치예요. 각 요청은 캐시 실행 또는 무손실(lossless) 실행 여부를 결정하며, Cache-DiT 설정이 다른 요청은 절대 배치를 공유하지 않아요. SGLANG_CACHE_DIT_* 환경 변수는 스위치를 설정하지 않은 요청을 위한 서버 전역 기본값으로 계속 사용할 수 있어요.
단일 생성에 대해 활성화:
sglang generate --model-path Qwen/Qwen-Image \
--prompt "A beautiful sunset over the mountains" \
--enable-cache-dit true
또는 실행 중인 서버에 요청별로, OpenAI 호환 API로:
client.images.generate(
model="Qwen/Qwen-Image",
prompt="A beautiful sunset over the mountains",
extra_body={
"enable_cache_dit": True,
# optional knob overrides for this request only
"cache_dit_params": {"residual_diff_threshold": 0.12, "scm_preset": "fast"},
},
)
enable_cache_dit는 세 가지 상태를 받아요: true(이 요청에 대해 켜짐), false(이 요청에 대해 꺼짐, 서버 기본값보다 우선), 미설정(SGLANG_CACHE_DIT_ENABLED 서버 기본값 따름). cache_dit_params는 DBCache 노브(Fn_compute_blocks, Bn_compute_blocks, max_warmup_steps, residual_diff_threshold, max_continuous_cached_steps, enable_taylorseer, taylorseer_order), DMD 노브(enable_dmd, dmd_history, dmd_rank, dmd_ridge, dmd_svd_precision. DMD와 TaylorSeer는 상호 배타적 보정기이며 함께 활성화할 수 없음), SCM 노브(scm_preset, scm_compute_bins, scm_cache_bins, scm_policy)를 받으며, 이중 DiT 모델의 두 번째 트랜스포머용 DBCache 노브를 가진 중첩 secondary 딕셔너리도 받아요(미설정 secondary 키는 요청의 기본값을 상속하고, 그다음 SGLANG_CACHE_DIT_SECONDARY_* 기본값을 상속).
Cache-DiT를 모든 요청의 기본값으로 만드려면 실행 시 환경 변수를 내보내요:
SGLANG_CACHE_DIT_ENABLED=true \
sglang serve --model-path Qwen/Qwen-Image
Diffusers 백엔드 (Diffusers Backend)
Cache-DiT는 커스텀 YAML 파일에서 가속화 구성 로드를 지원해요. diffusers 파이프라인(diffusers 백엔드)의 경우 YAML/JSON 경로를 --cache-dit-config로 전달해요. 이 흐름은 cache-dit >= 1.2.0(cache_dit.load_configs)이 필요해요.
단일 GPU 추론 (Single GPU inference)
다음을 포함하는 cache.yaml 파일을 정의해요:
- DBCache + TaylorSeer
cache_config:
max_warmup_steps: 8
warmup_interval: 2
max_cached_steps: -1
max_continuous_cached_steps: 2
Fn_compute_blocks: 1
Bn_compute_blocks: 0
residual_diff_threshold: 0.12
enable_taylorseer: true
taylorseer_order: 1
구성을 적용하려면:
sglang generate \
--backend diffusers \
--model-path Qwen/Qwen-Image \
--cache-dit-config cache.yaml \
--prompt "A beautiful sunset over the mountains"
- DBCache + TaylorSeer + SCM (Step Computation Mask)
cache_config:
max_warmup_steps: 8
warmup_interval: 2
max_cached_steps: -1
max_continuous_cached_steps: 2
Fn_compute_blocks: 1
Bn_compute_blocks: 0
residual_diff_threshold: 0.12
enable_taylorseer: true
taylorseer_order: 1
# Must set the num_inference_steps for SCM. The SCM will automatically
# generate the steps computation mask based on the num_inference_steps.
# Reference: https://cache-dit.readthedocs.io/en/latest/user_guide/CACHE_API/#scm-steps-computation-masking
num_inference_steps: 28
steps_computation_mask: fast
- DBCache + TaylorSeer + SCM (Step Computation Mask) + Cache CFG
cache_config:
max_warmup_steps: 8
warmup_interval: 2
max_cached_steps: -1
max_continuous_cached_steps: 2
Fn_compute_blocks: 1
Bn_compute_blocks: 0
residual_diff_threshold: 0.12
enable_taylorseer: true
taylorseer_order: 1
num_inference_steps: 28
steps_computation_mask: fast
enable_sperate_cfg: true # e.g, Qwen-Image, Wan, Chroma, Ovis-Image, etc.
- DBCache + DMD Calibrator
TaylorSeer 대신 DMD 보정기를 사용할 수 있어요. 이는 TaylorSeer의 다항 기반을 위한 drop-in 대안인 지수 기반(exponential-basis) 예측 보정기예요. DMD는 캐시된 피처 스트림을 선형 동적 시스템(Y_{t+1} ~= A @ Y_t)으로 모델링하고, 적합된 고유 모드(eigen-modes)에서 캐시된 피처를 예측하며, 다항 외삽이 발산하는 더 긴 캐시 스킵에서도 정확하게 유지돼요. 여기서 DMD는 Dynamic Mode Decomposition(Schmid 2010)을 뜻하며 Distribution Matching Distillation이 아니에요. DMD는 flow-matching 모델(예: FLUX)에서 가장 잘 동작하고, TaylorSeer는 DDPM 스타일 모델에서 종종 더 좋아요 — 둘 다 시도해 보세요. DMD와 TaylorSeer는 상호 배타적이며 enable_dmd / enable_taylorseer 중 하나만 활성화해요:
cache_config:
max_warmup_steps: 8
warmup_interval: 2
max_cached_steps: -1
max_continuous_cached_steps: 2
Fn_compute_blocks: 1
Bn_compute_blocks: 0 # Bn=0 since the DMD calibrator replaces the Bn calibrator
residual_diff_threshold: 0.12
enable_dmd: true
dmd_history: 6 # snapshot window length, 5-6 typical
dmd_svd_precision: "medium" # "low", "medium" or "high"
dmd_history 창 5~6 스냅샷이 일반적으로 이상적이에요 — 피처 동역학이 타임스텝을 따라 드리프트하므로 더 긴 히스토리가 항상 도움이 되진 않아요. 균일하게 간격을 둔 4개 미만의 스냅샷만 있을 때 DMD는 내부에서 유지하는 테일러 전개로 투명하게 폴백해요. 수학적 원리와 정량적 비교는 Cache-DiT DMD documentation을 참고해요. 바로 사용할 수 있는 구성은 Cache-DiT 저장소의 examples/configs/cache_dmd.yaml에 있어요. 동일한 --cache-dit-config 플래그로 적용해요:
sglang generate \
--backend diffusers \
--model-path Qwen/Qwen-Image \
--cache-dit-config cache_dmd.yaml \
--prompt "A beautiful sunset over the mountains"
분산 추론 (Distributed inference)
- 1D 병렬 처리
다음을 포함하는 병렬 처리 전용 구성 yaml parallel.yaml 파일을 정의해요:
parallelism_config:
ulysses_size: auto
attention_backend: native
그런 다음 yaml에서 분산 추론 가속화 구성을 적용해요. ulysses_size: auto는 cache-dit이 world_size를 ulysses_size로 자동 감지한다는 뜻이에요. 그렇지 않으면 특정 정수(예: 4)로 수동 설정해야 해요.
분산 구성 적용(참고: 분산 추론용 GPU 수를 지정하려면 --num-gpus N을 추가하세요):
sglang generate \
--backend diffusers \
--num-gpus 4 \
--model-path Qwen/Qwen-Image \
--cache-dit-config parallel.yaml \
--prompt "A futuristic cityscape at sunset"
- 2D 병렬 처리
다음을 포함하는 2D 병렬 처리 구성 yaml parallel_2d.yaml 파일도 정의할 수 있어요:
parallelism_config:
ulysses_size: auto
tp_size: 2
attention_backend: native
그런 다음 yaml에서 2D 병렬 처리 구성을 적용해요. 여기서 tp_size: 2는 크기 2의 tensor parallelism을 사용한다는 뜻이에요. ulysses_size: auto는 cache-dit이 world_size // tp_size를 ulysses_size로 자동 감지한다는 뜻이에요.
- 3D 병렬 처리
다음을 포함하는 3D 병렬 처리 구성 yaml parallel_3d.yaml 파일도 정의할 수 있어요:
parallelism_config:
ulysses_size: 2
ring_size: 2
tp_size: 2
attention_backend: native
그런 다음 yaml에서 3D 병렬 처리 구성을 적용해요. 여기서 ulysses_size: 2, ring_size: 2, tp_size: 2는 크기 2의 ulysses, 크기 2의 ring, 크기 2의 tensor parallelism을 사용한다는 뜻이에요.
- Ulysses Anything Attention
Ulysses Anything Attention을 활성화하려면 다음을 포함하는 병렬 처리 구성 yaml parallel_uaa.yaml 파일을 정의할 수 있어요:
parallelism_config:
ulysses_size: auto
attention_backend: native
ulysses_anything: true
- Ulysses FP8 통신
NVLink를 지원하지 않는 디바이스의 경우 Ulysses FP8 통신을 활성화해 통신 오버헤드를 더 줄일 수 있어요. 다음을 포함하는 병렬 처리 구성 yaml parallel_fp8.yaml 파일을 정의할 수 있어요:
parallelism_config:
ulysses_size: auto
attention_backend: native
ulysses_float8: true
- 비동기 Ulysses CP
통신과 계산을 겹치도록 비동기 ulysses CP를 활성화할 수도 있어요. 다음을 포함하는 병렬 처리 구성 yaml parallel_async.yaml 파일을 정의해요:
parallelism_config:
ulysses_size: auto
attention_backend: native
ulysses_async: true # Now, only support for FLUX.1, Qwen-Image, Ovis-Image and Z-Image.
그런 다음 yaml에서 구성을 적용해요. 여기서 ulysses_async: true는 비동기 ulysses CP 활성화를 뜻해요.
- TE-P 및 VAE-P
yaml 구성에서 추가 병렬 모듈을 지정할 수도 있어요. 예를 들어 다음을 포함하는 병렬 처리 구성 yaml parallel_extra.yaml 파일을 정의해요:
parallelism_config:
ulysses_size: auto
attention_backend: native
extra_parallel_modules: ["text_encoder", "vae"]
하이브리드 캐시 및 병렬 처리 (Hybrid Cache and Parallelism)
다음을 포함하는 하이브리드 캐시 및 병렬 가속화 구성 yaml hybrid.yaml 파일을 정의해요:
cache_config:
max_warmup_steps: 8
warmup_interval: 2
max_cached_steps: -1
max_continuous_cached_steps: 2
Fn_compute_blocks: 1
Bn_compute_blocks: 0
residual_diff_threshold: 0.12
enable_taylorseer: true
taylorseer_order: 1
parallelism_config:
ulysses_size: auto
attention_backend: native
extra_parallel_modules: ["text_encoder", "vae"]
그런 다음 yaml에서 하이브리드 캐시 및 병렬 가속화 구성을 적용해요.
sglang generate \
--backend diffusers \
--num-gpus 4 \
--model-path Qwen/Qwen-Image \
--cache-dit-config hybrid.yaml \
--prompt "A beautiful sunset over the mountains"
어텐션 백엔드 (Attention Backend)
경우에 따라 사용자는 다른 최적화 구성 없이 어텐션 백엔드만 지정하려 할 수 있어요. 이 경우 attention.yaml만 포함하는 yaml 파일을 정의할 수 있어요:
attention_backend: "flash" # '_flash_3' for Hopper
양자화 (Quantization)
yaml 파일에 양자화 구성을 지정할 수도 있으며, torchao>=0.16.0이 필요해요. 예를 들어 다음을 포함하는 yaml 파일 quantize.yaml을 정의해요:
quantize_config: # quantization configuration for transformer modules
# float8 (DQ), float8_weight_only, float8_blockwise, int8 (DQ), int8_weight_only, etc.
quant_type: "float8"
# layers to exclude from quantization (transformer). layers that contains any of the
# keywords in the exclude_layers list will be excluded from quantization. This is useful
# for some sensitive layers that are not robust to quantization, e.g., embedding layers.
exclude_layers:
- "embedder"
- "embed"
verbose: false # whether to print verbose logs during quantization
그런 다음 yaml에서 양자화 구성을 적용해요. 양자화를 사용한다면 성능 향상을 위해 torch.compile도 활성화해 주세요. 예를 들어:
sglang generate \
--backend diffusers \
--model-path Qwen/Qwen-Image \
--warmup-mode request \
--cache-dit-config quantize.yaml \
--enable-torch-compile \
--dit-cpu-offload false \
--text-encoder-cpu-offload false \
--prompt "A beautiful sunset over the mountains"
SVDQuant (W4A4 int4 / NVFP4)
SVDQuant은 Cache-DiT의 내장 W4A4 PTQ 양자화예요(가중치 및 활성화를 int4 또는 NVFP4로, 평활화된 저랭크 분기 사용). DBCache 캐싱 및 DMD 보정기와 자유롭게 결합해 가장 큰 속도 향상을 얻을 수 있어요.
::::note
SVDQuant는 CUDA 익스텐션 지원이 있는 cache-dit 빌드가 필요해요 — 일반 pip install cache-dit에는 포함되지 않아요. 다음 중 하나를 설치해요:
# Option 1: prebuilt CUDA 13 wheel
pip install cache-dit-cu13==<version> --no-deps
# Option 2: build from source with SVDQuant enabled
git clone https://github.com/vipshop/cache-dit
cd cache-dit
export CUDA_HOME=/usr/local/cuda
CACHE_DIT_BUILD_SVDQUANT=1 pip install ".[quantization]" --no-build-isolation
::::
유효한 quant_type 값은 svdq_int4_r{32,64,128,256}_dq(int4 W4A4)와 svdq_nvfp4_r{32,64,128,256}_dq(NVFP4 W4A4, Blackwell GPU 필요)예요. SVDQuant NVFP4를 DBCache + DMD와 결합하는 예시 구성(참고: examples/configs/blackwell/cache_dmd_svdq.yaml):
cache_config:
max_warmup_steps: 8
warmup_interval: 2
max_cached_steps: -1
max_continuous_cached_steps: 2
Fn_compute_blocks: 1
Bn_compute_blocks: 0
residual_diff_threshold: 0.12
enable_dmd: true
dmd_history: 6
dmd_svd_precision: "medium"
quantize_config:
quant_type: "svdq_nvfp4_r128_dq" # nvfp4 for Blackwell; use svdq_int4_r128_dq for int4
svdq_kwargs:
quantize_device: "cuda"
fused_mlp: true
exclude_layers:
- "embedder"
- "embed"
verbose: false
int4 W4A4(Pre-Blackwell GPU)의 경우 quant_type: "svdq_int4_r128_dq"가 있는 동일 구성이 examples/configs/cache_dmd_svdq.yaml에 있어요(svdq_kwargs에 runtime_kernel: "v2" 추가).
최상의 SVDQuant 성능을 위해 torch.compile을 활성화하고, --warmup-steps가 컴파일 워밍업을 덮도록 하세요(--num-inference-steps와 동일한 값 사용):
sglang generate \
--backend diffusers \
--model-path black-forest-labs/FLUX.1-dev \
--num-inference-steps=28 \
--warmup-mode request \
--warmup-steps 28 \
--cache-dit-config cache_dmd_svdq.yaml \
--enable-torch-compile \
--dit-cpu-offload false \
--text-encoder-cpu-offload false \
--prompt "A beautiful sunset over the mountains"
로그에서 양자화가 활성화됐는지 확인할 수 있어요: [Cache-DiT] SVDQuant Type: svdq_nvfp4_r128_dq, Rank: 128.
결합 구성 (Combined Configs: Cache + Parallelism + Quantization)
위의 모든 구성을 단일 yaml 파일 combined.yaml에 함께 결합할 수도 있어요:
cache_config:
max_warmup_steps: 8
warmup_interval: 2
max_cached_steps: -1
max_continuous_cached_steps: 2
Fn_compute_blocks: 1
Bn_compute_blocks: 0
residual_diff_threshold: 0.12
enable_taylorseer: true
taylorseer_order: 1
parallelism_config:
ulysses_size: auto
attention_backend: native
extra_parallel_modules: ["text_encoder", "vae"]
quantize_config:
quant_type: "float8"
exclude_layers:
- "embedder"
- "embed"
verbose: false
그런 다음 yaml에서 결합된 캐시, 병렬 처리, 양자화 구성을 적용해요. 양자화를 사용한다면 성능 향상을 위해 torch.compile도 활성화해 주세요.
고급 구성 (Advanced Configuration)
DBCache 파라미터
DBCache는 블록 수준 캐싱 동작을 제어해요:
| Parameter | Env Variable | Default | Description |
|---|---|---|---|
| Fn | SGLANG_CACHE_DIT_FN |
1 | 항상 계산할 처음 블록 수 |
| Bn | SGLANG_CACHE_DIT_BN |
0 | 항상 계산할 마지막 블록 수 |
| W | SGLANG_CACHE_DIT_WARMUP |
4 | 캐싱 시작 전 워밍업 스텝 |
| R | SGLANG_CACHE_DIT_RDT |
0.24 | 잔차 차이 임계값 |
| MC | SGLANG_CACHE_DIT_MC |
3 | 최대 연속 캐시 스텝 |
TaylorSeer 구성
TaylorSeer는 테일러 전개를 사용해 캐싱 정확도를 개선해요:
| Parameter | Env Variable | Default | Description |
|---|---|---|---|
| Enable | SGLANG_CACHE_DIT_TAYLORSEER |
false | TaylorSeer 보정기 활성화 |
| Order | SGLANG_CACHE_DIT_TS_ORDER |
1 | 테일러 전개 차수 (1 또는 2) |
DMD 보정기 구성
DMD(Dynamic Mode Decomposition, Schmid 2010 — Distribution Matching Distillation 아님)는 지수 기반(exponential-basis) 예측 보정기이며 TaylorSeer의 다항 기반을 위한 drop-in 대안이에요. 각 전체 계산 스텝에서 계산된 피처의 스냅샷을 기록하고, 캐시 스텝에서는 최근 스냅샷 창에서 선형 전파자(랭크 절단이 있는 한 번의 economy SVD 후 고유분해)를 식별해 고윳값 거듭제곱으로 현재 피처를 예측해요 — 진행 비용이 저렴하고 다항 외삽이 발산하는 더 긴 캐시 스킵에서도 안정적이에요. 일반적으로 순수 DBCache보다 속도와 품질을 모두 개선해요. DMD와 TaylorSeer는 상호 배타적(둘 다 활성화하면 ValueError 발생), DMD는 flow-matching 모델에, TaylorSeer는 DDPM 스타일 모델에 가장 좋아요. 자세한 내용은 Cache-DiT DMD documentation을 참고해요:
| Parameter | Env Variable | Default | Description |
|---|---|---|---|
| Enable | SGLANG_CACHE_DIT_DMD |
false | DMD 보정기 활성화 |
| History | SGLANG_CACHE_DIT_DMD_HISTORY |
6 | 스냅샷 창 길이; 5-6이 일반적. 균일한 스냅샷 4개 이상 필요, 그렇지 않으면 DMD가 TaylorSeer로 폴백 |
| Rank | SGLANG_CACHE_DIT_DMD_RANK |
0 | SVD 절단 랭크; 0 = 자동(주요 특이값의 1e-4 미만 모드 제거) |
| Ridge | SGLANG_CACHE_DIT_DMD_RIDGE |
1e-8 | 역전된 특이값에 추가되는 Tikhonov 정규화 |
| SVD Precision | SGLANG_CACHE_DIT_DMD_SVD_PRECISION |
medium | SVD 정밀도: "low", "medium" 또는 "high" |
사용법(SGLD 백엔드, 환경 변수 방식):
SGLANG_CACHE_DIT_ENABLED=true \
SGLANG_CACHE_DIT_DMD=true \
sglang generate --model-path black-forest-labs/FLUX.1-dev \
--prompt "A curious raccoon in a forest"
diffusers 백엔드에서는 yaml 구성에서 DMD를 활성화해요(cache_config에 enable_dmd: true, Diffusers Backend 참고). DMD는 cache_dit_params: {"enable_dmd": true}로 요청별로도 설정할 수 있어요.
결합 구성 예시 (Combined Configuration Example)
DBCache와 TaylorSeer는 함께 동작하는 보완적 전략이므로 두 파라미터 세트를 동시에 구성할 수 있어요:
SGLANG_CACHE_DIT_ENABLED=true \
SGLANG_CACHE_DIT_FN=2 \
SGLANG_CACHE_DIT_BN=1 \
SGLANG_CACHE_DIT_WARMUP=4 \
SGLANG_CACHE_DIT_RDT=0.4 \
SGLANG_CACHE_DIT_MC=4 \
SGLANG_CACHE_DIT_TAYLORSEER=true \
SGLANG_CACHE_DIT_TS_ORDER=2 \
sglang generate --model-path black-forest-labs/FLUX.1-dev \
--prompt "A curious raccoon in a forest"
SCM (Step Computation Masking)
SCM은 추가 속도 향상을 위한 스텝 수준 캐싱 제어를 제공해요. 어떤 디노이징 스텝을 완전히 계산하고 어떤 스텝을 캐시된 결과로 쓸지 결정해요.
SCM 프리셋
SCM은 프리셋으로 구성돼요:
| Preset | Compute Ratio | Speed | Quality |
|---|---|---|---|
none |
100% | 기준선 | 최고 |
slow |
~75% | ~1.3x | 높음 |
medium |
~50% | ~2x | 좋음 |
fast |
~35% | ~3x | 수용 가능 |
ultra |
~25% | ~4x | 낮음 |
사용법
SGLANG_CACHE_DIT_ENABLED=true \
SGLANG_CACHE_DIT_SCM_PRESET=medium \
sglang generate --model-path Qwen/Qwen-Image \
--prompt "A futuristic cityscape at sunset"
커스텀 SCM 빈 (Custom SCM Bins)
계산할 스텝과 캐시할 스텝을 세밀하게 제어:
SGLANG_CACHE_DIT_ENABLED=true \
SGLANG_CACHE_DIT_SCM_COMPUTE_BINS="8,3,3,2,2" \
SGLANG_CACHE_DIT_SCM_CACHE_BINS="1,2,2,2,3" \
sglang generate --model-path Qwen/Qwen-Image \
--prompt "A futuristic cityscape at sunset"
SCM 정책
| Policy | Env Variable | Description |
|---|---|---|
dynamic |
SGLANG_CACHE_DIT_SCM_POLICY=dynamic |
콘텐츠 기반 적응형 캐싱 (기본값) |
static |
SGLANG_CACHE_DIT_SCM_POLICY=static |
고정 캐싱 패턴 |
환경 변수 (Environment Variables)
모든 Cache-DiT 파라미터는 환경 변수로도 구성할 수 있으며, 이는 enable_cache_dit / cache_dit_params를 설정하지 않은 요청의 서버 전역 기본값으로 작동해요. 전체 목록은 Environment Variables를 참고해 주세요.
지원 모델 (Supported Models)
SGLang Diffusion x Cache-DiT는 SGLang Diffusion에서 원래 지원하는 거의 모든 모델을 지원해요:
| Model Family | Example Models |
|---|---|
| Wan | Wan2.1, Wan2.2 |
| Flux | FLUX.1-dev, FLUX.2-dev |
| Z-Image | Z-Image-Turbo |
| Qwen | Qwen-Image, Qwen-Image-Edit, Qwen-Image 2.1 |
| Hunyuan | HunyuanVideo |
| MiniMax | MiniMax-H3 (T2VA, FL2VA, and Ref2VA) |
성능 팁 (Performance Tips)
- 기본값으로 시작: 기본 파라미터는 대부분의 모델에서 잘 동작해요
- TaylorSeer 사용: 일반적으로 속도와 품질을 모두 개선해요
- R 임계값 조정: 낮은 값 = 더 나은 품질, 높은 값 = 더 빠름
- SCM으로 추가 속도:
medium프리셋으로 좋은 속도/품질 균형 - 워밍업 중요: 높은 워밍업 = 더 안정적인 캐싱 결정
제한 사항 (Limitations)
- SGLang 네이티브 파이프라인: 지원되는 파이프라인에 분산 Cache-DiT 경로가 존재해요. 하이브리드 SP+TP 구성은 통신과 캐시 조정 오버헤드를 추가하므로, 프로덕션 기본값으로 사용하기 전에 대상 모델과 하드웨어에서 검증해요.
- DiT 레이어 단위 offload: 호환돼요. 건너뛴 블록은 스트리밍되지 않고, 스킵 후 첫 레이어는 동기 로드될 수 있어요.
--use-fsdp-inference와는 여전히 호환되지 않아요. - SCM 최소 스텝: SCM은 효과적이려면 >= 8 추론 스텝이 필요해요. 일부 파이프라인은
steps - 1NFEs를 보고해요(예: MiniMax-H3num_inference_steps=8은 7 NFEs), 이는 상위steps_mask어서션을 트리거해요. 최소 9개 요청 스텝 또는 커스텀 빈을 사용해요. - 모델 지원: 모델은 Cache-DiT의
BlockAdapterRegister에 등록되거나 SGLang 커스텀 블록 어댑터가 있어야 해요.
문제 해결 (Troubleshooting)
낮은 스텝 수에서 SCM 비활성화
< 8 추론 스텝의 모델(예: DMD 증류 모델)의 경우 SCM이 자동으로 비활성화돼요. DBCache 가속화는 여전히 동작해요.
SVDQuant 사용 불가 또는 로드 실패
설치된 cache-dit에 CUDA 익스텐션이 없거나, 사전 빌드된 휠이 호환되지 않는 torch로 컴파일된 경우 SVDQuant 케이스는 svdq_is_available() = False 또는 undefined symbol: ... materialize_cow_storage ...를 발생시켜요. 해결: torch 버전과 일치하는 cache-dit-cu13 휠에서 재설치하거나 CACHE_DIT_BUILD_SVDQUANT=1로 소스에서 cache-dit을 빌드해요(Quantization 참고). 빠른 자체 확인:
python -c "from cache_dit.quantization.svdquant import svdq_is_available, svdq_get_load_error as e; print(svdq_is_available(), e())"