iDP3 和 DP3 架构一样,均采用了 Hydra 框架,所以可以一起结合看
DP3复现代码运行逻辑全流程(二)——部署全流程代码eval_policy.shhttps://blog.youkuaiyun.com/qq_28912651/article/details/143471527?spm=1001.2014.3001.5501iDP3 部署/推理已保存的策略运行:
# 3d policy
bash scripts/deploy_policy.sh idp3 gr1_dex-3d 0913_example
# 2d policy
bash scripts/deploy_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:附加信息,某个特定时间点的样例
接下来分析一下其运行逻辑
目录
1 全代码注释
#!/bin/bash
# ========================
# 参数说明
# ========================
# $1: alg_name - 算法名称,例如 "idp3" 或 "dp_224x224_r3m"
# $2: task_name - 任务名称,例如 "gr1_dex-3d" 或 "gr1_dex-image"
# $3: addition_info - 附加信息,用于标记实验,例如 "0913_example"
# 指定数据集路径,供任务脚本使用
dataset_path=/home/ze/projects/Improved-3D-Diffusion-Policy/training_data_example
# ========================
# 实验配置
# ========================
DEBUG=False # 是否启用调试模式,设置为 False 表示不启用
save_ckpt=True # 是否保存模型检查点,设置为 True 表示保存
# 将第一个参数(算法名称)赋值给 alg_name
alg_name=${1}
# 将第二个参数(任务名称)赋值给 task_name
task_name=${2}
# 配置名称,通常等同于算法名称
config_name=${alg_name}
# 将第三个参数(附加信息)赋值给 addition_info
addition_info=${3}
# 固定的随机种子,确保实验结果可复现
seed=0
# 构建实验名称,格式为 "task_name-alg_name-addition_info"
exp_name=${task_name}-${alg_name}-${addition_info}
# 定义实验运行目录,包含实验名称和随机种子
run_dir="data/outputs/${exp_name}_seed${seed}"
# GPU ID,指定要使用的 GPU 编号
gpu_id=0
# 输出 GPU 信息,使用 ANSI 颜色代码打印黄色文本
echo -e "\033[33mgpu id (to use): ${gpu_id}\033[0m"
# ========================
# 切换到项目目录
# ========================
cd Improved-3D-Diffusion-Policy
# ========================
# 设置环境变量
# ========================
# 启用 Hydra 的完整错误信息,便于调试
export HYDRA_FULL_ERROR=1
# 将 CUDA 可见设备设置为指定的 GPU ID
export CUDA_VISIBLE_DEVICES=${gpu_id}
# ========================
# 执行部署脚本
# ========================
python deploy.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
可以看出基本逻辑:
参数输入 -> 实验配置 -> 环境变量设置 -> 执行文件
2 全流程逻辑
2.1 参数输入
# Examples:
# bash scripts/deploy_policy.sh idp3 gr1_dex-3d 0913_example
# bash scripts/deploy_policy.sh dp_224x224_r3m gr1_dex-image 0913_example
# ========================
# 参数说明
# ========================
# $1: alg_name - 算法名称,例如 "idp3" 或 "dp_224x224_r3m"
# $2: task_name - 任务名称,例如 "gr1_dex-3d" 或 "gr1_dex-image"
# $3: addition_info - 附加信息,用于标记实验,例如 "0913_example"
脚本输入三个参数:alg_name(算法名称)、task_name(任务名称)和 addition_info(附加信息),用于动态指定配置文件和实验的命名
2.2 数据集路径
# 指定数据集路径,训练使用
dataset_path=/home/ze/projects/Improved-3D-Diffusion-Policy/training_data_example
dataset_path 指向一个固定的数据集目录,用于部署任务时的数据输入
2.3 实验配置
# ========================
# 实验配置
# ========================
DEBUG=False # 是否启用调试模式,设置为 False 表示不启用
save_ckpt=True # 是否保存模型检查点,设置为 True 表示保存
DEBUG: 是否启用调试模式
save_ckpt: 是否保存模型的检查点
2.4 实验名称与目录
# 将第一个参数(算法名称)赋值给 alg_name
alg_name=${1}
# 将第二个参数(任务名称)赋值给 task_name
task_name=${2}
# 配置名称,通常等同于算法名称
config_name=${alg_name}
# 将第三个参数(附加信息)赋值给 addition_info
addition_info=${3}
# 固定的随机种子,确保实验结果可复现
seed=0
# 构建实验名称,格式为 "task_name-alg_name-addition_info"
exp_name=${task_name}-${alg_name}-${addition_info}
# 定义实验运行目录,包含实验名称和随机种子
run_dir="data/outputs/${exp_name}_seed${seed}"
使用输入的参数组合成 exp_name,确保实验名称具有唯一性
run_dir 定义了实验结果的输出目录,便于后续定位和分析
2.5 GPU 设置
# GPU ID,指定要使用的 GPU 编号
gpu_id=0
# 输出 GPU 信息,使用 ANSI 颜色代码打印黄色文本
echo -e "\033[33mgpu id (to use): ${gpu_id}\033[0m"
gpu_id 指定了要使用的 GPU 设备编号,默认使用 GPU 0
使用 ANSI 转义字符输出 GPU 编号信息,格式为黄色文本
2.6 目录切换
# ========================
# 切换到项目目录
# ========================
cd Improved-3D-Diffusion-Policy
切换到 Improved-3D-Diffusion-Policy 目录,此为执行 deploy.py 的项目主目录
2.7 环境变量设置
# ========================
# 设置环境变量
# ========================
# 启用 Hydra 的完整错误信息,便于调试
export HYDRA_FULL_ERROR=1
# 将 CUDA 可见设备设置为指定的 GPU ID
export CUDA_VISIBLE_DEVICES=${gpu_id}
HYDRA_FULL_ERROR=1: 启用 Hydra 配置系统的完整错误报告
CUDA_VISIBLE_DEVICES=${gpu_id}: 限制脚本仅使用指定的 GPU
2.8 deploy.py 执行
# ========================
# 执行部署脚本
# ========================
python deploy.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
使用 python deploy.py 并传递多个参数
--config-name=${config_name}.yaml: 加载指定的 YAML 配置文件
task=${task_name}: 设置任务名称
hydra.run.dir=${run_dir}: 设置 Hydra 输出目录
training.debug=$DEBUG: 设置调试模式
training.seed=${seed}: 设置随机种子
training.device=\"cuda:0\": 指定设备为 cuda:0
exp_name=${exp_name}: 传递实验名称
logging.mode=${wandb_mode}: 设置日志模式(需要在运行前定义 wandb_mode)
checkpoint.save_ckpt=${save_ckpt}: 控制是否保存检查点
task.dataset.zarr_path=$dataset_path: 指定数据集路径
3 注意事项
wandb_mode 未在脚本中定义:需要在执行脚本前定义 wandb_mode 变量,否则会报错
路径校验:确保 dataset_path 和 Improved-3D-Diffusion-Policy 目录存在
GPU 可见性:确保系统中存在指定的 GPU 设备