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 |
| 文本编码器 / VAE | UMT5 + 视频 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 卸载
克隆仓库并安装依赖(见 README.md 与 requirements.txt):
git clone https://gitcode.com/GitHub_Trending/lo/LongCat-Video在调用处把参数改为 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,释放显存 )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),仅供参考