0️⃣ 综述

0.1 三套深度相机方案

简称方案来源仓实现
IGIsaacGym 光栅化渲染EP (extreme-parkour)per-camera render target, GPU 光栅化
RCCIsaacLab RayCasterCameraLP (IsaacLab-parkour)NVIDIA 自带, warp-kernel raycast
WRwarp-raycasterWR (本工作)深度图生成新方案 (Warp 重写)

0.2 硬件

RTX 4070 Laptop  ·  VRAM 8 GB  ·  RAM 32 GB  (VRAM = GPU 显存, RAM = 内存 / 系统内存)

0.3 三实验 — 分成 VRAM / RAM 两条线

  1. Sec 1 看整体 — IsaacLab 带 RCC 的 student 训练中: VRAM/RAM 占用都有哪些组成和占比
  2. Sec 2 只看深度图生成IG 对比 WR: 纯深度相机初始化占用 / per env 边际占用 / 随环境数量的整体占用
  3. Sec 3 只看深度图生成RCC 对比 WR: 同上

1️⃣ 训练时 VRAM/RAM 整体占用
Student 环境数N=64, 设备 VRAM 8 G, RAM 32 G, IsaacLab

1.1 VRAM 8 GB

3785 MB (52.1%)2596 MB (35.7%)300 MB (4.1%)210 MB (2.9%)160 MB (2.2%)122 MB (1.7%)92 MB (1.3%) ← 深度相机本体01G2G3G4G5G5.8G OOMRCC 深度相机 (WR 替换 −40)bwd grads + cuDNN workspacecuda + IsaacLab + Warp libsweights + Adam statedepth_actor 120-retained (漏测)encoder 24-retained 激活env physics (Go2 + parkour)
Student 训练态 VRAM (N=64, 合计 7265 MB ≈ 7.3 GB / 8 GB GPU)VRAM (MB)

结论: encoder 激活 2.6 G + env physics 固定 3.8 G, 是显存不足的主要原因.
深度相机本体占比不足 0.1 G, 可忽略, 瓶颈在于深度图生成后的图像处理.

1.2 RAM 32 GB

1800 MB (50.5%)1500 MB (42.1%)254 MB (7.1%)10 MB (0.3%)0500100015002000encoder/actor host shadowRCC 深度相机 host (WR 替换 −230 / 11×)IsaacLab + Kit + python + torch + Warpenv host (Go2 + parkour mesh + obs)
Student 训练态 host RAM (N=64, 合计 3564 MB / 32 GB 内存)RAM (MB)

结论: RAM 不是瓶颈, 合计只有 3.5 GB / 32 GB, 容量充裕.

1.3 训练态分解: 7 个 stage 在 N=64 的 VRAM 累计 (MB, nvidia-smi.used)

Stage阶段操作VRAM 累计Δ解读
S0初始化 CUDA 上下文161+161显卡启动开销, 与模型无关.
S1加载学生模型权重217+56编码器 + 策略网络的参数本身, 体积小.
S2分配优化器状态371+154优化器为每个参数额外存动量与方差, 体积约权重的两倍.
S3测一次编码器前向 (无梯度)415+44关闭梯度后中间激活跑完即释放, 显存几乎不增长.
S424 次编码器前向激活全留在显存3011+2596🚨 显存真大头. 学生训练一轮采 120 步, 但深度图每 5 步生成一次, 一轮下来共 24 次,24次结束后统一反传梯度,前向的中间激活一直累积不释放, 显存被叠了 24 倍.
S5一次反传走完 24 步3133+122反传消耗中间激活, 新增的只是梯度张量与卷积反传所需的临时缓冲.
S6优化器更新权重3133+0Adam 就地更新动量与权重, 不分配新显存.

1.4 跨 N 累计堆叠

3942394239433944394539613977545454739210611921021021021021021021025060813541918259630883692120120152170122140174010002000300040005000600070008000N=96N=80N=64N=48N=32N=16N=8
env + IsaacLab baseRCC 深度相机weights + Adam24-retained-fwd 激活bwd + workspace训练态 VRAM 堆叠分解 (MB) — 红虚线 = 8 GB 可用上限 ~5800 MB累计 VRAM (MB)

2️⃣ IsaacGym 光栅化 vs WR (raycasting)
Extreme Parkour 环境下安装两种深度相机对比

承上: 深度相机本身并非内存/显存瓶颈, 但是还是测试比较一下, 不同深度图生成方案的占用差异大小.

结论: 显存基本平手. WR 初始化略省, 单环境边际成本略高, 环境数大了 IG 微反超; 内存两边都不构成压力.
WR 真正的优势是渲染速度, 不在显存.

2.1 占用实测 (拟合初始占用 + per env占用)

净增量

delta = (env 构造完 + 1 步) − (进程启动后 baseline), 消 GPU 外部进程占用漂移. 单位 MB.

实现N=32N=64N=128N=192
VRAMRAMVRAMRAMVRAMRAMVRAMRAM
no_depth (baseline env)25783300257833002580330125823302
IG (with depth)28733681291537013002374030903777
WR (with depth)28413813289938113001382931123849
IG − no_depth (纯深度)+295+381+337+401+422+439+508+475
WR − no_depth (纯深度)+263+513+321+511+421+528+530+547
差分线性拟合: 纯深度 = init + slope × N
VRAM initVRAM/env RAM initRAM/env
IG (光栅化)+252.0+1.331.00+363.0+0.591.00
WR (raycasting)+211.8+1.651.00+500.9+0.230.94
差 (WR−IG) −40.2 +0.32 +137.9 −0.36

