diff --git a/blog/2026-08-21-minimax-h3-h200.md b/blog/2026-08-21-minimax-h3-h200.md new file mode 100644 index 000000000..91f582509 --- /dev/null +++ b/blog/2026-08-21-minimax-h3-h200.md @@ -0,0 +1,417 @@ +--- +title: "MiniMax-H3 on 8×H200: 1.95× Lossless, Up to 6.24× at 0.76–0.91 SSIM" +author: "SGLang Diffusion Team, Cache-DiT Team, NVIDIA, Ant Group" +date: "August 21, 2026" +previewImg: /images/blog/minimax-h3-h200/preview.png +--- + +## TL;DR + +We benchmarked [MiniMax-H3](https://github.com/MiniMax-AI) video generation on 8× NVIDIA +H200 with [SGLang Diffusion](https://github.com/sgl-project/sglang), holding prompts, +seeds, resolution, frame rate, and denoising steps fixed across six workloads. + +- **SGLang's dense, lossless path is 1.85–1.95× faster than Diffusers** with no + approximation: the same denoising work, on a faster runtime. +- **Stacking step reuse and sparse attention reaches up to 6.24×, at 0.76–0.91 mean + SSIM.** The fastest tested profile, SubBlock 0.80 + Cache-DiT stride, delivers + **5.06×/5.72×** on 5 s/10 s T2VA and **5.86×/6.24×** on FL2VA. The cost is not uniform: + FL2VA holds 0.85–0.91 SSIM there, while T2VA drops to 0.76–0.78. +- **For a quality-first default, use Cache-DiT alone** (up to 2.99×, mean SSIM 0.90–0.92). + For a balanced trade-off, **SubBlock 0.75 + Cache-DiT stride** gives 4.90–5.93× at + SSIM 0.79–0.90. +- The gains come from three layers that compose: **fused kernels** (2.00–12.16× on + individual non-GEMM sites in isolation — microbenchmarks, not additive end-to-end), + **step reuse** (Cache-DiT skips redundant denoising steps), and **SubBlock sparse + attention** (NVIDIA's block-sparse forward, which cuts the cost of the steps that do + run). + +**Scope.** This comparison covers three of SGLang Diffusion's acceleration knobs. It +supports more lossy paths that are *not* part of this run — quantization and progressive +resolution among them — so the numbers here are a slice of the available envelope, not +its ceiling. Everything below is measured, not projected; the clips at the end let you +judge the quality cost yourself. + +| | | +| --------------- | ----------------------------------------------------------------------------- | +| **Hardware** | 8× NVIDIA H200 (141 GB) | +| **Workload** | MiniMax-H3 · 1344×768 · 24 FPS · 50 denoising steps · 5 s and 10 s outputs | +| **Parallelism** | All modes use 8 GPUs; Diffusers uses CP8, and SGLang uses SP/Ulysses degree 8 | +| **Version** | SGLang `v0.5.18` (`d90318b3e2`) | +| **Measured** | 2026-08-18 | + +--- + + +## Background + +While SGLang Diffusion already delivers a fast lossless path for MiniMax-H3, faster +*lossy* generation of high-quality video has long been sought after by the community. +Building on its long-standing stack of versatile knobs for lossy acceleration, SGLang +Diffusion has been actively working on this over the past weeks; this post is the first +measured account of where those knobs land. + +Video diffusion is dominated by two costs: the denoising loop runs the same transformer +dozens of times, and each step spends most of its budget in attention over a very long +token sequence. A 5-second 1344×768 clip at 24 FPS with 50 denoising steps is far past +the point where a single GPU is practical, so the question is not whether to parallelize +but how much of the remaining work can be avoided. + +Three accelerations attack that from different directions, and they compose: + +- **Fused kernels** cut the fixed cost of every step without changing its math. +- **Cache-DiT** reuses results between denoising steps, so some steps never run. +- **SubBlock sparse attention** reduces the cost of the steps that do run, by skipping + attention blocks whose contribution is below a threshold. + +The first is lossless. The other two trade similarity against speed, which is why every +number in this post is reported with SSIM against the lossless baseline. + +## At a Glance + +The answer depends on the baseline. Against the matched Diffusers case, +SGLang's dense, lossless path is already about 2× faster for both tasks and +both durations. Cache-DiT reuses work between denoising steps, while SubBlock +sparse attention reduces the cost of the steps that still run. Together they +form the fastest path in this matrix. + +For a quality-first accelerated default, use **Cache-DiT conservative or +Cache-DiT stride** without SubBlock. +For a balanced speed/quality trade-off, use **SubBlock 0.75 + Cache-DiT stride**, +delivering 4.90–5.64× speedup at 5 s and 5.44–5.93× at 10 s. + +The charts below summarize the aggregate benchmark tables. + +MiniMax-H3 H200 latency comparison +MiniMax-H3 H200 speedup comparison +--- + +## Detailed Results + +Every configuration in this post is reproducible with the [SGLang cookbook page for +MiniMax-H3](https://docs.sglang.ai/cookbook/diffusion/MiniMax/MiniMax-H3), which carries the exact launch flags for each mode. + +We report generation-side inference time; server startup, warmup, HTTP polling, +and MP4 download time are excluded. For each task and duration, latency and SSIM +are evaluated across three distinct prompts. +Speedup is measured against the matching Diffusers case. +SSIM is computed over all frames in YUV420 against the matching SGLang lossless +video. + +### T2VA + +| Mode | 5 s median / speedup | 10 s median / speedup | 5 s mean SSIM | 10 s mean SSIM | +| -------------------------------------- | --------------------:| ---------------------:| -------------:| --------------:| +| Diffusers | 74.34 s / 1.00× | 207.71 s / 1.00× | — | — | +| SGLang lossless | 39.67 s / 1.87× | 112.44 s / 1.85× | 1.0000 | 1.0000 | +| Cache-DiT conservative | 28.02 s / 2.65× | 78.28 s / 2.65× | 0.8986 | 0.9179 | +| SubBlock 0.75 | 30.90 s / 2.41× | 77.12 s / 2.69× | 0.8006 | 0.8301 | +| SubBlock 0.75 + Cache-DiT conservative | 21.41 s / 3.47× | 57.48 s / 3.61× | 0.7936 | 0.8288 | +| Cache-DiT stride | 18.13 s / 4.10× | 52.07 s / 3.99× | 0.8037 | 0.8078 | +| SubBlock 0.75 + Cache-DiT stride | 15.16 s / 4.90× | 38.21 s / 5.44× | 0.7713 | 0.7834 | +| SubBlock 0.80 | 29.49 s / 2.52× | 72.85 s / 2.85× | 0.7858 | 0.8193 | +| **SubBlock 0.80 + Cache-DiT stride** | **14.68 s / 5.06×** | **36.29 s / 5.72×** | **0.7584** | **0.7765** | + +### FL2VA + +| Mode | 5 s median / speedup | 10 s median / speedup | 5 s mean SSIM | 10 s mean SSIM | +| -------------------------------------- | --------------------:| ---------------------:| -------------:| --------------:| +| Diffusers | 80.44 s / 1.00× | 217.31 s / 1.00× | — | — | +| SGLang lossless | 41.31 s / 1.95× | 114.02 s / 1.91× | 1.0000 | 1.0000 | +| Cache-DiT conservative | 26.90 s / 2.99× | 78.24 s / 2.78× | 0.9389 | 0.9771 | +| SubBlock 0.75 | 31.27 s / 2.57× | 76.95 s / 2.82× | 0.8946 | 0.9385 | +| SubBlock 0.75 + Cache-DiT conservative | 20.64 s / 3.90× | 56.39 s / 3.85× | 0.8924 | 0.9414 | +| SubBlock 0.75 + SageAttention | 30.64 s / 2.63× | 74.42 s / 2.92× | 0.8827 | 0.9219 | +| Cache-DiT stride | 18.02 s / 4.46× | 51.31 s / 4.24× | 0.8903 | 0.9248 | +| SubBlock 0.75 + Cache-DiT stride | 14.27 s / 5.64× | 36.62 s / 5.93× | 0.8629 | 0.9202 | +| SubBlock 0.80 | 29.74 s / 2.71× | 72.44 s / 3.00× | 0.8837 | 0.9350 | +| **SubBlock 0.80 + Cache-DiT stride** | **13.73 s / 5.86×** | **34.80 s / 6.24×** | **0.8498** | **0.9144** | + +### Key takeaways + +- **SGLang's dense path is the first easy win.** It delivers a 1.85–1.95× speedup over + Diffusers across both tasks and durations, with the workload held constant. +- **SubBlock 0.75 + Cache-DiT stride is the balanced profile.** It maintains + good output quality while delivering 4.90–5.64× speedup at 5 seconds and + 5.44–5.93× at 10 seconds. +- **Stride caching adds the largest throughput gain.** It reaches 3.99–4.46× + on its own, compared with 2.65–2.99× for the conservative profile. +- **FL2VA benefits slightly more from cache + sparse combinations.** The + fastest FL2VA case reaches 5.86×/6.24×, versus 5.06×/5.72× for T2VA. +- **The speed–quality trade-off is clear.** Conservative Cache-DiT retains + 0.8986–0.9771 SSIM; the aggressive 0.80 + stride profile gives up some of + that margin for the lowest latency. + +MiniMax-H3 H200 speed–quality trade-off with highlighted profiles +--- + +## Where the Speedup Comes From + +Three mechanisms drive the profile-level gains. + +**Fused kernels** reduce the cost of each step that still runs. The H3 path +fuses indexed AdaLN updates, gated residuals, SwiGLU activation, and QK RMSNorm +with 3D RoPE, reducing intermediate tensors, memory traffic, and kernel +launches. The next section reports these isolated kernel measurements; they are +part of the per-step implementation, while Cache-DiT and SubBlock determine +how much of that implementation is executed. + +**Cache-DiT** attaches one DBCache context to MiniMax-H3's shared DiT block +stack. After the warmup steps, it evaluates the configured boundary blocks and +compares the normalized residual change with the previous cached state. If the +change stays below the threshold and the consecutive-cache limit allows it, the +middle blocks reuse their cached result; otherwise the stack is recomputed and +the cache is refreshed. All cache modes use `Fn=1`, `Bn=0`, and four warmup +steps: + +- conservative: shared packed-stack RDT `0.04`, maximum consecutive cached steps `1`; +- stride: shared packed-stack RDT `0.08`, maximum consecutive cached steps `3`. + +MiniMax-H3 has one `MiniMaxH3DiTModel` whose block stack carries packed video +and audio tokens. Cache-DiT therefore makes one shared decision for the whole +packed stack; it does not maintain independent video and audio caches. The +worker records one combined Cache-DiT step list, and the trace legend follows +that execution model. + +**SubBlock sparse attention** reduces the KV blocks read on computed steps. It +uses `n_k=n_q=4`; the first ten denoising steps use dense attention, and SubBlock +is enabled afterward. The minimum sequence length is `4096`. The matrix tests +sparsity `0.75` and `0.80`; the latter is faster but has lower SSIM on several +T2VA cases. + +The aggregate profile results show how the profiles behave end to end; they do +not isolate kernel time or provide a per-step cost breakdown. The trace below is a +request-level execution trace, not an operator timing measurement. + +### One measured 49-step trace + +The workload is configured with 50 inference steps. Because the sigma schedule +includes both interval endpoints, the denoising loop performs 49 model +evaluations (`len(sigmas) - 1`); “49-step trace” refers to these model +evaluations. + +To make the execution pattern concrete, one 5-second T2VA request was run for +six profiles: lossless, Cache-DiT conservative, +SubBlock 0.75, SubBlock 0.75 + conservative Cache-DiT, Cache-DiT stride, and +SubBlock 0.80 + stride. The worker recorded the actual `cached_steps` list for +each request. Because video and audio tokens share one packed H3 block stack, +a cache hit reuses the combined output; there is no separate “video cached, +audio computed” state in this path. Blue cells in the SubBlock rows mark +computed steps that use sparse attention after the first ten denoising steps. + +Real 49-step MiniMax-H3 H200 execution traces +The trace-run timings are 37.78 s (lossless), 26.82 s (Cache-DiT conservative), +29.97 s (SubBlock 0.75), 22.18 s (SubBlock 0.75 + conservative Cache-DiT), +17.23 s (Cache-DiT stride), and 14.34 s (SubBlock 0.80 + stride). These numbers +identify the trace run; they do not replace the three-prompt aggregate medians. + +--- + +## The Kernel Layer + +Caching determines how many denoising steps run; kernels determine how fast +each computed step is. MiniMax-H3 packs video and audio tokens into one +sequence, so the non-GEMM path benefits from the same basic principle +throughout: less memory traffic, fewer intermediate tensors, and fewer kernel +launches. AdaLN modulation and gated residuals look up parameters by token +index and update the activation in one pass. SwiGLU operates directly on the +fused `gate_up` buffer. QK RMSNorm and 3D RoPE are fused into a single kernel +instead of running as separate eager operations. + +The table below uses the real per-rank shape for a 5-second T2VA request at +1344×768×124 frames: 4,722 rows after SP/Ulysses-8 padding, hidden size 5,376, +56 attention heads, head dimension 128, RoPE dimension 96, and BF16 inputs. +Each number is the median per-call CUDA-event time across 10 rounds of 20 +calls. The baseline is the corresponding eager composition. + +MiniMax-H3 H200 fused-kernel speedup +| Operator | Eager composition | SGLang kernel | Speedup | +| -------------------------------------- | -----------------:| -------------:| -------:| +| AdaLN modulation (indexed scale-shift) | 136.7 μs | 38.2 μs | 3.58× | +| AdaLN gated residual (indexed) | 93.2 μs | 46.6 μs | 2.00× | +| SwiGLU activation (in place) | 364.5 μs | 105.2 μs | 3.46× | +| QK RMSNorm | 334.0 μs | 76.9 μs | 4.35× | +| QK RMSNorm + 3D RoPE, one kernel | 1335.6 μs | 109.8 μs | 12.16× | + +These are microbenchmarks of the isolated sites, not additive end-to-end +latency savings. The fused QK-Norm + RoPE result uses the exact-rounding path +available on main (`round_norm_before_rope=True`). + +--- + +## How SubBlock Sparse Attention Works + +SubBlock is a training-free router for block-sparse attention. It divides the +sequence into 64-token query and key blocks, then splits each block into four +16-token sub-blocks on both sides (`n_q=n_k=4`). A lightweight pooling and +log-sum-exp score estimates each key block's unnormalized softmax mass for each +query block and head. The router keeps the highest-scoring key +blocks and passes their indices to the block-sparse attention kernel; the full +attention matrix is never materialized. + +The `sparsity` value is the fraction of key blocks allowed to be dropped, not +the fraction retained. Thus `sparsity=0.75` keeps roughly 25% of key blocks per +query block. The more aggressive `0.80` setting is faster but has a larger +approximation error budget, which is consistent with the lower SSIM observed +in the most aggressive rows. + +The curves below show the score distributions; the vertical lines show the +medians of the per-row routing cutoffs for the two displayed budgets. Here, +`sparsity=0.50` is included as a diagnostic reference; the benchmark profiles +use `0.75` and `0.80`. Because the router ranks key blocks independently for +each query block and head, `sparsity=0.50` and `0.75` retain roughly the top +half and top quarter of that row's available key blocks, subject to 8-block +budget rounding. Across these workloads, the `0.75` budget retains most of the +score mass above the row-local median while concentrating selection on the +high-score tail. + +SubBlock score distributions and cutoff bands +The sparse path is enabled only for the long, non-causal DiT attention calls +that the kernel supports: BF16 inputs, head dimension 128, and sequences of at +least 4096 tokens. The first ten denoising steps use dense attention; short +segments, the token refiner, and unsupported calls use the dense fallback. On +H200/SM90, the selected 64×64 routing plan is executed by SGLang's CuTe +block-sparse FlashAttention kernel. + +--- + +## Demos + +The demo set contains four modes for each selected prompt: + +- **Prompt 1** · T2VA · 5 s · three cats carrying brass instruments and playing beside a sleeping owner; +- **Prompt 2** · T2VA · 10 s · a rainy cyberpunk city at night; +- **Prompt 3** · FL2VA · 5 s · a clay fox continuation. + +The four modes are SGLang lossless, Cache-DiT conservative, SubBlock 0.75 + +Cache-DiT stride, and SubBlock 0.80 + Cache-DiT stride. Filenames encode the +prompt, task, mode, and duration; the SVG figures are in the same folder. + +**Prompt 1 · T2VA · 5 s** + +
+
+ +
SGLang lossless
+
+
+ +
Cache-DiT conservative
+
+
+ +
SubBlock 0.75 + Cache-DiT stride
+
+
+ +
SubBlock 0.80 + Cache-DiT stride
+
+
+ +**Prompt 2 · T2VA · 10 s** + +
+
+ +
SGLang lossless
+
+
+ +
Cache-DiT conservative
+
+
+ +
SubBlock 0.75 + Cache-DiT stride
+
+
+ +
SubBlock 0.80 + Cache-DiT stride
+
+
+ +**Prompt 3 · FL2VA · 5 s** + +
+
+ +
SGLang lossless
+
+
+ +
Cache-DiT conservative
+
+
+ +
SubBlock 0.75 + Cache-DiT stride
+
+
+ +
SubBlock 0.80 + Cache-DiT stride
+
+
+ +
+Prompt 1 · full prompt + +```text +integrated_multimodal_description: [Shot 1] Live-action, whimsical cinematic, a medium-wide shot frames a dim bedroom at night where the owner sleeps under the covers. A bedroom door opens and three cats enter in single file, each carrying a tiny brass instrument. The camera tracks sideways with small amplitude at slow speed as the cats march beside the bed and play a short, lively diegetic brass tune in synchrony; the sleeping owner shifts slightly but does not wake. The cats finish with one crisp flourish, pivot together, and abruptly file back out through the doorway, with the last cat's tail disappearing from frame. No character speaks and no human voice is heard. + +overall_soundscape: Quiet nighttime room tone, the owner's steady breathing, soft pawsteps on the floor, a faint door creak, and light bedding rustle as the procession passes. + +non_diegetic_music: N/A +``` + +
+ +
+Prompt 2 · full prompt + +```text +integrated_multimodal_description: [Shot 1] Live-action, cinematic, a wide establishing shot frames a futuristic cyberpunk city at night as rain falls across dense towers, elevated transit lines, and a crowded street lined with vivid neon light. The camera pushes forward with small amplitude at slow speed above the wet pavement while pedestrians in reflective coats pass beneath transparent umbrellas, a compact hovering vehicle glides through the intersection, and saturated magenta, cyan, and amber reflections ripple across puddles. Steam drifts from a street vent and briefly catches the neon glow as the vehicle recedes between the towers. No dialogue or voiceover is heard. + +overall_soundscape: Steady rainfall, distant traffic, the low hum of elevated transit, electrical buzzing from signs, soft footsteps through shallow water, and a brief rush of air as the hovering vehicle passes. + +non_diegetic_music: A slow electronic pulse with deep analog bass, sparse metallic percussion, and sustained synthesizer tones that gradually increase in volume before fading. +``` + +
+ +
+Prompt 3 · full prompt + +```text +For the target video, at 0.00 seconds into the target video, is fully referenced. + +integrated_multimodal_description: +[Shot 1] A handcrafted stop-motion clay animation begins from . A small orange clay fox with large expressive eyes trots along a mossy path through a warm, richly detailed miniature forest. The camera tracks the fox smoothly at eye level while layered clay trees and shrubs create gentle parallax. The fox looks curiously toward the camera, slows near the middle of the path, flicks its tail, then continues toward the small wooden cabin in the distance. Preserve the exact clay textures, warm amber lighting, forest layout, fox proportions, and family-friendly whimsical tone established by . Motion remains coherent and physically plausible for stop-motion animation. + +overall_soundscape: +Soft clay footsteps, rustling leaves, distant birds, and a light forest breeze accompany the fox's movement. + +non_diegetic_music: +A gentle playful score with pizzicato strings, wooden percussion, and soft flute. +``` + +
+ +## Acknowledgement + +This benchmark is the result of work by several teams, and we are grateful to all of them. + +- **[SGLang Diffusion Team](https://github.com/sgl-project/sglang)** — wrote the first + version of this post, drives the SGLang kernel work these results build on, and + provides the diffusion runtime, the fused kernels, and the parallelism measured here. +- **[Ji Huang (@IPostYellow), Ant Group](https://github.com/IPostYellow)** — ran the + H200 benchmark, brought SubBlock sparse attention into SGLang Diffusion, and revised + this post. +- **[Cache-DiT Team](https://github.com/vipshop/cache-dit)** — @DefTruth and the + vipshop.com team, for Cache-DiT and for support integrating its cache profiles into + SGLang Diffusion. +- **[MiniMax](https://github.com/MiniMax-AI)** — for open-sourcing MiniMax-H3, the model + every measurement here runs on. +- **NVIDIA** — for the underlying SubBlock sparse attention support, including the + block-sparse attention forward these results depend on. + +--- + +Measured 2026-08-18 on 8× NVIDIA H200. Reproduction details and the raw per-prompt numbers are in the [benchmark repository](https://github.com/BBuf/how-to-optim-algorithm-in-cuda/pull/26). diff --git a/public/images/blog/minimax-h3-h200/Prompt1__T2VA__cachedit_conservative__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__cachedit_conservative__5s.mp4 new file mode 100644 index 000000000..82d9a703e Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__cachedit_conservative__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt1__T2VA__sglang_lossless__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__sglang_lossless__5s.mp4 new file mode 100644 index 000000000..2982e975c Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__sglang_lossless__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt1__T2VA__subblock_080_cachedit_stride__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__subblock_080_cachedit_stride__5s.mp4 new file mode 100644 index 000000000..b340a3dcf Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__subblock_080_cachedit_stride__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt1__T2VA__subblock_cachedit_stride__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__subblock_cachedit_stride__5s.mp4 new file mode 100644 index 000000000..f7be31b1e Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt1__T2VA__subblock_cachedit_stride__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt2__T2VA__cachedit_conservative__10s.mp4 b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__cachedit_conservative__10s.mp4 new file mode 100644 index 000000000..8f8b8a6cb Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__cachedit_conservative__10s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt2__T2VA__sglang_lossless__10s.mp4 b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__sglang_lossless__10s.mp4 new file mode 100644 index 000000000..526558ca8 Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__sglang_lossless__10s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt2__T2VA__subblock_080_cachedit_stride__10s.mp4 b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__subblock_080_cachedit_stride__10s.mp4 new file mode 100644 index 000000000..ede0cede5 Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__subblock_080_cachedit_stride__10s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt2__T2VA__subblock_cachedit_stride__10s.mp4 b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__subblock_cachedit_stride__10s.mp4 new file mode 100644 index 000000000..69ae28e23 Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt2__T2VA__subblock_cachedit_stride__10s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__cachedit_conservative__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__cachedit_conservative__5s.mp4 new file mode 100644 index 000000000..194dafc77 Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__cachedit_conservative__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__sglang_lossless__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__sglang_lossless__5s.mp4 new file mode 100644 index 000000000..4106f267c Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__sglang_lossless__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__subblock_080_cachedit_stride__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__subblock_080_cachedit_stride__5s.mp4 new file mode 100644 index 000000000..e51c7d560 Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__subblock_080_cachedit_stride__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__subblock_cachedit_stride__5s.mp4 b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__subblock_cachedit_stride__5s.mp4 new file mode 100644 index 000000000..b38442f1f Binary files /dev/null and b/public/images/blog/minimax-h3-h200/Prompt3__FL2VA__subblock_cachedit_stride__5s.mp4 differ diff --git a/public/images/blog/minimax-h3-h200/kernel-speedup-chart.svg b/public/images/blog/minimax-h3-h200/kernel-speedup-chart.svg new file mode 100644 index 000000000..8a34e26ea --- /dev/null +++ b/public/images/blog/minimax-h3-h200/kernel-speedup-chart.svg @@ -0,0 +1,26 @@ + +MiniMax-H3 H200 fused-kernel speedup +Five MiniMax-H3 non-GEMM kernel sites compared with their eager compositions on the measured H200-class per-rank shapes. + +Fused kernel speedup over the eager composition (higher is better) +MiniMax-H3 per-rank inference shapes · BF16 · median of 10 rounds × 20 calls +3.58× +AdaLN modulation (indexed scale-shift): 3.58× +AdaLN modulation +(indexed scale-shift) +2.00× +AdaLN gated residual (indexed): 2.00× +AdaLN gated residual +(indexed) +3.46× +SwiGLU activation (in place): 3.46× +SwiGLU activation +(in place) +4.35× +QK RMSNorm: 4.35× +QK RMSNorm +12.16× +QK RMSNorm + 3D RoPE (one kernel): 12.16× +QK RMSNorm + 3D RoPE +(one kernel) + diff --git a/public/images/blog/minimax-h3-h200/latency.svg b/public/images/blog/minimax-h3-h200/latency.svg new file mode 100644 index 000000000..921a0f3d7 --- /dev/null +++ b/public/images/blog/minimax-h3-h200/latency.svg @@ -0,0 +1,205 @@ + +MiniMax-H3 H200 latency comparison +Four panels compare T2VA and FL2VA generation latency at five and ten seconds across the tested execution modes on eight H200 GPUs. + +End-to-end latency on 8×H200 (lower is better) +Median generation-side inference time · three prompts per task and duration · seconds +T2VA +5s output · 9 modes + +0 + +20 + +40 + +60 + +80 +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 74 seconds +74 +SGLang lossless +(reference) +SGLang lossless: 39 seconds +39 +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 28 seconds +28 +SubBlock 0.75 +SubBlock 0.75: 30 seconds +30 +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 21 seconds +21 +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 18 seconds +18 +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 15 seconds +15 +SubBlock 0.80 +SubBlock 0.80: 29 seconds +29 +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 14 seconds +14 + +seconds +T2VA +10s output · 9 modes + +0 + +50 + +100 + +150 + +200 +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 207 seconds +207 +SGLang lossless +(reference) +SGLang lossless: 112 seconds +112 +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 78 seconds +78 +SubBlock 0.75 +SubBlock 0.75: 77 seconds +77 +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 57 seconds +57 +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 52 seconds +52 +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 38 seconds +38 +SubBlock 0.80 +SubBlock 0.80: 72 seconds +72 +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 36 seconds +36 + +seconds +FL2VA +5s output · 10 modes + +0 + +20 + +40 + +60 + +80 +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 80 seconds +80 +SGLang lossless +(reference) +SGLang lossless: 41 seconds +41 +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 26 seconds +26 +SubBlock 0.75 +SubBlock 0.75: 31 seconds +31 +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 20 seconds +20 +SubBlock 0.75 + SageAttention +SubBlock 0.75 + SageAttention: 31 seconds +31 +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 18 seconds +18 +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 14 seconds +14 +SubBlock 0.80 +SubBlock 0.80: 29 seconds +29 +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 13 seconds +13 + +seconds +FL2VA +10s output · 10 modes + +0 + +50 + +100 + +150 + +200 +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 217 seconds +217 +SGLang lossless +(reference) +SGLang lossless: 114 seconds +114 +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 78 seconds +78 +SubBlock 0.75 +SubBlock 0.75: 76 seconds +76 +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 56 seconds +56 +SubBlock 0.75 + SageAttention +SubBlock 0.75 + SageAttention: 74 seconds +74 +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 51 seconds +51 +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 36 seconds +36 +SubBlock 0.80 +SubBlock 0.80: 72 seconds +72 +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 34 seconds +34 + +seconds + diff --git a/public/images/blog/minimax-h3-h200/preview.png b/public/images/blog/minimax-h3-h200/preview.png new file mode 100644 index 000000000..4735281d7 Binary files /dev/null and b/public/images/blog/minimax-h3-h200/preview.png differ diff --git a/public/images/blog/minimax-h3-h200/quality-tradeoff-highlighted.svg b/public/images/blog/minimax-h3-h200/quality-tradeoff-highlighted.svg new file mode 100644 index 000000000..0dde35e1e --- /dev/null +++ b/public/images/blog/minimax-h3-h200/quality-tradeoff-highlighted.svg @@ -0,0 +1,155 @@ + +MiniMax-H3 H200 speed-quality tradeoff +Speed versus SSIM for the SGLang T2VA and FL2VA profiles. Six profiles are highlighted: lossless, Cache-DiT conservative and stride, SubBlock 0.75 plus conservative/stride Cache-DiT, and SubBlock 0.80 plus stride. + +Speed–quality trade-off on 8×H200 +Highlighted profiles are the modes discussed in the text; other tested modes are muted. +T2VA +5s output · highlighted profiles + + + + + + + + + + + + + +0.7 + +0.8 + +0.9 + +1.0 + +speedup vs Diffusers +SSIM +SGLang lossless: 1.87×, SSIM 1.0000 +Cache-DiT conservative: 2.65×, SSIM 0.8986 +SubBlock 0.75: 2.41×, SSIM 0.8006 +SubBlock 0.75 + Cache-DiT conservative: 3.47×, SSIM 0.7936 +Cache-DiT stride: 4.10×, SSIM 0.8037 +SubBlock 0.75 + Cache-DiT stride: 4.90×, SSIM 0.7713 +SubBlock 0.80: 2.52×, SSIM 0.7858 +SubBlock 0.80 + Cache-DiT stride: 5.06×, SSIM 0.7584 +T2VA +10s output · highlighted profiles + + + + + + + + + + + + + +0.7 + +0.8 + +0.9 + +1.0 + +speedup vs Diffusers +SSIM +SGLang lossless: 1.85×, SSIM 1.0000 +Cache-DiT conservative: 2.65×, SSIM 0.9179 +SubBlock 0.75: 2.69×, SSIM 0.8301 +SubBlock 0.75 + Cache-DiT conservative: 3.61×, SSIM 0.8288 +Cache-DiT stride: 3.99×, SSIM 0.8078 +SubBlock 0.75 + Cache-DiT stride: 5.44×, SSIM 0.7834 +SubBlock 0.80: 2.85×, SSIM 0.8193 +SubBlock 0.80 + Cache-DiT stride: 5.72×, SSIM 0.7765 +FL2VA +5s output · highlighted profiles + + + + + + + + + + + + + +0.7 + +0.8 + +0.9 + +1.0 + +speedup vs Diffusers +SSIM +SGLang lossless: 1.95×, SSIM 1.0000 +Cache-DiT conservative: 2.99×, SSIM 0.9389 +SubBlock 0.75: 2.57×, SSIM 0.8946 +SubBlock 0.75 + Cache-DiT conservative: 3.90×, SSIM 0.8924 +SubBlock 0.75 + SageAttention: 2.63×, SSIM 0.8827 +Cache-DiT stride: 4.46×, SSIM 0.8903 +SubBlock 0.75 + Cache-DiT stride: 5.64×, SSIM 0.8629 +SubBlock 0.80: 2.71×, SSIM 0.8837 +SubBlock 0.80 + Cache-DiT stride: 5.86×, SSIM 0.8498 +FL2VA +10s output · highlighted profiles + + + + + + + + + + + + + +0.7 + +0.8 + +0.9 + +1.0 + +speedup vs Diffusers +SSIM +SGLang lossless: 1.91×, SSIM 1.0000 +Cache-DiT conservative: 2.78×, SSIM 0.9771 +SubBlock 0.75: 2.82×, SSIM 0.9385 +SubBlock 0.75 + Cache-DiT conservative: 3.85×, SSIM 0.9414 +SubBlock 0.75 + SageAttention: 2.92×, SSIM 0.9219 +Cache-DiT stride: 4.24×, SSIM 0.9248 +SubBlock 0.75 + Cache-DiT stride: 5.93×, SSIM 0.9202 +SubBlock 0.80: 3.00×, SSIM 0.9350 +SubBlock 0.80 + Cache-DiT stride: 6.24×, SSIM 0.9144 +Highlighted profiles + +SGLang lossless + +Cache-DiT conservative + +Cache-DiT stride + +SubBlock 0.75 + Cache-DiT stride + +SubBlock 0.75 + Cache-DiT conservative + +SubBlock 0.80 + Cache-DiT stride +SSIM is measured against the matching SGLang lossless output. + diff --git a/public/images/blog/minimax-h3-h200/speedup.svg b/public/images/blog/minimax-h3-h200/speedup.svg new file mode 100644 index 000000000..33d4bc7d0 --- /dev/null +++ b/public/images/blog/minimax-h3-h200/speedup.svg @@ -0,0 +1,209 @@ + +MiniMax-H3 H200 speedup comparison +Four panels compare speedup against the matching Diffusers case for T2VA and FL2VA at five and ten seconds on eight H200 GPUs. + +Speedup versus the matching Diffusers case (higher is better) +The orange-red bars are the Cache-DiT + SubBlock combinations; the fastest tested mode is 0.80 + Cache-DiT stride +T2VA +5s output · baseline = 1.00× + +1.00× + +2.00× + +3.00× + +4.00× + +5.00× + +6.00× +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 1.00× +SGLang lossless +(reference) +SGLang lossless: 1.87× +1.87× +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 2.65× +2.65× +SubBlock 0.75 +SubBlock 0.75: 2.41× +2.41× +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 3.47× +3.47× +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 4.10× +4.10× +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 4.90× +4.90× +SubBlock 0.80 +SubBlock 0.80: 2.52× +2.52× +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 5.06× +5.06× + +× +T2VA +10s output · baseline = 1.00× + +1.00× + +2.00× + +3.00× + +4.00× + +5.00× + +6.00× +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 1.00× +SGLang lossless +(reference) +SGLang lossless: 1.85× +1.85× +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 2.65× +2.65× +SubBlock 0.75 +SubBlock 0.75: 2.69× +2.69× +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 3.61× +3.61× +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 3.99× +3.99× +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 5.44× +5.44× +SubBlock 0.80 +SubBlock 0.80: 2.85× +2.85× +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 5.72× +5.72× + +× +FL2VA +5s output · baseline = 1.00× + +1.00× + +2.00× + +3.00× + +4.00× + +5.00× + +6.00× +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 1.00× +SGLang lossless +(reference) +SGLang lossless: 1.95× +1.95× +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 2.99× +2.99× +SubBlock 0.75 +SubBlock 0.75: 2.57× +2.57× +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 3.90× +3.90× +SubBlock 0.75 + SageAttention +SubBlock 0.75 + SageAttention: 2.63× +2.63× +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 4.46× +4.46× +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 5.64× +5.64× +SubBlock 0.80 +SubBlock 0.80: 2.71× +2.71× +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 5.86× +5.86× + +× +FL2VA +10s output · baseline = 1.00× + +1.00× + +2.00× + +3.00× + +4.00× + +5.00× + +6.00× +Diffusers BF16 dense ++ Ulysses8 +Diffusers: 1.00× +SGLang lossless +(reference) +SGLang lossless: 1.91× +1.91× +Cache-DiT conservative +(4, 0.04, 1) +Cache-DiT conservative: 2.78× +2.78× +SubBlock 0.75 +SubBlock 0.75: 2.82× +2.82× +SubBlock 0.75 + Cache-DiT +conservative +SubBlock 0.75 + Cache-DiT conservative: 3.85× +3.85× +SubBlock 0.75 + SageAttention +SubBlock 0.75 + SageAttention: 2.92× +2.92× +Cache-DiT stride +(4, 0.08, 3) +Cache-DiT stride: 4.24× +4.24× +SubBlock 0.75 + Cache-DiT +stride +SubBlock 0.75 + Cache-DiT stride: 5.93× +5.93× +SubBlock 0.80 +SubBlock 0.80: 3.00× +3.00× +SubBlock 0.80 + Cache-DiT +stride +SubBlock 0.80 + Cache-DiT stride: 6.24× +6.24× + +× + diff --git a/public/images/blog/minimax-h3-h200/step-traces.svg b/public/images/blog/minimax-h3-h200/step-traces.svg new file mode 100644 index 000000000..4476918f9 --- /dev/null +++ b/public/images/blog/minimax-h3-h200/step-traces.svg @@ -0,0 +1,315 @@ + +MiniMax-H3 H200 49-step T2VA execution traces +Six real five-second T2VA traces show dense computation, Cache-DiT reuse, and SubBlock sparse-attention steps. + +Real 49-step T2VA execution traces: computed, reused, and sparsified steps +T2VA · 5 s · 49 denoising steps +SGLang lossless (reference) · 49 computed · 0 reused · 37.78 s +step 0: Dense computed step +step 1: Dense computed step +step 2: Dense computed step +step 3: Dense computed step +step 4: Dense computed step +step 5: Dense computed step +step 6: Dense computed step +step 7: Dense computed step +step 8: Dense computed step +step 9: Dense computed step +step 10: Dense computed step +step 11: Dense computed step +step 12: Dense computed step +step 13: Dense computed step +step 14: Dense computed step +step 15: Dense computed step +step 16: Dense computed step +step 17: Dense computed step +step 18: Dense computed step +step 19: Dense computed step +step 20: Dense computed step +step 21: Dense computed step +step 22: Dense computed step +step 23: Dense computed step +step 24: Dense computed step +step 25: Dense computed step +step 26: Dense computed step +step 27: Dense computed step +step 28: Dense computed step +step 29: Dense computed step +step 30: Dense computed step +step 31: Dense computed step +step 32: Dense computed step +step 33: Dense computed step +step 34: Dense computed step +step 35: Dense computed step +step 36: Dense computed step +step 37: Dense computed step +step 38: Dense computed step +step 39: Dense computed step +step 40: Dense computed step +step 41: Dense computed step +step 42: Dense computed step +step 43: Dense computed step +step 44: Dense computed step +step 45: Dense computed step +step 46: Dense computed step +step 47: Dense computed step +step 48: Dense computed step ++Cache-DiT conservative (4, 0.04, 1) · 34 computed · 15 reused · 26.82 s +step 0: Dense computed step +step 1: Dense computed step +step 2: Dense computed step +step 3: Dense computed step +step 4: Dense computed step +step 5: Dense computed step +step 6: Dense computed step +step 7: Dense computed step +step 8: Cache-DiT reuse +step 9: Dense computed step +step 10: Cache-DiT reuse +step 11: Dense computed step +step 12: Cache-DiT reuse +step 13: Dense computed step +step 14: Cache-DiT reuse +step 15: Dense computed step +step 16: Cache-DiT reuse +step 17: Dense computed step +step 18: Cache-DiT reuse +step 19: Dense computed step +step 20: Cache-DiT reuse +step 21: Dense computed step +step 22: Cache-DiT reuse +step 23: Dense computed step +step 24: Cache-DiT reuse +step 25: Dense computed step +step 26: Cache-DiT reuse +step 27: Dense computed step +step 28: Cache-DiT reuse +step 29: Dense computed step +step 30: Cache-DiT reuse +step 31: Dense computed step +step 32: Cache-DiT reuse +step 33: Dense computed step +step 34: Cache-DiT reuse +step 35: Dense computed step +step 36: Cache-DiT reuse +step 37: Dense computed step +step 38: Dense computed step +step 39: Dense computed step +step 40: Dense computed step +step 41: Dense computed step +step 42: Dense computed step +step 43: Dense computed step +step 44: Dense computed step +step 45: Dense computed step +step 46: Dense computed step +step 47: Dense computed step +step 48: Dense computed step +SubBlock 0.75 · 49 computed (10 dense + 39 sparse) · 0 reused · 29.97 s +step 0: Dense computed step +step 1: Dense computed step +step 2: Dense computed step +step 3: Dense computed step +step 4: Dense computed step +step 5: Dense computed step +step 6: Dense computed step +step 7: Dense computed step +step 8: Dense computed step +step 9: Dense computed step +step 10: Computed with SubBlock sparse attention +step 11: Computed with SubBlock sparse attention +step 12: Computed with SubBlock sparse attention +step 13: Computed with SubBlock sparse attention +step 14: Computed with SubBlock sparse attention +step 15: Computed with SubBlock sparse attention +step 16: Computed with SubBlock sparse attention +step 17: Computed with SubBlock sparse attention +step 18: Computed with SubBlock sparse attention +step 19: Computed with SubBlock sparse attention +step 20: Computed with SubBlock sparse attention +step 21: Computed with SubBlock sparse attention +step 22: Computed with SubBlock sparse attention +step 23: Computed with SubBlock sparse attention +step 24: Computed with SubBlock sparse attention +step 25: Computed with SubBlock sparse attention +step 26: Computed with SubBlock sparse attention +step 27: Computed with SubBlock sparse attention +step 28: Computed with SubBlock sparse attention +step 29: Computed with SubBlock sparse attention +step 30: Computed with SubBlock sparse attention +step 31: Computed with SubBlock sparse attention +step 32: Computed with SubBlock sparse attention +step 33: Computed with SubBlock sparse attention +step 34: Computed with SubBlock sparse attention +step 35: Computed with SubBlock sparse attention +step 36: Computed with SubBlock sparse attention +step 37: Computed with SubBlock sparse attention +step 38: Computed with SubBlock sparse attention +step 39: Computed with SubBlock sparse attention +step 40: Computed with SubBlock sparse attention +step 41: Computed with SubBlock sparse attention +step 42: Computed with SubBlock sparse attention +step 43: Computed with SubBlock sparse attention +step 44: Computed with SubBlock sparse attention +step 45: Computed with SubBlock sparse attention +step 46: Computed with SubBlock sparse attention +step 47: Computed with SubBlock sparse attention +step 48: Computed with SubBlock sparse attention +SubBlock 0.75 + Cache-DiT conservative (4, 0.04, 1) · 34 computed (9 dense + 25 sparse) · 15 reused · 22.18 s +step 0: Dense computed step +step 1: Dense computed step +step 2: Dense computed step +step 3: Dense computed step +step 4: Dense computed step +step 5: Dense computed step +step 6: Dense computed step +step 7: Dense computed step +step 8: Cache-DiT reuse +step 9: Dense computed step +step 10: Computed with SubBlock sparse attention +step 11: Cache-DiT reuse +step 12: Computed with SubBlock sparse attention +step 13: Cache-DiT reuse +step 14: Computed with SubBlock sparse attention +step 15: Cache-DiT reuse +step 16: Computed with SubBlock sparse attention +step 17: Cache-DiT reuse +step 18: Computed with SubBlock sparse attention +step 19: Cache-DiT reuse +step 20: Computed with SubBlock sparse attention +step 21: Cache-DiT reuse +step 22: Computed with SubBlock sparse attention +step 23: Cache-DiT reuse +step 24: Computed with SubBlock sparse attention +step 25: Cache-DiT reuse +step 26: Computed with SubBlock sparse attention +step 27: Cache-DiT reuse +step 28: Computed with SubBlock sparse attention +step 29: Cache-DiT reuse +step 30: Computed with SubBlock sparse attention +step 31: Cache-DiT reuse +step 32: Computed with SubBlock sparse attention +step 33: Cache-DiT reuse +step 34: Computed with SubBlock sparse attention +step 35: Cache-DiT reuse +step 36: Computed with SubBlock sparse attention +step 37: Cache-DiT reuse +step 38: Computed with SubBlock sparse attention +step 39: Computed with SubBlock sparse attention +step 40: Computed with SubBlock sparse attention +step 41: Computed with SubBlock sparse attention +step 42: Computed with SubBlock sparse attention +step 43: Computed with SubBlock sparse attention +step 44: Computed with SubBlock sparse attention +step 45: Computed with SubBlock sparse attention +step 46: Computed with SubBlock sparse attention +step 47: Computed with SubBlock sparse attention +step 48: Computed with SubBlock sparse attention ++Cache-DiT stride (4, 0.08, 3) · 21 computed · 28 reused · 17.23 s +step 0: Dense computed step +step 1: Dense computed step +step 2: Dense computed step +step 3: Dense computed step +step 4: Cache-DiT reuse +step 5: Dense computed step +step 6: Cache-DiT reuse +step 7: Dense computed step +step 8: Cache-DiT reuse +step 9: Cache-DiT reuse +step 10: Dense computed step +step 11: Cache-DiT reuse +step 12: Cache-DiT reuse +step 13: Dense computed step +step 14: Cache-DiT reuse +step 15: Cache-DiT reuse +step 16: Cache-DiT reuse +step 17: Dense computed step +step 18: Cache-DiT reuse +step 19: Cache-DiT reuse +step 20: Cache-DiT reuse +step 21: Dense computed step +step 22: Cache-DiT reuse +step 23: Cache-DiT reuse +step 24: Cache-DiT reuse +step 25: Dense computed step +step 26: Cache-DiT reuse +step 27: Cache-DiT reuse +step 28: Cache-DiT reuse +step 29: Dense computed step +step 30: Cache-DiT reuse +step 31: Cache-DiT reuse +step 32: Cache-DiT reuse +step 33: Dense computed step +step 34: Cache-DiT reuse +step 35: Cache-DiT reuse +step 36: Dense computed step +step 37: Cache-DiT reuse +step 38: Cache-DiT reuse +step 39: Dense computed step +step 40: Cache-DiT reuse +step 41: Dense computed step +step 42: Cache-DiT reuse +step 43: Dense computed step +step 44: Cache-DiT reuse +step 45: Dense computed step +step 46: Dense computed step +step 47: Dense computed step +step 48: Dense computed step +SubBlock 0.80 + Cache-DiT stride · 21 computed (6 dense + 15 sparse) · 28 reused · 14.34 s +step 0: Dense computed step +step 1: Dense computed step +step 2: Dense computed step +step 3: Dense computed step +step 4: Cache-DiT reuse +step 5: Dense computed step +step 6: Cache-DiT reuse +step 7: Dense computed step +step 8: Cache-DiT reuse +step 9: Cache-DiT reuse +step 10: Computed with SubBlock sparse attention +step 11: Cache-DiT reuse +step 12: Cache-DiT reuse +step 13: Computed with SubBlock sparse attention +step 14: Cache-DiT reuse +step 15: Cache-DiT reuse +step 16: Cache-DiT reuse +step 17: Computed with SubBlock sparse attention +step 18: Cache-DiT reuse +step 19: Cache-DiT reuse +step 20: Cache-DiT reuse +step 21: Computed with SubBlock sparse attention +step 22: Cache-DiT reuse +step 23: Cache-DiT reuse +step 24: Cache-DiT reuse +step 25: Computed with SubBlock sparse attention +step 26: Cache-DiT reuse +step 27: Cache-DiT reuse +step 28: Cache-DiT reuse +step 29: Computed with SubBlock sparse attention +step 30: Cache-DiT reuse +step 31: Cache-DiT reuse +step 32: Cache-DiT reuse +step 33: Computed with SubBlock sparse attention +step 34: Cache-DiT reuse +step 35: Cache-DiT reuse +step 36: Computed with SubBlock sparse attention +step 37: Cache-DiT reuse +step 38: Cache-DiT reuse +step 39: Computed with SubBlock sparse attention +step 40: Cache-DiT reuse +step 41: Computed with SubBlock sparse attention +step 42: Cache-DiT reuse +step 43: Computed with SubBlock sparse attention +step 44: Cache-DiT reuse +step 45: Computed with SubBlock sparse attention +step 46: Computed with SubBlock sparse attention +step 47: Computed with SubBlock sparse attention +step 48: Computed with SubBlock sparse attention + + +Full step: packed video + audio computed + +SubBlock sparse step: fewer KV blocks + +Cache-DiT reuse: packed block stack reused +T2VA · 5 s · 49 denoising steps + diff --git a/public/images/blog/minimax-h3-h200/subblock-score-distribution.svg b/public/images/blog/minimax-h3-h200/subblock-score-distribution.svg new file mode 100644 index 000000000..47d61fbf5 --- /dev/null +++ b/public/images/blog/minimax-h3-h200/subblock-score-distribution.svg @@ -0,0 +1,135 @@ + +SubBlock score distributions and cutoff bands +Score distributions for sparsity 0.50 and 0.75 across four MiniMax-H3 workloads. Vertical lines are medians of per-row routing cutoffs; shaded bands are visual cutoff neighborhoods, not confidence intervals. + +SubBlock score distribution and cutoff bands + +sparsity 0.50 · per-row score distribution and cutoff + +sparsity 0.75 · per-row score distribution and cutoff +T2VA · 5s +median per-row cutoff 6.734 (0.50) / 7.577 (0.75) + + + + +0 + +5 + +10 + +15 + +0.0 + +1.0 + +2.0 + +3.0 + +4.0 + +5.0 + + + + +Score (natural-log units) +Scores per bin (%) +T2VA · 10s +median per-row cutoff 6.343 (0.50) / 7.173 (0.75) + + + + +0 + +5 + +10 + +15 + +0.0 + +1.0 + +2.0 + +3.0 + +4.0 + +5.0 + + + + +Score (natural-log units) +Scores per bin (%) +FL2VA · 5s +median per-row cutoff 6.526 (0.50) / 7.473 (0.75) + + + + +0 + +5 + +10 + +15 + +0.0 + +1.0 + +2.0 + +3.0 + +4.0 + +5.0 + + + + +Score (natural-log units) +Scores per bin (%) +FL2VA · 10s +median per-row cutoff 6.283 (0.50) / 7.173 (0.75) + + + + +0 + +5 + +10 + +15 + +0.0 + +1.0 + +2.0 + +3.0 + +4.0 + +5.0 + + + + +Score (natural-log units) +Scores per bin (%) +0.75 retains most score mass above the row-local median; shaded bands are visual cutoff neighborhoods. +