MiniMax H3 • Low-VRAM MLP Chunking (internal)
The other half of H3's low-VRAM story (the MLP half)
- guider
- guider
- mlp_chunk_state
Everyone talks about attention when a big video model OOMs, but the feed-forward MLP layers are just as hungry - they blow up the token count into an even wider intermediate space. This node is the low-VRAM MLP half of the pack's memory strategy: it wraps your guider so H3's transformer MLPs run in token chunks instead of all at once. It's marked "(internal)", it's hidden from the normal node menu, and you almost certainly don't need to touch it - but if you're hand-building a low-VRAM sampler graph, this is the knob.
What it does
Feed it a guider and it returns a wrapped guider with token-chunked MLP execution installed, plus an mlp_chunk_state output carrying diagnostics. The inputs are the memory tune-up kit:
chunk_tokens(default 8192) - the MLP chunk size. 8192 is the pack's "safe default"; smaller (4096/2048/1024/512) buys VRAM at a speed cost, larger is faster but hungrier. 0 effectively disables chunking for A/B tests.max_blocks(default 128) - how many transformer blocks the chunking applies to.sol_mode(auto/existing/sol/scheduled_sol) plus the wholesol_*family - this mirrors the Sampler's attention controls, because MLP chunking and the Sol attention path are two halves of the same bounded-memory strategy. The pack keeps stock/fallback math when parity checks fail, so you're not locked into an approximation path by default.
The rest - vram_activation_reserve_mb, the inter_block_vram_guard_* group, late_block_guard_*, step_boundary_cleanup_mb, sol_sigma_hi/sol_sigma_lo - are the same VRAM-governor settings the Sampler exposes. Leave them at defaults unless a console message points at them.
Why it exists
The Long Media Sampler already does all of this automatically via its mlp_chunk_tokens input. This node exists for people building the sampling graph by hand (the "manual" workflow mode, or diagnostics), where you need the same chunked MLP behavior without pulling in the whole Sampler. The README's frame is explicit: resident INT8 MLP execution and adaptive VRAM policy that preserves stock math when it can - a "bounded but faithful" approach rather than a lossy shortcut.
Install
Part of ComfyUI-MiniMax-H3-LongMedia. Manager search "MiniMax-H3-LongMedia", or:
cd ComfyUI/custom_nodes
git clone https://github.com/vizart-vj/ComfyUI-MiniMax-H3-LongMedia
restart, plus the H3 checkpoint and VAEs (MiniMaxAI/MiniMax-H3, ~42.5 GB, community license excludes US/EU/UK/Korea).
Troubleshooting
If you wire this in and memory doesn't move, the usual suspect is that a LoRA or memory pack already patched the MLP path - the node cooperates rather than tramples, so check the console for a "patch already present" style message. If output quality shifts when chunking is active, that's the fallback math doing its job: the pack only keeps chunked paths where numerical parity holds, and a visible quality change usually means you're on a path that failed a parity check. And remember the production advice applies here too - keep Dynamic VRAM on and don't launch with --disable-dynamic-vram, since the whole low-VRAM story coordinates with ComfyUI's dynamic residency.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| guider | GUIDER | — | |
| chunk_tokens | INT | 8192256–131072 | — |
| max_blocks | INT | 1281–256 | — |
| sol_mode | COMBO | existing | 4 options: auto, existing, sol, scheduled_sol |
| sol_tau_start | FLOAT | 1.300–4 | — |
| sol_tau_end | FLOAT | 0.800–4 | — |
| sol_curve | COMBO | linear | 6 options: linear, cosine, sqrt, smoothstep, exponential, step |
| sol_min_tokens | INT | 4096256–131072 | — |
| sol_dense_percent | FLOAT | 0.000–0.9 | — |
| sol_sink_conditioning | COMBO | exact_kv | 3 options: exact_kv, exact_kv_and_rows, off |
| sol_qkv_chunk_tokens | INT | 81920–131072 | — |
| sol_out_proj_chunk_tokens | INT | 245760–131072 | — |
| vram_activation_reserve_mb | INT | 40960–12288 | — |
| inter_block_vram_guard_mb | INT | 20480–8192 | — |
| inter_block_guard_cooldown_blocks | INT | 40–32 | — |
| inter_block_guard_emergency_mb | INT | 5120–4096 | — |
| inter_block_guard_emergency_cooldown_blocks | INT | 30–32 | — |
| late_block_guard_start | INT | 400–127 | — |
| late_block_guard_target_mb | INT | 61440–12288 | — |
| late_block_guard_min_cached_mb | INT | 5120–4096 | — |
| step_boundary_cleanup_mb | INT | 20480–8192 | — |
| sol_sigma_hi | FLOAT | 1.0000-1000–1000 | — |
| sol_sigma_lo | FLOAT | 0.0000-1000–1000 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| guider | GUIDER | — |
| mlp_chunk_state | H3_BLOCK_MEMORY_TRACE_STATE | — |