VRAM: WR 起步省 40 MB, 每加 env 多 0.32 MB. RAM: WR 起步多 138 MB (库加载 footprint), 每加 env 省 0.36 MB.

2.2 整体初始化净占用 (含 depth)

2578257825802582287329153002309028412899300131123264128192240026002800300032003400
no_depthIGWREP VRAM 整体净占用 (MB)num_envsVRAM (MB)
330033003301330236813701374037773813381138293849326412819232003400360038004000
no_depthIGWREP RAM 整体净占用 (MB)num_envsRAM (MB)

2.3 纯深度 - 固定初始化开销 (env 数无关)

VRAM: WR −40 MB (一次性 BVH vs per-camera render target). RAM: WR +138 MB (trimesh+warp 库加载, 不是工作负载).

2.4 每 env 边际成本

2.5 总占用 = 初始化 + N × 每env

252212252212252212252212+43+53+255+317+681+845+1362+1690N=32IGN=32WRN=192IGN=192WRN=512IGN=512WRN=1024IGN=1024WR0500100015002000
N × 每env初始化EP VRAM 纯深度总占用VRAM (MB)
363501363501363501363501+19+7+113+44+302+118+604+236N=32IGN=32WRN=192IGN=192WRN=512IGN=512WRN=1024IGN=1024WR02004006008001000
N × 每env初始化EP RAM 纯深度总占用RAM (MB)

3️⃣ IsaacLab RayCasterCamera vs WR (raycasting)
IsaacLab-parkour 环境下安装两种深度相机对比

结论: WR 在初始化占用、单环境边际、内存三项上都明显领先 RCC, 内存差距尤其大. 原因是 WR 用一份共享的射线方案与一份共享几何缓冲, RCC 为每个相机实例独立分配资源.
但 32 GB 内存本就充裕, 这个差距并不解释学生策略的显存瓶颈 — 真瓶颈见 Sec 1.

3.1 占用实测 (拟合初始占用 + per env占用)

净增量
实现N=32N=64N=128N=192
VRAMRAMVRAMRAMVRAMRAMVRAMRAM
no_depth (baseline env)29001785290217882966182329681836
RCC (with depth)29542038299420503112207531462102
WR (with depth)29321813295418013038184630881854
RCC − no_depth+54+253+92+262+146+252+178+266
WR − no_depth+32+28+52+13+72+23+120+18
差分线性拟合
VRAM initVRAM/env RAM initRAM/env
RCC (IsaacLab 默认)+37.6+0.770.97+253.7+0.05*0.27*
WR DepthSensor+14.6+0.520.97+23.8−0.03*0.12*
差 (WR−RCC) −23.0 −0.25 −229.9 ≈ 0

3.2 纯深度 - 固定初始化开销 (env 数无关)

VRAM init 差 23 MB: RCC 在每个 env 上复制 3 份光线模板 (ray_starts / ray_directions / ray_hits, 每份 [N, 6360, 3]), 共 ~0.22 MB/env. WR 全局共享一份模板, 用 expand 取视图不复制. 差距来自 per-env buffer 的设计选择.

RAM init 差 230 MB — 两条挂载路径:

230 MB 是 sensor 框架的固定 footprint, 与 env 数无关 (slope ≈ 0, R² < 0.3).

3.3 每 env 边际成本

VRAM/env: WR 省 0.25 MB/env (~32%). RAM/env ≈ 0 是预期结果: LP 深度全跑 GPU, host 侧没东西随 env 数增长; +0.05 / −0.03 是 OLS 在 0 附近的噪声残差 (R²<0.3), 不是真信号.

3.4 总占用 = 初始化 + N × 每env

3815381538153815+25+17+148+100+394+266+788+532N=32RCCN=32WRN=192RCCN=192WRN=512RCCN=512WRN=1024RCCN=1024WR0100200300400500600700800
N × 每env初始化LP VRAM 纯深度总占用VRAM (MB)
25424254242542425424N=32RCCN=32WRN=192RCCN=192WRN=512RCCN=512WRN=1024RCCN=1024WR050100150200250300
LP RAM 纯深度总占用 (per-env ≈ 0)RAM (MB)

4️⃣ 综合结论

① 显存瓶颈不在深度图像的生成, 而在生成之后的处理:
真正吃显存的是编码器对深度图的累积处理与环境物理两块, 合计约 88%, 深度相机本体仅约 1%.
换深度相机方案, 对内存/显存占用的影响很小.

② 与光栅化方案对比:
显存基本打平 (大规模并行后光栅化方案微胜), 内存两边都不构成压力.
与 IsaacLab 自带射线相机对比:
WR 显存与内存均领先, 内存占用低约 11 倍; 但 32 GB 内存本就充裕, 这块差距不影响环境数上限.

③ WR 的速度优势分两档:
替代光栅化方案纯深度时间加速约 9 倍、训练端到端约 2.8 倍;
替代 IsaacLab 自带射线相机纯深度时间加速约 1.4 倍、训练端到端约 1.06 倍.