☰
Causal-Forcing 实时 Web Demo 部署:低显存动态换出与 TensorRT/TAEHV 加速全解析
2026/10/16 6:26:22 网站建设 项目流程

【免费下载链接】Causal-Forcing

[ICML 2026] Official codebase for "Causal Forcing: Autoregressive Diffusion Distillation Done Right for High-Quality Real-Time Interactive Video Generation" & Causal Forcing++

项目地址:https://gitcode.com/gh_mirrors/ca/Causal-Forcing
点击查看免费下载

Causal-Forcing 是面向实时交互视频生成的高效扩散蒸馏方案,其官方 Web Demo 让你在浏览器中输入提示词,视频帧就能实时逐帧推送播放。本文带你完成 Causal-Forcing 实时 Web Demo 的完整部署,并深入解析低显存动态换出机制与 TensorRT、TAEHV、FP8 等加速选项,帮助你在单张显卡上跑通高质量实时视频生成。

🎬 Causal-Forcing Web Demo 是什么

Causal-Forcing 通过自回归扩散蒸馏(Causal ODE / Causal Consistency Distillation)驱动非对称 DMD,在同等训练预算和推理效率下显著优于 Self Forcing,并原生统一了 T2V 与 I2V。

官方仓库提供了一个开箱即用的 Web 前端 Demo,核心特性如下:

特性说明
实时帧推送每个 block 去噪 + 解码完成后,帧立即编码为 base64 经 SocketIO 推送到浏览器
低显存模式空闲显存 < 40 GB 时自动启用动态换出(dynamic swap)
加速开关前端可一键切换 TAEHV 轻量解码器、FP8 量化、torch.compile
TensorRT 支持通过--trt参数加载预构建的 INT8 VAE 引擎

整个推理与训练管线如下图所示:

📦 环境安装:5 步搞定

Demo 的推理环境与 Self Forcing 相同,在 Linux + NVIDIA GPU 上执行:

git clone https://gitcode.com/gh_mirrors/ca/Causal-Forcing cd Causal-Forcing conda create -n causal_forcing python=3.10 -y conda activate causal_forcing pip install -r requirements.txt pip install git+https://github.com/openai/CLIP.git pip install flash-attn --no-build-isolation python setup.py develop

关键点:

  • requirements.txt 中已包含 Demo 依赖:flask、flask-socketio、torchao(FP8 量化用)、onnx/onnxruntime(TensorRT 构建用)
  • 需要系统安装ffmpeg,Demo 结尾会用它将逐帧 JPEG 合成为 MP4

📥 模型权重下载

# Wan 底座(VAE / 文本编码器 / 因果 Transformer 基础) hf download Wan-AI/Wan2.1-T2V-1.3B --local-dir wan_models/Wan2.1-T2V-1.3B # Causal Forcing frame-wise 4-step 蒸馏模型(Demo 默认) hf download zhuhz22/Causal-Forcing framewise/causal_forcing.pt --local-dir checkpoints # Causal Forcing++ 1-step / 2-step(延迟更低) hf download zhuhz22/Causal-Forcing causal-forcing++/framewise-2step.pt --local-dir checkpoints hf download zhuhz22/Causal-Forcing causal-forcing++/framewise-1step.pt --local-dir checkpoints

💡 TAEHV 轻量解码器的权重taew2_1.pth无需手动下载——首次勾选 TAEHV 时,demo.py 会自动拉取到checkpoints/目录。

🚀 启动命令:一行跑起来

python demo.py \ --checkpoint_path checkpoints/framewise/causal_forcing.pt \ --config_path configs/causal_forcing_dmd_framewise.yaml \ --port 5001

启动后访问http://localhost:5001,输入提示词即可开始生成。如果已构建好 TensorRT 引擎,追加--trt即可:

python demo.py --checkpoint_path ... --config_path ... --trt

启动时 Demo 会打印当前空闲显存,并据此决定策略:

  • 显存充足(≥ 40 GB):文本编码器直接常驻 GPU
  • 显存紧张(< 40 GB):自动安装DynamicSwapInstaller,进入低显存模式

生成流程参考 configs/causal_forcing_dmd_framewise.yaml:21 个 latent 帧按 framewise 模式切成 7 个 block,每个 block 走 4 步去噪(denoising_step_list: [1000, 750, 500, 250]),默认帧率 6 fps。

顺带一提,同一仓库的 inference.py 还支持 I2V,只需--i2v --data_path prompts/i2v,以下就是 I2V 条件首帧示例:

🧠 低显存动态换出机制全解析

这是 Demo 最精巧的部分,核心代码在 demo_utils/memory.py,借鉴自 FramePack。

DynamicSwapInstaller:参数级"按需搬砖"

它会对模型的每个子模块打补丁,重写__getattr__:

  • 当你访问某个weight/buffer时,自动执行.to(gpu)再返回
  • 也就是说权重平时躺在 CPU 内存里,用到的那一瞬间才搬上 GPU,用完被 CUDA 缓存机制自然淘汰

在 demo.py 中这样启用:

low_memory = get_cuda_free_memory_gb(gpu) < 40 if low_memory: DynamicSwapInstaller.install_model(text_encoder, device=gpu)

move_model_to_device_with_memory_preservation:带预留的搬运

每次编码文本前,Demo 会调用该函数把文本编码器搬上 GPU,但始终为后续去噪预留空闲显存 + 5 GB:逐模块搬运,一旦剩余显存低于预留线就立即停止并empty_cache()。这保证了 T5 文本编码器(bf16)与因果 Transformer(fp16)永远不会互相挤爆显存。

