LingBot-Map Paged KV Cache:像LLM显存管理一样做3D重建
2026/8/30 9:02:52 网站建设 项目流程

LingBot-Map Paged KV Cache:像LLM显存管理一样做3D重建

【免费下载链接】lingbot-mapA feed-forward 3D foundation model for reconstructing scenes from streaming data项目地址: https://gitcode.com/GitHub_Trending/li/lingbot-map

LingBot-Map 是一个前馈式 3D 重建基础模型,它能从视频流中实时重建 3D 点云。它的核心工程亮点是Paged KV Cache(分页 KV 缓存)——把大语言模型里管理长上下文的显存技术,原封不动搬进了流式 3D 重建:缓存内存恒定不涨,从而在 518×378 分辨率下以约 20 FPS 稳定推理超过 10,000 帧的长序列。本文将带你快速看懂这套机制,以及如何在自己的机器上跑通长视频重建。

一、长序列 3D 重建的显存痛点 🤯

流式重建的 Transformer 必须"记住"历史帧:每来一帧,就要和之前所有帧的 KV(Key/Value 特征)做注意力。最朴素的做法是把历史帧的 KV 全部堆在显存里——序列越长、显存占用线性增长,几千帧就 OOM。

LingBot-Map 的思路和 LLM 推理框架(vLLM、FlashInfer)一致:分页 + 按需回收,让缓存大小与视频长度解耦。实现集中在 lingbot_map/layers/flashinfer_cache.py,配合 lingbot_map/layers/attention.py 中的FlashInferAttention完成单帧流式前向。

二、分页 KV 缓存:三路页面各司其职 📄

FlashInferKVCacheManager把每一层 Transformer 的 KV 切分成固定大小的"页"(page),并分成两个逻辑流、三类页面:

页面类型作用生命周期
Scale 页(8 页)开头的 8 个尺度帧,用于确定场景尺度永不清理
滑动窗口页(64 页)最近的 64 帧 patch 特征超过窗口即回收复用
Special 页每帧 6 个特殊 token(相机/寄存器/尺度)只追加不回收,一页可打包 42 帧

关键设计有两条:

  1. Patch 页可回收:每帧 256 个 patch token 恰好占一页;窗口外的旧页立刻归还 free list,下一帧直接复用——所以无论视频多长,patch 缓存恒定约 88 页。
  2. Special token 追加流:被驱逐的帧会丢 patch 细节,但其相机位姿等 6 个特殊 token 会被连续压缩进 Special 页(一页 256 槽打包 42 帧),保证长程位姿漂移校正不丢信息。

注意力计算时按scale 页 → 窗口页 → special 页的顺序拼出可见页表,special 页放在最后,最后一个未满页由paged_kv_last_page_len天然描述,无需自定义 mask(见 flashinfer_cache.py 的build_visible_page_table)。

三、关键帧策略:缓存只留"精华" 🎞️

模型用 video RoPE 在 320 帧范围内训练,KV 里存超过 320 帧会掉点。LingBot-Map 因此提供--keyframe_interval每 N 帧才存一个关键帧的 KV,非关键帧照常输出预测但不写缓存

实现非常精巧——非关键帧会"临时追加 → 计算注意力 → 回滚"(_set_skip_append+rollback_last_frame),见 lingbot_map/models/gct_stream.py 的_set_skip_append。这样缓存增长速度约降为1/N,是 320 帧以上长序列最优先的调优手段。

四、窗口化推理:25000 帧室内漫游稳跑 🏃

超过约 3000 帧建议切换到--mode windowed:每个窗口(window_size 128计的是 KV 槽位而非实际帧数)重置一次 KV 缓存,相邻窗口共享overlap_keyframes保持位姿对齐。官方用它重建了约 25,000 帧、13 分钟的室内视频,显存全程平稳:

五、实测性能:20 FPS 与恒定显存 📊

  • 518×378 分辨率下~20 FPS,稳定推理 10,000+ 帧长序列;
  • 想压测自己的硬件,可用现成脚本:
    • FPS 剖析:gct_profile.py(python gct_profile.py --backend flashinfer --dtype bf16 --compile
    • 显存扫描:scripts/benchmark_gct_memory.py(对 64~10000 帧逐档测峰值 CUDA 显存并输出 CSV)
  • 无 FlashInfer 环境会自动回退 SDPA 后端(--use_sdpa),任何 CUDA GPU 均可运行。

六、快速上手:一键跑通与调优参数 🚀

安装依赖(FlashInfer 为推荐的 Paged Attention 后端):

pip install flashinfer-python

然后跑示例场景:

python demo.py --model_path /path/to/lingbot-map.pt \ --image_folder example/courthouse --mask_sky

显存吃紧时的调优顺序(详见 demo.py 与 README.md):

参数作用
--keyframe_interval N只缓存每 N 帧,显存约降 N 倍(首选)
--mode windowed --window_size 128超长序列(>3000 帧)窗口化推理
--camera_num_iterations 1相机头少做 3 轮精修,速度更快、其 KV 缓存缩小 4×
--offload_to_cpu逐帧预测卸载到 CPU(默认开启)
--num_scale_frames 2降低初始尺度阶段的激活峰值

七、小结 ✅

LingBot-Map 的 Paged KV Cache 证明了:LLM 推理的显存管理哲学(分页、回收、追加流)可以完整迁移到流式 3D 重建。三路页面设计让缓存恒定,关键帧与窗口化推理把"记住多长"变成可调参数,最终实现万帧级、20 FPS 的实时重建。核心源码值得精读:lingbot_map/layers/flashinfer_cache.py(缓存管理器)、lingbot_map/layers/attention.py(Paged 注意力)、lingbot_map/models/gct_stream.py(流式推理主流程)。

【免费下载链接】lingbot-mapA feed-forward 3D foundation model for reconstructing scenes from streaming data项目地址: https://gitcode.com/GitHub_Trending/li/lingbot-map

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

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

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

立即咨询