gfx1151에서 MiniMax H3를 빠르게 돌리는 방법을 하나씩 재 봤습니다
step distillation, attention, cache, 전용 HIP 런타임을 하나씩 측정해 ROCm 10 + CK + LightX2V 4-step을 기본 경로로 정했습니다. cache가 결과물을 얼마나 바꾸는지도 SSIM으로 쟀습니다.
2026-09-07 추가: 이 글에서 dense보다 느려서 뺐던 Sol-Attn은 당시의 custom Triton 구현입니다. 이후 comfy-kitchen에 들어온 네이티브 HIP Sol은 1344×768에서 생성 시간을 30% 줄였고 운영 기본값이 됐습니다. 후속 측정을 보세요. 아래 본문은 당시 기록입니다.
Ryzen AI Max+ 395 / Radeon 8060S(gfx1151)에서 MiniMax H3를 가장 실용적으로 돌린 조합은 ROCm 10, comfy-kitchen CK attention, LightX2V v1.1 4-step이었습니다. 전용 sparse attention, cache/forecast, 순수 HIP 런타임도 시험했지만, 동작하는지와 품질과 속도를 따로 확인해 보니 이 조합을 넘지 못했습니다.
구성
- ROCm 10, Python 3.12.3, PyTorch 2.13
- ComfyUI 0.34.0, comfy-kitchen CK attention
- pruned INT8 ConvRot FL2VA, Qwen3-VL NVFP4 AWQ
- FP16 video VAE, FP32 audio VAE
- CPU
power-saver, AMDGPUauto
ROCm 7.2.1에서 10으로 올리자 768x448·124f·Turbo v1.0 4-step 조건에서 179.010초가 145.446초로 18.75% 줄었습니다. 짧은 시험에서는 오히려 느려졌기 때문에, ROCm 자체의 효과라기보다 긴 생성에서 스택 전체가 나아진 결과로 봅니다.
step distillation
608x352·39f 작업을 warm 상태에서 잰 결과입니다.
| 경로 | 설정 | 시간 | 정규 20-step 대비 |
|---|---|---|---|
| 정규 | 20-step | 91.722초 | 1.00x |
| LightX2V v1.1 | 4-step | 25.574초 | 3.59x |
| FastH3 dense | 4-step | 25.492초 | 3.60x |
| PDD | 8-step | 41.611초 | 2.20x |
| Larry v4 EMA | 6-step | 33.552초 | 2.73x |
| Larry v4 EMA | 8-step | 41.918초 | 2.19x |
FastH3 dense와 LightX2V는 DiT를 평가하는 횟수가 같아서 속도가 거의 같습니다. FastH3 VSA는 fused sparse kernel과 함께 써야 이점이 나오는데, 당시 공개된 경로는 CUDA 위주였고 HIP에서는 O(T²) eager fallback으로 돌았습니다. 그래서 검증이 끝난 LightX2V를 기본값으로 뒀습니다. 실제 크기에서 반복 측정하면 LightX2V v1.1 4-step은 768x448·124f 평균 144.545초(CV 0.49%), 1344x768·39f 평균 135.696초(CV 0.32%)였습니다.
attention
CK attention은 이전 768x448·124f 비교에서 PyTorch cross attention보다 14.71% 빨랐고, 지금 스택에서도 HIP backend로 돌고 있습니다.
당시의 custom Triton Sol-Attn은 microprobe와 실제 17,353토큰 sparse 경로까지는 동작했지만, 1344x768·56f·4-step에서 dense CK보다 10.74% 느렸습니다. 참고로 RDNA4(gfx120x)용 커뮤니티 kernel은 Strix Halo(gfx1151)용이 아닙니다.
cache를 쓰면 결과물이 달라진다
| 경로 | 정규 20-step 시간 | 속도 향상 | 판정 |
|---|---|---|---|
| FirstBlockCache Safe | 63.271초 | 1.45x | 미리보기에만 선택 |
| FirstBlockCache Fast | 59.793초 | 1.53x | 근사 오차 증가 |
| CacheDiT | 57.254초 | 1.60x | 근사, 선택 적용 |
| Spectrum | 60.947초 | 1.51x | 근사, 선택 적용 |
같은 seed로 baseline을 두 번 돌리면 SSIM이 0.9985인데, cache나 forecast를 쓴 결과와 baseline 사이는 0.635~0.639였습니다. SSIM이 곧 눈으로 보는 품질은 아니지만, 원래 생기는 흔들림보다 생성 결과가 훨씬 많이 바뀐다는 뜻입니다. 최종본에는 cache를 쓰지 않습니다. 4-step LightX2V에서는 FirstBlockCache 적중이 0/4라 두 가지를 같이 켤 이유도 없었습니다.
메모리와 전용 런타임
INT8 video VAE는 warm GTT를 약 2.22GiB 줄였지만 FP16보다 빠르지는 않았습니다. 메모리가 빠듯한 큰 작업에서만 씁니다.
순수 HIP 런타임인 h3-hip.c의 공식 BF16 경로는 exact E2E 평균 171.270초, 45-layer/reuse-2 fast 평균 111.845초였습니다. fast가 자체 exact보다 1.53배 빠르긴 했지만 ComfyUI 정규 20-step(91.722초)보다 21.94% 느렸고 LightX2V 4-step보다 4.37배 오래 걸렸습니다. checkpoint 134.125GiB를 따로 둬야 하고 실행할 때마다 가중치를 다시 읽어야 해서 기본 서비스로 쓰지 않았습니다.
용도별 설정
| 용도 | 조합 |
|---|---|
| 일반 빠른 생성 | CK + LightX2V v1.1 4-step + FP16 VAE |
| 품질 비교 | CK + PDD 8-step 또는 Larry v4 EMA 8-step |
| 정규 20-step 미리보기 | CK + FirstBlockCache Safe |
| 정규 20-step 최종본 | CK, cache/forecast 없음 |
| 큰 작업 메모리 절감 | 위 조합 + INT8 video VAE |
H3의 AV latent는 일반 Tensor가 아니라 NestedTensor라서 코어 SaveLatent로 저장할 수 없습니다. 짧은 노트에 따로 적었습니다.
이 글은 128GB 미니PC 로컬 AI 시리즈의 한 편입니다.