效果:单卡 24 GB 级别的消费级显卡即可跑通完整 Demo,代价仅是文本编码阶段稍慢。

⚡ 四大加速选项深度对比

加速项作用对象显存收益速度收益开启方式
TAEHVVAE 解码器显著(权重小一个量级)快(逐帧串行解码)前端勾选,运行时热切换
TensorRT INT8VAE 解码器中最快启动参数--trt
FP8 量化Transformer约省一半权重显存中前端勾选,首次生效
torch.compileTransformer + VAE基本不变首次编译 5-10 分钟,之后稳定提速前端勾选

1️⃣ TAEHV:轻量解码器热切换

TAEHV(Tiny AutoEncoder for Hunyuan Video)实现于 demo_utils/taehv.py。Demo 会在运行时把 pipeline 的 VAE 直接换成 TAEHV:

  • decode_video(latents, parallel=False):parallel=False是低显存模式,逐时间步串行处理,只用 O(1) 级额外显存
  • 切换无重启成本:勾选后下一次生成即生效(进度条会提示 "Switching VAE decoder...")

2️⃣ TensorRT INT8 引擎

启用--trt时,demo_utils/vae.py 中的VAETRTWrapper会加载预构建引擎checkpoints/vae_decoder_int8.trt,逐帧调用execute_async_v3解码。

没有现成引擎?仓库提供了完整构建脚本 demo_utils/vae_torch2trt.py,流程是:

  1. 用 dummy 输入(1 个 latent 帧 + 32 个ZERO_VAE_CACHE缓存张量,定义见 demo_utils/constant.py)把 PyTorch 解码器导出为 ONNX
  2. 用 TensorRT 解析器构建 INT8 引擎
  3. 引擎放入checkpoints/后即可用--trt启动

3️⃣ FP8 动态量化

勾选后,Demo 调用torchao对 Transformer 做一次动态 FP8 激活 + 权重量化(Float8DynamicActivationFloat8WeightConfig(granularity=PerTensor()))。量化只发生一次(fp8_applied标记防止重复),此后每次生成都享受更小的权重带宽。

4️⃣ torch.compile

对 Transformer 与 VAE 使用max-autotune-no-cudagraphs模式编译。注意首次生成会阻塞 5-10 分钟做编译(进度条会明确提示),之后每个 block 都更快。TAEHV / TRT 模式下会自动跳过 VAE 编译。

📡 实时帧推送是怎么做到的

Demo 的"边生成边播放"依赖一条非阻塞流水线:

  1. 生成线程:每完成一个 block 的去噪与 VAE 解码,把每帧像素 tensor 投入frame_send_queue
  2. 发送线程:frame_sender_worker后台线程持续消费队列,调用 demo.py 中的tensor_to_base64_frame把帧编码为 JPEG base64,通过 SocketIO 的frame_ready事件推给浏览器
  3. 前端:收到帧立即渲染,实现"帧到达即播放",而非等整段视频生成完

前端还可随时stop_generation中止生成;全部帧发完后,ffmpeg会把保存的 JPEG 序列合成为 MP4 存入videos/目录。

🛠 常见问题与调优建议

  • 首帧偏慢?勾选 torch.compile 后第一次生成包含编译时间,属正常现象,第二次起恢复
  • 显存不够 OOM?优先勾选 TAEHV;仍紧张则确认low_memory模式已生效(启动日志会显示空闲显存)
  • 追求最低延迟?换用 Causal Forcing++ 的 1-step / 2-step 权重(记得加--use_ema推理配置,Demo 直接加载generator_ema)
  • 画质 vs 速度:TAEHV 速度最快但细节略弱于原生 VAE;TRT INT8 引擎兼顾两者
  • 精度提示:若发现生成画面模糊不收敛,README 建议检查是否误用低精度,必要时切换 FP32

📁 相关文件速查

路径说明
demo.pyWeb Demo 主入口(Flask + SocketIO)
demo_utils/memory.py低显存动态换出实现
demo_utils/taehv.pyTAEHV 轻量视频解码器
demo_utils/vae.py流式 VAE 解码器与 TensorRT 封装
demo_utils/vae_torch2trt.pyONNX → TensorRT INT8 引擎构建脚本
demo_utils/constant.pyVAE 流式缓存常量定义
configs/causal_forcing_dmd_framewise.yamlframewise 4-step 推理配置
pipeline/causal_inference.py因果推理管线(KV cache 分块生成)
prompts/demos.txt示例提示词

一句话总结:低显存动态换出让你"跑得起来",TAEHV / TensorRT / FP8 / torch.compile 让你"跑得快"——四件套组合,消费级显卡也能体验 ICML 2026 水准的实时交互视频生成。

【免费下载链接】Causal-Forcing

[ICML 2026] Official codebase for "Causal Forcing: Autoregressive Diffusion Distillation Done Right for High-Quality Real-Time Interactive Video Generation" & Causal Forcing++

项目地址:https://gitcode.com/gh_mirrors/ca/Causal-Forcing
点击查看免费下载

相关推荐

上一篇:Whosthere 网络发现工具完全指南:如何免 root 快速识别局域网中的所有设备
下一篇:little-coder Plan Mode深度解析:研究-提问-计划三步流如何大幅提升复杂任务成功率

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询