iDP3 核心脚本包括三个:deploy_policy.sh、vis_dataset.sh、train_policy.sh,分别代表了部署、预处理和训练,分别作为对应 py 脚本的参数设置前置环节
训练环节仅需运行指令:
# 3d policy
bash scripts/train_policy.sh idp3 gr1_dex-3d 0913_example# 2d policy
bash scripts/train_policy.sh dp_224x224_r3m gr1_dex-image 0913_example
idp3、dp_224x224_r3m:policy 名称
gr1_dex-3d、gr1_dex-image:Fourier GR1、dexterous hands-3d/image
0913_example:附加信息,某个特定时间点的样例
此脚本输入设置包括:算法名称、任务名称和其他配置信息,支持调试模式和训练模式,并集成 wanb 作为日志记录工具
接下来分析一下其运行逻辑
目录
1 变量设置
2 命令行参数
3 衍生变量
4 调试模式
5 切换目录并设置环境变量
6 执行 train.py
1 变量设置
dataset_path=/home/ze/projects/Improved-3D-Diffusion-Policy/training_data_exampleDEBUG=False
wandb_mode=offline
dataset_path:训练数据集路径
DEBUG:切换调试模式(True)或训练模式(False)
wandb_mode:配置 wandb 记录模式,支持 online 或 offline
2 命令行参数
alg_name=${1}
task_name=${2}addition_info=${3}
接收算法名称(alg_name)、任务名称(task_name)和附加信息(addition_info)作为输入参数
3 衍生变量
config_name=${alg_name}seed=0
exp_name=${task_name}-${alg_name}-${addition_info}
run_dir="data/outputs/${exp_name}_seed${seed}"gpu_id=0
echo -e "\033[33mgpu id (to use): ${gpu_id}\033[0m"
config_name:根据算法名称设置配置文件名
exp_name:构建唯一的实验名称
run_dir:指定输出文件的存储目录
gpu_id:使用的 GPU ID
4 调试模式
if [ $DEBUG = True ]; thensave_ckpt=False# wandb_mode=onlineecho -e "\033[33mDebug mode!\033[0m"echo -e "\033[33mDebug mode!\033[0m"echo -e "\033[33mDebug mode!\033[0m"
elsesave_ckpt=Trueecho -e "\033[33mTrain mode\033[0m"
fi
根据 DEBUG 变量的值,动态地设置训练参数和运行模式
此处展开说明一下:
如果 DEBUG=True,则进入调试模式
如果 DEBUG=False,则进入训练模式
在调试模式下,save_ckpt 被设置为 False,即不会保存训练过程中的模型检查点(checkpoints)
调试模式通常用于快速验证脚本或模型是否可以正常运行,避免浪费存储空间和时间在保存中间结果上
此外,注释部分可以切换 wandb(Weights and Biases)的记录模式到在线模式,以实时查看调试日志。当前注释状态下,wandb_mode 保持原始的 offline 配置,以减少调试期间的外部依赖
echo -e "\033[33mDebug mode!\033[0m"
在终端中打印出黄色的 “Debug mode!” ,强调处于调试模式
echo:用于输出文本
-e:启用转义序列
"\033[33m":设置文本颜色为黄色(ANSI 转义序列)
"\033[0m":重置文本样式(返回到默认颜色)
然后就,重要的事情说三次......
5 切换目录并设置环境变量
cd Improved-3D-Diffusion-Policyexport HYDRA_FULL_ERROR=1
export CUDA_VISIBLE_DEVICES=${gpu_id}
切换到项目目录以执行训练脚本
配置环境变量以启用完整错误跟踪(HYDRA_FULL_ERROR),并指定用于训练的 GPU 设备
6 执行 train.py
python train.py --config-name=${config_name}.yaml \task=${task_name} \hydra.run.dir=${run_dir} \training.debug=$DEBUG \training.seed=${seed} \training.device="cuda:0" \exp_name=${exp_name} \logging.mode=${wandb_mode} \checkpoint.save_ckpt=${save_ckpt} \task.dataset.zarr_path=$dataset_path
--config-name:yaml 配置文件名
task:任务名
hydra.run.dir:Hydra 输出目录
training.debug:调试模式标志
training.seed:设置随机种子以确保可重复性
training.device:选择 GPU 设备
exp_name:指定实验名称,用于日志记录
logging.mode:配置 wandb 日志模式
checkpoint.save_ckpt:是否保存模型检查点
task.dataset.zarr_path:数据集路径