☰
rCM长度外推实战:Infinity-RoPE/Rolling Sink等5种无限长视频生成策略
2026/10/26 22:34:04 网站建设 项目流程

【免费下载链接】rcm

rCM & Causal-rCM: Leading and Unified Algorithms/Infrastructures for Bidirectional/Autoregressive Video Diffusion Distillation at Scale

项目地址:https://gitcode.com/gh_mirrors/rcm3/rcm
点击查看免费下载

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_blocks6窗口内最多保留的块数
--sw_sink_blocks0永久保留的开头锚点块数(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_blocks6记忆银行容量 K
--sink_blocks5银行中占用 sink 的块数 S
--recent_blocks1紧跟在 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 种策略中最具代表性的一种。它不改变缓存内容,而是改写"坐标系统":

  1. Block-Relativistic RoPE:永远让最新的块落在训练时长末端(帧索引f_limit附近),旧块整体向后平移;
  2. Semanticization:平移后落到 0 之前的块,其时间索引被钳制到 0——相当于"抽象记忆",保留语义而不保留精确时序;
  3. KV Flush:只保留全局 sink 块 + 最后一个块,把中间历史清空;
  4. 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_blocks6缓存最多保留的块数
--ir_sink_blocks1全局 sink 块数
--f_limit21训练时长上限(latent 帧,81 像素帧≈21)
--rope_cut_delta21RoPE Cut 的时间跳变量(0=关闭)
--flush_interval_blocks0周期性 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_frames10Deep Sink 保留帧数
--df_budget_frames16缓存总预算(帧)
--df_recent_frames4最近保留帧数
--df_observation_layers0打分观测层数(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_frames4Sink 保留帧数
--rx_budget_frames16缓存总预算(帧)
--rx_recent_frames4Tail 窗口帧数
--rx_alignment_weight0.5对齐度 vs 互补度权重

💡 另外脚本还支持MemRoPE(Kim et al., 2026):被驱逐帧不直接丢弃,而是压缩成"长期/短期"双路 EMA 记忆 token(--mr_alpha_long/--mr_alpha_short),Key 存裸值、注意力时再定位,适合需要"隐约记得"久远内容的场景。

一键上手:运行你的第一条无限长视频

前置条件(详见 Causal_rCM.md):

  1. 环境按 README.md 的Environment Setup安装(PyTorch + FlashAttention-2);
  2. 下载因果蒸馏权重到assets/checkpoints(如Wan2.1_T2V_1.3B_480p_causal_chunkwise.pt);
  3. 选择与权重匹配的 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 Forcingtoken 级原地时间修正⭐⭐⭐⭐精度优先
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

项目地址:https://gitcode.com/gh_mirrors/rcm3/rcm
点击查看免费下载

相关推荐

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

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

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

立即咨询