海光单卡实测:用LoRA与FlashVSR把MiniMax-H3的768P视频放大到2K

768P 直出 2K 的账,要拆成两半算:生成端用 Turbo LoRA 把采样步数从二十步压到个位数,画质端交给 FlashVSR 做两倍放大。这套组合在一张 64GB 显存的海光 K100_AI 上验证跑通,全程 ComfyUI,不依赖 NVIDIA 卡。

先说清这套工作流的分工

链路是「文本提示词 → LoRA 加速的 MiniMax-H3 生成 768P → FlashVSR 放大到 2K」。两个环节各管一件事:生成端解决慢,放大端解决分辨率不够。

生成端的核心是 MiniMax-H3 Turbo LoRA(来自 larryvrh/MiniMax-H3-Turbo-Lora,推荐 v4 版本 minimax_h3_turbo_v4_step600_ema.safetensors),采样步数从约 20 步压到 4–8 步。低步数下音视频联合生成容易出问题,所以采样器要换成双时钟 Euler(MiniMaxH3DualClockEulerSampler),这是专门为 Turbo LoRA 补音频一致性做的节点。节点连接顺序:UNETLoader → LoraLoaderModelOnly → BasicGuider & BasicScheduler → SamplerCustomAdvanced。

放大端用 FlashVSR(1038lab/FlashVSR),扩散模型路线的视频超分,支持 2 倍和 4 倍。实测 124 帧(约 5 秒)的视频处理一次只要 56 秒。节点链:VHS_LoadVideoFFmpeg → AILab_FlashVSR_Advanced → VHS_VideoCombine。

模型清单与磁盘预算

完整组合约 40GB,磁盘留 50GB 以上再动手:

diffusion_models/minimax_h3_fl2va_pruned_int8_convrot.safetensors (约19.5GB)
text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors (约14.6GB)
vae/minimax_h3_video_vae_fp16.safetensors
vae/minimax_h3_audio_vae_fp32.safetensors

自定义节点装四个仓库:ComfyUI-MiniMax-H3-Turbo、ComfyUI-MiniMaxH3DualClockSampler、comfyui-speed-minimaxH3、ComfyUI-FlashVSR。FlashVSR 模型首次跑节点会自动下载,国内网络不稳就手动来:

modelscope download --model 1038lab/FlashVSR --local_dir ./models/FlashVSR

一个容易漏的动作:模型下载完先验完整性。ModelScope 支持断点续传,但中断后拼接出的文件偶有损坏,加载时报 safetensors 格式错。下载完对关键大文件跑一遍 sha256 与仓库标注比对,五分钟换个安心。

FlashVSR 节点的参数,64GB 显存下这么配最稳:

model_version: Full (Best Quality)
scale: 2
enable_tiling: false
sageattention: enable
stability_level: 11

环境报错清单:六个高频坑

ComfyUI 版本过低。 导入工作流后 H3 节点一片红,根因是原生支持 v0.30.0 才合并进主仓。便携版直接下 ComfyUI_windows_portable_nvidia.7z,自带 torch 2.9.1+cu130。

FlashVSR 缺依赖。 运行报 ModuleNotFoundError: block_sparse_attn,这个 wheel 不会随节点自动装:

pip install block_sparse_attn-*.whl  # 匹配py3.12 + torch2.8+
pip install opencv-python numpy einops

FlashVSR 模型下载卡死。 Hugging Face 国内访问问题,走 hf-mirror.com 或 ModelScope 手动下;如果之前下了一半,删掉 models/FlashVSR/ 重来,避免半截文件捣乱。

pruned 主模型吃不掉 LoRA。 Turbo LoRA 要求主模型保留完整 AdaLN 层结构,名字带 pruned 的版本可能剪掉了 LoRA 依赖的层。加载后生成效果毫无变化,先查这个。上文清单里的 pruned INT8 版是给纯推理用的,要走 LoRA 就换 minimax_h3_fl2va_bf16.safetensors 或 minimax_h3_fl2va_int8_convrot.safetensors。

LoRA 键名缺前缀。 原始 LoRA 的键名没有 ComfyUI 要求的 diffusion_model. 前缀,加载成功但完全不起作用。用转换脚本处理一遍,只改键名,不动数值:

python custom_nodes/ComfyUI-MiniMaxH3DualClockSampler/convert_h3_lora_for_comfyui.py \
  /path/to/minimax_h3_turbo_v4_step600_ema.safetensors \
  models/loras/minimax_h3_turbo_v4_step600_ema.safetensors

带音频输入时形状不匹配。 ref2va 这类涉及音频输入的工作流,配 Turbo LoRA 会报 RuntimeError: shape mismatch——音频存在时 patch 矩阵带 3 个 modulation segments,逐元素相加直接失败。等仓库修复,或者这类场景先别上 Turbo。

采样与放大端的四个坑

SageAttention 出纯噪声:H3 DiT 的 attention 调用没传 low_precision_attention=False,INT8 QK 路径把 H3 处理坏了。主仓库 PR #15263 已修,升级 ComfyUI 即可;急用就先关 --use-sage-attention。

长提示词触发 C++ 断言崩溃:kv_len % 128 落在 65–127 区间时 SageAttention 的 SM90 分支断言失败,KJNodes 的 PR #729 已修。

4 步生成音频爆音:标准 Euler 扛不住 4 步的音视频时序一致性,换双时钟采样器解决。注意它不能和 MiniMax H3 Sigma Shift 节点同时用。

VAE 解码报设备不匹配:Video/Audio VAE 绕过了 ComfyUI 的 weight-cast 机制,offload 模式下参数留 CPU、激活在 GPU。PR #15268 已修;临时规避就是给够显存别让 VEA 进 offload。

FlashVSR 侧的两个独立问题

输出只有声音没画面:换 VHS_LoadVideoFFmpeg 加载视频,默认的 Load Video (Upload) 节点解码偶发只读音频轨。

长视频 OOM:超过 100 帧就容易炸显存,因为默认一次性加载全部帧。四个手段组合用:enable_tiling=true 配 tile_size=384(低显存模式)、frame_chunk_size 设 20–50 分批、开 unload_dit 在解码前卸掉 DiT、resize_factor=0.5 先缩再放大。另外画面黑边和撕裂是旧版 Bug,升到 v1.1.0 以上就没 了。

分辨率策略与验收口径

768P(1344×768)的像素量是 480p 的约 2.5 倍,叠加显存卸载开销后实际耗时放大 3–5 倍,直接一步到位不划算。按三档走:构图预览 832×480、8–12 步;质量测试 1024×576、16–20 步;最终成片 1344×768、20 步只跑入选镜头。480p 试五轮约 15 分钟,768P 试五轮一小时起步。

还有一笔账要算清楚:所谓「2K」是 FlashVSR 的 2 倍放大,短边 768 出来约 1536,跟显示器的 2560×1440 不是一回事。验收时别拿分辨率数字说话,用 ffprobe 实测:

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height,nb_frames -of csv output.mp4

宽高对得上预期、帧数与源一致,才算过。画质上 6–8 步是速度和质量的平衡点,4 步会有塑料感和过度锐化,追求极限速度才用它。

最后是海光 DCU 的特殊项:DCU 走 ROCm 不是 CUDA,装 torch-2.9.1+rocm 并确认 DTK 驱动就位,启动时加 --disable-cuda-malloc,否则 ComfyUI 识别不到卡。生成端慢和放大端糊两个问题分开治之后,64GB 单卡产出 2K 级视频这条路是通的。

0

评论0

请先
显示验证码
没有账号?注册  忘记密码?