下文为 Minimax_5090 ~/h3_native/out/summary_ref2va_native.md 全文渲染 (含 8/17 立项验证、8/18 最终优化栈重验、8/18 768p15s 21:9 容量测试三章)。 原始 markdown:summary_ref2va_native.md

官方 Ref2VA 原生 diffusers 管线 — 立项验证(2026-08-17,Minimax_5090 GPU6)

结论

可行,已跑通。 官方 transformer_ref + lightx2v ref2v turbo 4step v0.1(alpha 烙入)
+ 剪枝 r8 + fp8 + sage + compile + group-offload,768×1344×124f/5 steps(=4 NFE),
热跑 227s/条、峰值 24-25.5 GiB,两条样片换人成立。

权重线(全部新产物)

路径说明
官方 transformer_refHF 缓存 snapshot 42ed227e.../transformer_ref/(62G)本次 snapshot_download 补齐(HF ~700MB/s,73s)
ref2v turbo LoRA~/h3_native/lora_converted/minimax_h3_ref2v_turbo_4step_v0.1_bf16.safetensors文件 metadata alpha=8 / rank=128(与 sglang 文档一致)→ lora_B × 1/16 烙入 + .default. 段清洗
剪枝产物~/h3_native/weights/ref2va_turbo4_pruned_r8/(38G)prune_ref2va_diffusers.py(= prune_fl2va 改 subfolder="transformer_ref"),LoRA 先融合再剪;curve residual 4.259e-05(官方基线 4.3e-05 同量级),51 个 adaln linear 折叠

推理驱动

~/h3_native/ref2va_render.py(batch_render.py 的 ref2va modular 用法 × fl2va_render.py 的
量化/compile/计时骨架):

速度分解(768×1344×124f,5 steps → 4 NFE,fp8+sage+compile+offload,GPU6)

阶段冷(首条)热(同进程第二条)
组件加载+量化+compile 声明48-53s(一次性)
Setup3s3s
文本编码(Qwen3-VL 流式)27-32s0s(embed-cache 命中)
参考编码(VAE:视频参考+2048 图参)32s32s
denoise 4 NFE194-271s(首 1-2 步 66-135s 是 compile 预热)步稳态 31.3-31.8s;本次首步 81s(图参尺寸变化触发一次重编译)
VAE decode15s15s
encode_video2s2s
端到端246-350s227s(形状全热理论 ≈178s)

峰值显存:24.1-25.5 GiB(offload 模式)。

与当年 ComfyUI ref2va 生产数字对照

ComfyUI 生产(int8_convrot,4步)本原生管线(fp8 r8 剪枝,4 NFE)
480p/3s 热跑9.5-9.7s未测(ref2va 工作流强制 ≥120 帧=5s,无 3s 档)
768p/124f~125s/条227s 热(全热 ≈178s)

差距主要不是内核而是任务口径:本次每条都带完整视频参考块(+36k 行,序列翻倍,attention
开销超线性),且 offload 模式下参考编码/decode 各付 ~15-32s 搬运;ComfyUI 的 125s 数字
对应的生产任务未必带同规模视频参考。denoise 稳态 31.5s/步 × 4 = 126s,与 ComfyUI 全程 125s
同量级——大头都在 denoise,原生线没有数量级劣势,进一步压要么 nvfp4(画质代价)要么砍参考 token。

样片(~/h3_native/out/)

计时明细:~/h3_native/out/stats_ref2va.jsonl;日志 /tmp/ref2va_{c1_off,m2case}.log

已知约束


2026-08-18 最终优化栈重验(viggle 定稿栈移植)

同步与改造

重验(768×1344×124f,steps 5=4 NFE,fp8 r8 剪枝,sage+compile,同款 9202c3df case ×2/进程)

配置 A:resident + H3_MEMOPT=1 FFCHUNK=4 + --denoise-evict-vae(GPU6)——OOM,但败点变了

fp8 常驻静息 = 29.1 GiB(fp8 transformer 实测 18.86 GiB + VAE/其余),只剩 ~2.2 GiB;
参考编码第一笔 1.43 GiB fp32 像素张量(2048px 图参归一化)即 OOM——比 8/17 的败点
(denoise 第 0 步差 654MB)更早。evict 钩子只救 denoise,救不了 ref-encode。

配置 A2:A + --refencode-evict-transformer(GPU7)——denoise 解锁,decode 差 58MB

配置 B(定稿):offload + H3_MEMOPT=1 FFCHUNK=4 + --denoise-evict-vae(GPU6)

指标8/17 裸 offload 基线本次 B
热跑端到端227s(含一次跨 case 重编译;全热理论 ≈178s)188.0s(同 case 全热,首 NFE 37.4s)
冷跑端到端246-350s273.9s
denoise 稳态31.3-31.8s/步31.2-31.3s/步(持平——三件套是省显存不是提速)
峰值显存24.1-25.5 GiB17.3-17.5 GiB(−7~8G:denoise 期 VAE 已 evict)

