目录

智元机器人比赛排坑记录

智元机器人比赛排坑记录


我选择的是Manipulation 赛道,从8月初到9月中的过程中,为了跑通flow,获得更好的训练效果,踩了不少坑,经过官方老师的耐心解答,热心队伍的无私帮助,终于磕磕碰碰完成了初赛。

一、环境准备

Manipulation 赛道是官方提供baseline 模型,需要完成10项任务,每项任务的完成分为1分,总分10分,提交自己的模型,获得更高的分数。十个任务分别如下,提高的模型有两个:UniVLA 和RDT
https://i-blog.csdnimg.cn/direct/58c694b841c44e37a7af8e3d4c8b52e0.png

1.1 推理环境准备

智元的Genie Sim 环境是在NVIDIA ISAAC Sim基础上开发的机器人仿真平台,能够查看机器人在仿真环境中的任务表现。
https://i-blog.csdnimg.cn/direct/87ad5926629044fdb6d671fbe98e16ca.jpeg

具体的准备过程在这个链接:

1.2 没有GPU怎么办?

租用云服务器是很好的选择,如果自己购置GPU,一方面无法灵活配置,价格昂贵,另一方面安装环境也容易被折腾。云服务器随时取用,非常方面,我租用的平台是“智星云”,开始测试的时候用的RTX 4090, 可以选择多GPU和CPU 内存,后面训练的时候切换A100,可谓非常灵活。

https://i-blog.csdnimg.cn/direct/f71ff29517c14f04984a53cf50745709.png

  • 数据准备及推理阶段:GPU内存不大,选择4090(24G)
  • try 训练阶段:排查训练过程中的坑,单GPU 选择4090(48G)
  • 冲刺阶段:两卡A100(80G),多batch size 收敛训练

1.3 数据集下载慢怎么办?

大模型训练的另一个特点是数据集非常庞大,一般都要在huggingface上下载,虽然用git 也行,但下载速度慢,且容易卡断。如果你遇到相同的问题,一定要看这篇知乎,加速效果异常好!

仿真数据集将近1T,直接扩容硬盘到了2T。

wget https://hf-mirror.com/hfd/hfd.sh
chmod a+x hfd.sh
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
source ~/.bashrc

