Skip to content

踩坑GitHub huggingface/lerobot昨天

LeRobot GR00T图像预处理Tensor转NumPy致训练推理效率低 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:What's the reason of having tensor -> numpy -> tensor conversion in GR00T processor?(GitHub huggingface/lerobot #3000)

状态:有绕过办法

问题 ​

LeRobot GR00T策略的 _to_uint8_np_bhwc 函数强制将CUDA上的图像Tensor经 .cpu().numpy() 转至CPU进行堆叠与permute操作后再拷回GPU。Profiling显示CPU端排列组合是主要耗时瓶颈而非PCIe传输,导致2相机480×640 Batch=1时预处理p50延迟达6.02ms,Batch=8时达27.7ms,严重影响同步/RTC推理路径效率。

环境 ​

LeRobot main分支 (commit 45cca1a6),NVIDIA RTX 5090,CUDA环境,GR00T策略处理器,2-3个相机输入(480×640),Batch Size 1-8。

解决办法 ​

  1. 修改预处理逻辑,将packed uint8视频Tensor移至目标设备后再执行 permute(...).contiguous() 操作,避免CPU端计算瓶颈。
  2. 当相机Tensor已在同一设备且形状兼容时,直接在GPU上进行堆叠与重排,消除GPU→CPU→GPU的冗余数据往返拷贝。
  3. 接受约21%的峰值显存增长作为优化代价(B=8/T=8/3相机配置下增加约169MB),以换取Batch=1延迟降至3.10ms、Batch=8降至5.6ms的性能提升。
  4. 使用 torch.equal 验证优化后 pixel_values、input_ids、attention_mask、image_grid_thw 及 mm_token_type_ids 输出与原版逐位一致,确保uint8/fp16/fp32输入及不同相机数/时序长度下的数值正确性。

讨论原作者:@arxrean 等,版权归原作者所有。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub huggingface/lerobot #3000:What's the reason of having tensor -> numpy -> tensor conversion in GR00T processor?访问 2026-10-27