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

一、环境准备

Manipulation 赛道是官方提供baseline 模型,需要完成10项任务,每项任务的完成分为1分,总分10分,提交自己的模型,获得更高的分数。十个任务分别如下,提高的模型有两个:UniVLA 和RDT 在这里插入图片描述

1.1 推理环境准备

智元的Genie Sim 环境是在NVIDIA ISAAC Sim基础上开发的机器人仿真平台,能够查看机器人在仿真环境中的任务表现。 在这里插入图片描述

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

1.2 没有GPU怎么办?

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

在这里插入图片描述 租用的版本主要分三个阶段:

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

1.3 数据集下载慢怎么办?

大模型训练的另一个特点是数据集非常庞大,一般都要在huggingface上下载,虽然用git 也行,但下载速度慢,且容易卡断。如果你遇到相同的问题,一定要看这篇知乎,加速效果异常好! 使用 HFD 加快 Hugging Face 模型和数据集的下载 仿真数据集将近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/*

二、模型推理

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

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

2.1 仿真画面完全不出来

报错信息: 在这里插入图片描述 这是terminal的问题,运行autorun.sh 脚本的时候,会遍历系统已有的terminal,首选是gnome_terminal,但我这边有些问题,调整成“terminator”之后就ok了。 在这里插入图片描述

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

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

  • 运行仿真环境的服务平台
  • 运行仿真任务的场景
  • 运行推理任务的大模型 在这里插入图片描述 脚本最后有个while 循环,会检测后台的任务,判断是否超时来退出仿真。我这边的仿真加载慢,经常被强制kill,最后索性注释退出机制,就能成功run起来!

在这里插入图片描述

三、模型训练

模型训练卡了很久,需要下载额外下载依赖,添加配置。 按此步骤,不用安装Depth-Anything 在这里插入图片描述

3.1 没有internvl库

在这里插入图片描述 这个库其实包含在仓库的InternVL 文件夹里,需要export 对应的路径 在这里插入图片描述

3.2 没有facebookresearch_dinov2_main

在这里插入图片描述 需要把Depth-Anything仓库的facebookresearch_dinov2_main 放到latent_action_model 目录下: 在这里插入图片描述

3.3 没有dinov2_vitb14_reg4_pretrain.pth 模型

训练过程中需要加载这个权重,但原仓库下没有这个权重。 在这里插入图片描述

在hf 里面搜关键字,终于找到同名的模型权重! 在这里插入图片描述

3.4 训练脚本问题

README.md展示的只是示例,具体训练的时候需要修改 在这里插入图片描述 其中dataset 的结构如下,hf下载的数据集需要先解压,并放一起: 在这里插入图片描述

3.5 内存问题

训练到了10%,后续异常退出。此时GPU内存48G,htop查看训练过程中CPU内存的使用量,发现才16G,远远不够!提高CPU 内存能够解决问题。 在这里插入图片描述 服务器CPU 内存的选取有限,为了不让cpu 内存爆掉导致训练终止,需要用其他方法提高内存,最有效的是提高swap分区的大小!后期训练的时候,直接把swap 分区提高到了300G,内存自由! 在这里插入图片描述 Linux系统swap分区扩容保姆级教程

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模型,确认格式:解压之后直接是以下文件夹。 在这里插入图片描述

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

4.2 训练模型提交

提交之后,训练显示size 不对。原因是训练的时候没有加 --wogripper 参数,但推理默认是开的,导致不匹配。机械臂包含7各自由度+夹爪1个自由度,双臂就有16个自由度,如果去除夹爪,就只有14个自由度。 在这里插入图片描述 解决方式有两种:

  • 推理的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,以时间换空间

标签: none

添加新评论