./hfd.sh gpt2 --tool aria2c -x 4
./hfd.sh agibot-world/AgiBotWorldChallenge-2025  --tool aria2c -x 4 --include Manipulation-SimData/*

二、模型推理

按 的流程可以跑起仿真。期间有遇到几个问题

SIM_ASSETS=~/GenieSimAssets ./scripts/start_gui.sh
./scripts/autorun.sh iros_pack_in_the_supermarket infer UniVLA

2.1 仿真画面完全不出来

报错信息:
https://i-blog.csdnimg.cn/direct/76302bed573242a3a2fe611395bc74e9.png

2.2 仿真无法进行,自动退出

还是在auto_run.sh 的脚本,它会通过terminator 运行三个任务:

  • 运行仿真环境的服务平台
  • 运行仿真任务的场景
  • 运行推理任务的大模型
    https://i-blog.csdnimg.cn/direct/179c18e8df33423f8684ae4aa8c70d21.png
    脚本最后有个while 循环,会检测后台的任务,判断是否超时来退出仿真。我这边的仿真加载慢,经常被强制kill,最后索性注释退出机制,就能成功run起来!

https://i-blog.csdnimg.cn/direct/57290c90499b4edf823f1af0b76c1000.png

三、模型训练

模型训练卡了很久,需要下载额外下载依赖,添加配置。
按此步骤,不用安装Depth-Anything
https://i-blog.csdnimg.cn/direct/40163a209a274bed84d67ccf5b43f9aa.png

3.1 没有internvl库

https://i-blog.csdnimg.cn/direct/c037ea0c5b6649d08ee84fb1c2673d06.jpeg
这个库其实包含在仓库的InternVL 文件夹里,需要export 对应的路径
https://i-blog.csdnimg.cn/direct/6280bd2b49d641c6b402e4bbec031ba6.png

3.2 没有facebookresearch_dinov2_main

https://i-blog.csdnimg.cn/direct/8d923656e1df497ea9cc6ef0125d4ddc.jpeg
需要把Depth-Anything仓库的facebookresearch_dinov2_main 放到latent_action_model 目录下:
https://i-blog.csdnimg.cn/direct/2b10b8bdf649458cb1df70dfa329eced.png

3.3 没有dinov2_vitb14_reg4_pretrain.pth 模型

训练过程中需要加载这个权重,但原仓库下没有这个权重。
https://i-blog.csdnimg.cn/direct/9dca77f7ede743e7b919809d8c90caa4.jpeg

在hf 里面搜关键字,终于找到同名的模型权重!
https://i-blog.csdnimg.cn/direct/57fa5594166a4c5c990c462417b8d4d2.jpeg

3.4 训练脚本问题

README.md展示的只是示例,具体训练的时候需要修改
https://i-blog.csdnimg.cn/direct/8aa37d8365e543478e45e4c8cb176d4e.png
其中dataset 的结构如下,hf下载的数据集需要先解压,并放一起:
https://i-blog.csdnimg.cn/direct/bef6b7c3f0664697b227582eff7de697.png

3.5 内存问题

训练到了10%,后续异常退出。此时GPU内存48G,htop查看训练过程中CPU内存的使用量,发现才16G,远远不够!提高CPU 内存能够解决问题。
https://i-blog.csdnimg.cn/direct/63947324c1e848598f22a06eadf7d474.png
服务器CPU 内存的选取有限,为了不让cpu 内存爆掉导致训练终止,需要用其他方法提高内存,最有效的是提高swap分区的大小!后期训练的时候,直接把swap 分区提高到了300G,内存自由!
https://i-blog.csdnimg.cn/direct/acf17654b69d4d9cab9cc312ddd81caf.png

3.6 训练后的得分反而更低很多

univla 的训练效果和batch size 有很大关系,一般训练的标配都是8卡A100,每张卡80G,bs=8。然后训练5万步左右。

开始训的时候,我只有可怜的单卡,48G,bs=1,根本没法收敛,越训越烂。
训练的调整过程如下:

  1. 单卡4090 48G:从baseline开始,先训task8,得到权重,再训task5,再训task9… -> 容易遗忘,无法收敛 -> 0.35
  2. 单卡4090 48G:从baseline开始,一起训task 6,8,5,9,3,1,0,2(task 4,7 数据集太大,放弃)-> bs 太小,无法收敛 ->0.60
  3. 单卡4090 48G:从baseline开始,减小learning rate,增大grad_accumulation_steps(相当于提高bs,但训练时间会更长)-> 没效果 0.45分
  4. 双卡A100,80G:从baseline开始,一起训task 6,8,5,9,3,1,0,2,bs=8,grad_accumulation_steps=8,loss 收敛效果不佳->1.00
  5. 双卡A100,80G:从baseline开始,一起训task 6,8,5,9,3,(放弃其他5个任务)bs=8,grad_accumulation_steps=8,loss 收敛效果还行

四、模型提交

4.1 baseline模型提交

早期测试可以先提交官方的baseline模型,确认格式:解压之后直接是以下文件夹。
https://i-blog.csdnimg.cn/direct/6cd835fc9fab4997b60700f2b6ad4bbb.png

cd UniVLA
zip -r ../univla_ori.zip .

4.2 训练模型提交

提交之后,训练显示size 不对。原因是训练的时候没有加 –wogripper 参数,但推理默认是开的,导致不匹配。机械臂包含7各自由度+夹爪1个自由度,双臂就有16个自由度,如果去除夹爪,就只有14个自由度。
https://i-blog.csdnimg.cn/direct/b09e2ddbf7d044a2a017172df6794b8c.png
解决方式有两种:

  • 推理的infer.py 脚本:wogripper 配置为false
  • 训练的finetune.py 脚本:增加wogripper 参数

赛后八卦:
8卡GPU bs=8, UniVLA训练5万步,分数能到2.45左右
8卡GPU bs默认, RDT训练10万步,分数能到2.45左右
UniVLA 模型的训练好坏,和bs 关系很大,越大越好,调大grad_accumulation 可以增大bs,以时间换空间