☰
LongCat-Video显存调度优化指南:offload_kv_cache如何释放GPU显存
2026/10/7 8:14:18 网站建设 项目流程

LongCat-Video显存调度优化指南:offload_kv_cache如何释放GPU显存

【免费下载链接】LongCat-Video项目地址: https://gitcode.com/GitHub_Trending/lo/LongCat-Video

LongCat-Video 是美团开源的 13.6B 参数视频生成模型,统一支持文生视频、图生视频与长视频续写。在长视频续写场景中,offload_kv_cache开关可以将注意力 KV 缓存从 GPU 显存卸载到 CPU 内存,从而释放显存,让消费级显卡也能跑出 720p 分钟级长视频 🎬。本文带你看懂它的原理与正确用法。

为什么长视频生成会"爆显存"?

先拆解一下显存都花在哪了:

显存占用项说明
DiT 主干权重13.6B 参数,bf16 下约 27GB
文本编码器 / VAEUMT5 + 视频 VAE,约几 GB
去噪中间激活随分辨率与帧数线性增长
KV 缓存use_kv_cache开启后全程驻留,随 DiT 深度、条件帧数增长

其中 KV 缓存最容易被忽略:视频续写(Video-Continuation)任务里,前 13 帧"条件帧"的内容在 50 步去噪中完全不变,LongCat-Video 用use_kv_cache=True把这些条件帧的 K/V 张量只算一次、缓存复用,省掉每步重复计算。代价是——这份缓存会一直留在 GPU 上,分辨率越高、条件帧越多,占用越大,通常要额外吃掉 1~3GB 甚至更多显存 💡。

offload_kv_cache 的三步工作机制

开启offload_kv_cache=True后,显存调度分三步完成:

① 一次性缓存条件帧 K/V管线在去噪循环开始前,通过 _cache_clean_latents 对干净的条件潜变量做一次前向,收集每个 DiT block 的 K/V 张量。

② 缓存整体搬运到 CPU这是核心一步。在 DiT 前向的 block 循环中(longcat_video_dit.py):

if offload_kv_cache: kv_cache_dict_ret[i] = (kv_cache[0].cpu(), kv_cache[1].cpu()) else: kv_cache_dict_ret[i] = (kv_cache[0].contiguous(), kv_cache[1].contiguous())

一行.cpu()就把缓存搬出 GPU,显存立刻归还给去噪过程使用。

③ 每步按需取回去噪时每个 block 会把缓存迁回计算设备再拼接进注意力(longcat_video_dit.py、attention.py)。缓存不在 GPU 时这步需要一次 CPU→GPU 拷贝,这就是"省显存"换"一点速度"的代价。

上手步骤:如何开启 CPU 卸载

  1. 克隆仓库并安装依赖(见 README.md 与 requirements.txt):

    git clone https://gitcode.com/GitHub_Trending/lo/LongCat-Video
  2. 在调用处把参数改为 True。官方示例脚本(如 run_demo_long_video.py、run_demo_interactive_video.py)默认写死offload_kv_cache=False,显存紧张时在generate_vc(...)调用中改成:

    output = pipe.generate_vc( video=current_video, prompt=prompt, use_kv_cache=True, # 保留 KV 缓存加速 offload_kv_cache=True, # 缓存卸载到 CPU,释放显存 )
  3. Avatar 数字人任务同理:音频驱动视频的 pipeline_longcat_video_avatar.py 同样支持该参数,在多段续写长视频时建议按需开启。

显存收益与速度权衡:什么时候该开?

场景建议理由
24GB 单卡 + 480p 长视频✅ 建议开启缓存占用可观,卸载后不容易 OOM
720p 或更长条件帧✅ 建议开启缓存随分辨率放大,收益最大
48GB 以上大显存 / 多卡并行⏸️ 保持默认 False每步都有 CPU→GPU 拷贝,关闭更快
追求最快出片速度⏸️ 关闭用显存换时间,缓存常驻 GPU

几个实用提示:

  • 🔑offload_kv_cache只在use_kv_cache=True时才有意义,二者配套使用;
  • 🧹 生成结束后管线会调用 _clear_cache(gc.collect()+torch.cuda.empty_cache())彻底归还显存;
  • ⚡ 若显存瓶颈主要在模型权重而非缓存,可考虑 INT8 量化(--use_int8,Avatar 1.5 支持)或--context_parallel_size多卡切分,与 KV 卸载是互补的两条路。

总结

offload_kv_cache是 LongCat-Video 内置的低成本显存调度开关:一行参数把 KV 缓存从 GPU 搬到 CPU,为长视频去噪腾出关键显存,仅付出每步一次张量拷贝的少量时间代价。显存紧张时大胆开启,它是消费级显卡玩转 13.6B 视频生成模型的实用技巧 ✅。更多架构细节可参阅仓库中的技术报告。

【免费下载链接】LongCat-Video项目地址: https://gitcode.com/GitHub_Trending/lo/LongCat-Video

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

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

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

立即咨询