【免费下载链接】rcm
rCM & Causal-rCM: Leading and Unified Algorithms/Infrastructures for Bidirectional/Autoregressive Video Diffusion Distillation at Scale
rCM(Causal-rCM)是目前最完整的因果/自回归视频扩散蒸馏开源项目之一,它把视频生成拆成一个个小块(chunk)逐块生成,天然适合流式与交互式场景。但自回归生成有一个绕不开的瓶颈:KV cache 会随视频变长而无限膨胀,且模型只在有限时长(约 21 个 latent 帧)上训练过,直接"硬生成"超长视频会显存爆炸、画面漂移。本文带你实战 rCM 的长度外推(Length Extrapolation)功能——不重新训练、只替换推理时的缓存管理策略,就能用有界的显存生成远超训练时长的"无限长"视频。
为什么需要长度外推?
Causal-rCM 的生成方式是"逐块自回归":先生成第一块(first_chunk),之后每块(chunk_t)都依赖前面所有历史帧的 KV cache 做注意力。这里有两个问题:
- 显存无上限:生成 1 分钟视频时,KV cache 可能比模型权重还大;
- 位置越界:RoPE(旋转位置编码)按训练时的位置范围拟合,一旦生成超过训练时长(f_limit 帧),位置编码进入"没见过的区间",质量迅速劣化。
rCM 的解法非常巧妙:基础采样器一行不改,只在推理时"换一套缓存管理策略"。所有策略都集中在 rcm/inference/wan2pt1_t2v_causal_extrapolation_infer.py 的ExtrapolationRuntime类中实现,显存上限由cache_max_len()提前算好并预分配——视频可以无限长,显存占用始终有界。
策略一:Sliding Window——最简单的滑动窗口
思路:FIFO 淘汰。只保留最近 N 个块,最早的块直接丢弃,可选地永久保留开头sink_blocks个块作为"注意力锚点"(attention sink)。
适合:快速验证、对历史一致性要求不高的场景,也是脚本的默认方法。
| 参数 | 默认值 | 含义 |
|---|---|---|
--window_blocks | 6 | 窗口内最多保留的块数 |
--sw_sink_blocks | 0 | 永久保留的开头锚点块数(0=纯 FIFO) |
PYTHONPATH=. python rcm/inference/wan2pt1_t2v_causal_extrapolation_infer.py \ --distilled --dit_path assets/checkpoints/Wan2.1_T2V_1.3B_480p_causal_chunkwise.pt \ --num_steps 4 --first_chunk_t 3 --chunk_t 3 \ --extrapolation_method sliding_window --window_blocks 6 \ --num_frames 1025 \ --prompt "A cinematic shot of a snowy mountain at sunrise" \ --save_path output/sliding_window.mp4策略二:Rolling Sink——把开头内容"循环回放"
思路(Rolling Sink, Li et al., 2026):生成最初 K 个块时把它们快照成一个"记忆银行"(bank);银行满后,sink 区域按正向/反向交替的顺序从银行里循环取内容,同时让 RoPE 时间索引滑动,保持与最近块的位置连续。
好处:被淘汰的不是"遗忘",而是把视频开头的风格、主体信息反复注入上下文,长视频不容易"跑偏"。
| 参数 | 默认值 | 含义 |
|---|---|---|
--total_blocks | 6 | 记忆银行容量 K |
--sink_blocks | 5 | 银行中占用 sink 的块数 S |
--recent_blocks | 1 | 紧跟在 sink 后的最近块数(K−S) |
PYTHONPATH=. python rcm/inference/wan2pt1_t2v_causal_extrapolation_infer.py \ --distilled --dit_path assets/checkpoints/Wan2.1_T2V_1.3B_480p_causal_chunkwise.pt \ --num_steps 4 --first_chunk_t 3 --chunk_t 3 \ --extrapolation_method rolling_sink --total_blocks 6 --sink_blocks 5 --recent_blocks 1 \ --num_frames 1025 \ --save_path output/rolling_sink.mp4策略三:Infinity-RoPE——把时间坐标"相对化"⭐
思路(Infinity-RoPE, Yesiltepe et al., 2025):这是 5 种策略中最具代表性的一种。它不改变缓存内容,而是改写"坐标系统":
- Block-Relativistic RoPE:永远让最新的块落在训练时长末端(帧索引
f_limit附近),旧块整体向后平移; - Semanticization:平移后落到 0 之前的块,其时间索引被钳制到 0——相当于"抽象记忆",保留语义而不保留精确时序;
- KV Flush:只保留全局 sink 块 + 最后一个块,把中间历史清空;
- RoPE Cut:在切换点人为制造一个时间跳变(
rope_cut_delta帧),模拟"镜头切换",用于多镜头叙事。
它还支持多镜头 prompt 语法,一条命令生成有分镜的长视频:
"a man standing in a park[5s] | a man jumping[10s#] | a man sitting[10s#]"[Ns]指定该镜头时长(秒,16fps 计算);#触发 KV Flush + RoPE Cut(硬切场);|分隔镜头,总时长为各段之和(此时--num_frames被忽略)。
| 参数 | 默认值 | 含义 |
|---|---|---|
--cache_blocks | 6 | 缓存最多保留的块数 |
--ir_sink_blocks | 1 | 全局 sink 块数 |
--f_limit | 21 | 训练时长上限(latent 帧,81 像素帧≈21) |
--rope_cut_delta | 21 | RoPE Cut 的时间跳变量(0=关闭) |
--flush_interval_blocks | 0 | 周期性 KV Flush 间隔(0=关闭) |
PYTHONPATH=. python rcm/inference/wan2pt1_t2v_causal_extrapolation_infer.py \ --distilled --dit_path assets/checkpoints/Wan2.1_T2V_1.3B_480p_causal_chunkwise.pt \ --num_steps 4 --first_chunk_t 3 --chunk_t 3 \ --extrapolation_method infinity_rope --cache_blocks 6 \ --ir_sink_blocks 1 --f_limit 21 --rope_cut_delta 21 \ --prompt "A cinematic shot of a snowy mountain at sunrise" \ --save_path output/infinity_rope.mp4策略四:Deep Forcing——按注意力重要性压缩 token
思路(Deep Forcing, Yi et al., 2025):不再整块丢弃,而是按 token 粒度筛选。每个 transformer 层用 Q·Kᵀ 注意力分数给缓存里的每个 token 打分(DeepForcingTokenCollector逐层收集,支持跨块滚动查询窗口),预算不足时保留:
- Deep Sink:开头
sink_frames帧(全局锚点); - Top-C 重要 token:候选区间内注意力得分最高的 token;
- Recent Tail:最近
recent_frames帧。
压缩后通过 rcm/utils/rope.py 的rope_time_delta_原地修正 sink 与压缩区的时间编码,消除"空洞"。这是精度最高的淘汰策略,但计算开销也最大。
| 参数 | 默认值 | 含义 |
|---|---|---|
--df_sink_frames | 10 | Deep Sink 保留帧数 |
--df_budget_frames | 16 | 缓存总预算(帧) |
--df_recent_frames | 4 | 最近保留帧数 |
--df_observation_layers | 0 | 打分观测层数(0=全部层) |
策略五:Relax Forcing——用相似度挑选"最值钱"的历史帧
思路(Relax Forcing, Zhao et al., 2026):把缓存组织为Sink(全局锚点)+ History(稀疏历史)+ Tail(最近窗口)三段。History 帧不是靠注意力打分,而是用余弦相似度挑选:计算每个候选帧与 Tail 区域的对齐度(alignment),再叠加互补性奖励(complementarity,鼓励多样性),加权后取 Top-K。
score = w × alignment + (1 − w) × complement相比 Deep Forcing 的逐 token 打分,它按帧选、开销更低,且保留帧在时间上更"连贯"。
| 参数 | 默认值 | 含义 |
|---|---|---|
--rx_sink_frames | 4 | Sink 保留帧数 |
--rx_budget_frames | 16 | 缓存总预算(帧) |
--rx_recent_frames | 4 | Tail 窗口帧数 |
--rx_alignment_weight | 0.5 | 对齐度 vs 互补度权重 |
💡 另外脚本还支持MemRoPE(Kim et al., 2026):被驱逐帧不直接丢弃,而是压缩成"长期/短期"双路 EMA 记忆 token(
--mr_alpha_long/--mr_alpha_short),Key 存裸值、注意力时再定位,适合需要"隐约记得"久远内容的场景。
一键上手:运行你的第一条无限长视频
前置条件(详见 Causal_rCM.md):
- 环境按 README.md 的
Environment Setup安装(PyTorch + FlashAttention-2); - 下载因果蒸馏权重到
assets/checkpoints(如Wan2.1_T2V_1.3B_480p_causal_chunkwise.pt); - 选择与权重匹配的 chunk 规格(
--first_chunk_t 3 --chunk_t 3对应 c3-3 权重)。
🎬 下面这条命令生成约 64 秒(1025 像素帧)的 Infinity-RoPE 长视频,显存占用与 5 秒视频基本相同:
PYTHONPATH=. python rcm/inference/wan2pt1_t2v_causal_extrapolation_infer.py \ --distilled \ --dit_path assets/checkpoints/Wan2.1_T2V_1.3B_480p_causal_chunkwise.pt \ --num_steps 4 \ --first_chunk_t 3 --chunk_t 3 \ --extrapolation_method infinity_rope \ --cache_blocks 6 --ir_sink_blocks 1 \ --f_limit 21 --rope_cut_delta 21 \ --num_frames 1025 \ --prompt "A cinematic shot of a snowy mountain at sunrise" \ --save_path output/causal_rcm_inf_rope.mp4多镜头版本(35 秒、两个硬切场):
PYTHONPATH=. python rcm/inference/wan2pt1_t2v_causal_extrapolation_infer.py \ --distilled \ --dit_path assets/checkpoints/Wan2.1_T2V_1.3B_480p_causal_chunkwise.pt \ --num_steps 4 --first_chunk_t 3 --chunk_t 3 \ --extrapolation_method infinity_rope --rope_cut_delta 21 \ --prompt "a man standing in a park[5s] | a man jumping[10s#] | a man sitting[10s#]" \ --save_path output/multi_scene.mp4生成效果参考(rCM 项目样例帧,可配合任意 prompt 持续延展):
策略速查与选型建议
| 策略 | 淘汰粒度 | 位置编码处理 | 额外开销 | 推荐场景 |
|---|---|---|---|---|
| Sliding Window | 整块 FIFO | 不处理 | ⭐ | 基线/快速验证 |
| Rolling Sink | 整块循环 | 索引滑动保持连续 | ⭐ | 主体/风格保持 |
| Infinity-RoPE | 整块平移 | 相对化 + 钳制 + Cut | ⭐ | 通用首选、多镜头 |
| Deep Forcing | token 级 | 原地时间修正 | ⭐⭐⭐⭐ | 精度优先 |
| Relax Forcing | 帧级 | 原地时间修正 | ⭐⭐⭐ | 长叙事、低开销 |
| MemRoPE | 帧级→EMA 记忆 | 裸 Key + 在线索引 | ⭐⭐⭐ | 超长时间记忆 |
实用技巧:
--f_limit要贴近训练时长:默认 21(= 81 像素帧),换用不同训练时长的权重时请同步调整;- 预算越大越稳定、越费显存:
cache_blocks/budget_frames可先小后大做网格搜索; none是无界基线:想量化各策略带来的质量差异时,用--extrapolation_method none跑短时长对照;- 量化 KV cache 可进一步省显存:搭配 wan2pt1_t2v_causal_quant_infer.py 的 int2+QVG 路径,长视频流式场景更从容;
- 底层机制(
KVCache.compact_、缓存模式)可参考 rcm/utils/kv_cache.py,块级注意力掩码见 rcm/utils/blockmask.py。
总结
rCM 把"无限长视频"从训练问题变成了纯推理工程问题:同一个 4 步蒸馏模型,通过--extrapelation_method一参切换 5 种有界内存策略,显存恒定、时长自由。新手建议路线:Sliding Window 跑通 → Infinity-RoPE 做日常生成 → Deep Forcing / Relax Forcing 精挑长叙事。完整训练与推理配方见 Causal_rCM.md。
【免费下载链接】rcm
rCM & Causal-rCM: Leading and Unified Algorithms/Infrastructures for Bidirectional/Autoregressive Video Diffusion Distillation at Scale
相关推荐
SkyReels-V2无限长度视频生成终极指南
SkyReels V2无限长度视频生成终极指南 SkyReels V2是一款革命性的AI视频生成模型,基于先进的Diffusion Forcing架构实现无限长
人工智能大模型媒体生成视频零基础掌握SkyReels-V2:无限长度AI视频生成实战指南
零基础掌握SkyReels V2:无限长度AI视频生成实战指南 SkyReels V2是一款革命性的无限长度AI视频生成模型,能够帮助用户轻松创建高质量、长时长
人工智能大模型媒体生成视频零基础玩转SkyReels-V2:无限长度AI视频生成实战手册
零基础玩转SkyReels V2:无限长度AI视频生成实战手册 想要制作专业级AI视频却不知从何入手?SkyReels V2无限长度视频生成模型正是为你量身打造
人工智能大模型媒体生成视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考