热跑分解:setup 3 + 文本 0(embed-cache)+ ref-encode 32.5 + denoise 131.2(evict out 5.5 含内)
+ vae back 3.7 + decode 19.5 + encode_video 1.7 ≈ 188s。
两条样片正常出片(out/ref2va_9202c3df_v2{,warm}.mp4),计时在 out/stats_ref2va.jsonl

生产跑法:`H3_MEMOPT=1 H3_MEMOPT_FFCHUNK=4 run_ref2va.sh <gpu> <tag> --manifest ...
--transformer-dir ~/h3_native/weights/ref2va_turbo4_pruned_r8 --quantize fp8 --compile --offload
--denoise-evict-vae --steps 5 --num-frames 124 --width 768 --height 1344`

fp8 .pt 序列化

~/h3_native/weights/ref2va_turbo4_pruned_fp8.pt(18.86 GiB,.building→原子 rename)已生成:
quantize 29.2s + save 21.9s,--verify 全过(312 quantized + 328 plain tensors bitwise 一致,
GPU7 真 forward 逐位相等)。加载走 save_quantized.load_quantized_transformer(meta shell +
assign=True,~19s)。注意:ref2va_render.py 尚无 --quantized-ckpt 接线(按指示未强行加),
接线可照 native_worker.py 的用法,省每次启动的 CPU quantize ~29s+38G 读盘。

遗留


768p15s 21:9 容量测试(2026-08-18,GPU4-7 并行,定稿流式栈)

结论

768 短边 / 21:9(1792×768)/ 15.083s(362f)/ 4 NFE 在 32G 卡上全矩阵跑通,零 OOM。
视频参考按产品上限拉满 15s(单槽或双槽 7.5s+7.5s)+ 768p 源图参:768 参考 canvas 峰值
29.8-30.2 GiB(余量仅 ~1.2G,这就是参考上限);480 参考 canvas 峰值 24.0-24.2 GiB
且全程快 ~1.8×,换人肉眼与 768 档持平、并未被模型无视。

固定配置:fp8 r8 剪枝 + --compile + sage + --offload + H3_MEMOPT=1(FFCHUNK 不开)
+ --denoise-evict-vae + --steps 5(=4 NFE)。输出 362f=15.083s 通过新 --max-duration 15.1
覆盖(fl2va 同款 property 覆盖,15.0s 上限是 MiniMaxH3ModularPipeline.max_duration property)。

为跑通付出的两个新驱动改动(纯显存搬运,数值不变)

另新增:--ref-canvas <px>(只动视频参考 canvas;必须在 load_components 之后设置,
load_components 会把 ConfigSpec 默认值重置回 768——第一轮 480 档白跑就是这个坑,已在驱动内
修正并加 render 前 assert)、manifest cond2 第二视频槽(官方支持每请求至多 3 视频参考,
每个都截到输出帧数、向下贴齐 17n+5)。备份:ref2va_render.py.bak-pre15s

矩阵与实测(冷=进程内首条含 21:9 新形状编译预热;热=同进程第二条)

测试参考构成参考canvas总行数(算)峰值GiB稳态s/步冷e2e热e2e换人
T1(GPU4)15.08s 单槽视频 + 图参768(实为1568×672)~281.6k29.8/30.1240-2471410.5s1149.7s成立
T2(GPU5)同 T1480(实为960×416)~207.4k24.0/24.2134-137803.7s651.9s成立,肉眼持平
T3(GPU6)7.5s+7.5s 双槽 + 图参768~282.6k30.0/30.2236-2441435.6s1131.0s成立(后半段内容正确驱动)
T4(GPU7)同 T3480~206.3k24.0/24.2120-122768.0s633.3s成立

行数构成(潜帧=(帧-5)/17×5+2;行=潜帧×W/32×H/32):目标 107×56×24=143,808;
视频参考 768canvas 107×49×21=110,103(双槽 2×52×1029=107,016)、480canvas 107×30×13=41,730
(双槽 40,560);2048 图参 64×107=6,848;presentation 文本行实测 T1 19,663 / T2 13,807 /
T3 23,728 / T4 13,840(480 canvas 连 Qwen 视觉 token 也省);音频 ~1.2k。

热跑分解(T1):ref-encode 96.3s + denoise 4×~243s + vae back 4.5 + decode 67.0 + encode_video 7.4;
T2 同项:32.1 / 4×~135 / 3.7 / 65.0 / 6.0。文本编码(embed-cache 未命中时)768档 102-120s、
480档 38-41s。图参源 690×1152 本就 ≤768p 短边,canvas 2048 未动。

"参考最多能带多少"

样片:out/ref2va_15s_t{1,2,3,4}_{cold,warm}.mp4;素材 testdata_15s/(21:9 由 9202c3df
竖版源 blur-pad 而成);计时 out/stats_ref2va.jsonl;日志 /tmp/ref2va_t{1,2,3,4}_15s.log