LingBot-Map加速指南:--compile与bf16让推理速度再提升
【免费下载链接】lingbot-mapA feed-forward 3D foundation model for reconstructing scenes from streaming data项目地址: https://gitcode.com/GitHub_Trending/li/lingbot-map
LingBot-Map是一个用于流式 3D 场景重建的 feed-forward 3D 基础模型(几何上下文 Transformer,GCT),可以在长序列上以约 20 FPS 稳定重建点云与相机位姿。本文面向新手,教你用--compile编译加速和bf16 半精度推理两个开关,零代码改动地提升 LingBot-Map 的推理速度、降低显存占用,并用内置脚本一键验证加速效果。
一、LingBot-Map 3D重建效果速览
LingBot-Map 的核心卖点是「流式」:相机逐帧喂入,模型基于分页 KV cache 持续输出深度、点云和位姿,无需离线优化。下面这张效果图来自官方的长视频示例——一条25000 帧、约 13 分钟的室内行走轨迹,重建出了完整的鸟瞰点云场景(蓝色线为相机轨迹):
正因为序列越长、帧数越多,推理速度和显存压力就越关键。好消息是:官方已经内置了两个「加速开关」,demo.py里加一个参数即可启用。
二、bf16 半精度:自动生效的速度与显存优化
demo.py会在启动时自动判断你的显卡,选择合适的推理精度(bfloat16),你几乎不需要手动配置:
- GPU 计算能力 ≥ 8.0(如 RTX 30/40 系列、A100 等 Ampere 及以上)→ 自动使用bf16
- 更老的 GPU → 回退 fp16;纯 CPU → fp32
以 bf16 为例,它的收益有两点(逻辑见 demo.py 中模型加载部分):
- 提速:主干网络(aggregator,DINOv2 风格 Transformer)的矩阵运算全部以 bf16 执行,计算量减半,显存带宽压力随之下降;
- 省显存:模型加载后会把 aggregator 权重直接转换为 bf16,去掉多余的 fp32 主权重副本和 bf16 缓存,额外节省约 2~3 GB 显存,且官方说明重建质量没有可测量的变化。
精度保障:相机头、深度头、点云头等输出端仍保留 fp32 权重(在
autocast关闭的上下文中运行),所以 bf16 加速不会牺牲关键输出的精度。
三、一行命令开启--compile编译加速
在demo.py中加上--compile,官方在 518×378 分辨率下实测约提速 5 FPS:
python demo.py --model_path /path/to/lingbot-map.pt \ --image_folder example/courthouse --mask_sky --compile它在背后自动完成了三件事(实现见demo.py的compile_model与_warm_streaming函数):
- 热模块编译:对 frame_blocks、patch_embed、global_blocks 等计算密集、形状固定的模块施加
torch.compile(mode="reduce-overhead"),利用 CUDA Graph 消除内核启动开销; - Eager 预热:先以普通模式跑一遍「scale 帧 + 流式帧」,让 RoPE、内核缓存等一次性开销提前完成;
- 3 轮编译预热(dress rehearsal):第 1 轮捕获 CUDA Graph,第 2、3 轮回放,让内存分配器与 Graph 地址映射收敛到真实推理状态,避免首帧卡顿。
⚠️ 使用注意:
- 仅
--mode streaming生效:windowed 模式下传入会被自动跳过并提示; - 首次运行多出 30~60 秒预热时间,之后整段序列持续受益——序列越长越划算;
- 开启
--compile时,demo.py会自动跳过expandable_segments:True显存分配策略(该策略与 PyTorch ≤2.8 的 CUDA Graph 不兼容),属正常行为,无需担心。
四、用 gct_profile.py 一键验证加速效果
不确定自己机器上加速了多少?仓库根目录提供了 FPS 基准脚本 gct_profile.py,直接对比不同后端/精度/编译组合:
# 推荐组合:FlashInfer 后端 + bf16 + 编译加速 python gct_profile.py --backend flashinfer --dtype bf16 --compile # 多组对比:同时跑 SDPA/FlashInfer 与 bf16/fp32,输出对照表 python gct_profile.py --backend both --dtype both --num_frames 500运行结束会打印 Global FPS、10%/50%/90% 分段 FPS 对照表,并保存 JSON 结果到/tmp。如果你没装 FlashInfer,可加--use_sdpa使用 PyTorch 原生 SDPA 后端(官方推荐 FlashInfer 以获得最佳性能)。
加速的同时精度有没有掉?可以参考基准评测中的轨迹对比图(benchmark/ 目录)——蓝色估计轨迹与灰色真值高度贴合,说明--compile+ bf16 之后重建质量依然可靠:
五、加速参数组合清单
| 参数 | 作用 | 建议 |
|---|---|---|
--compile | torch.compile + CUDA Graph 加速(仅 streaming) | 序列较长时必开,接受 30~60s 预热 |
| bf16 自动启用 | 主干半精度推理,省 2~3 GB 显存 | Ampere+ 显卡默认生效,无需配置 |
--camera_num_iterations 1 | 相机头精化 4 步减为 1 步 | 再换一点精度换更多速度 |
--keyframe_interval N | 每 N 帧存一个关键帧,控制 KV cache 增长 | >320 帧时 demo 会自动选择 |
--offload_to_cpu | 逐帧预测卸载到 CPU,降低 GPU 峰值显存 | 默认开启,显存紧张时保持开启 |
💡新手配方:Ampere 以上显卡直接--compile起步(bf16 已自动开启);显存不够再加--num_scale_frames 2或--camera_num_iterations 1;超过 3000 帧的超长视频则改用--mode windowed滑窗推理(此模式不走--compile)。
结语
LingBot-Map 的推理加速其实很简单:bf16 由程序自动完成,--compile一个参数开启,gct_profile.py随时验证。长序列、大场景重建从「能跑」变成「跑得飞快」,只需要上面这几行命令。
【免费下载链接】lingbot-mapA feed-forward 3D foundation model for reconstructing scenes from streaming data项目地址: https://gitcode.com/GitHub_Trending/li/lingbot-map
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考