跳转至

模型部署示例

deploy介绍

deploy中提供了两种部署模式:

实现自己模型的部署脚本

可以参考多个robot_on_model.py脚本, 主要不同点在于模型初始化与用于将数据转化为模型推理数据的input_transform()函数.

对于你的模型,应当在policy/your_model/路径下有inference_model.py文件, 该文件拥有你的模型的封装类, 并且拥有: - update_observation_window(): 用于管理模型的输入参数, 由于部分模型需要前文信息, 因此需要用滑动窗口管理数据. — get_action(): 根据当前的滑动窗口数据进行推理, 获取动作序列. - reset_obsrvationwindows(): 重置滑动窗口, 用于开启新一轮推理.

如果你模型需要其他的信息, 直接在input_transform()中添加对应传感器的返回值, 并转化为模型

使用通用部署脚本

建议直接使用本项目的通用部署脚本来进行模型部署, 这样更加方便, 且只需要实现部分通用接口就能实现Client&Server或本地部署.

类似数据采集, 第一次按下ENTER开始部署, 第二次按下ENTER停止推理.

如上文提及, 你需要实现模型的inference_model.py文件, 来提供你模型推理的通用接口, 便于直接调用, 然后你只需要编辑scripts/deploy.sh即可.

python example/deploy/deploy.py \
    --base_model_name "test_policy"\ # 你的模型名称
    --base_model_class "TestModel"\ # 你的模型类
    --base_model_path "path/to/ckpt"\ # 模型的权重路径
    --base_task_name "test"\ # 任务名称, 会调用task_instructions来索引语言指令
    --base_robot_name "test_robot"\ # 你的机器人名称
    --base_robot_class "TestRobot"\ # 你的机器人类

在该项目中, 我们支持了RoboTwin的Sim2Real部署, 你必须要开启--robotwin来启用RoboTwin支持, 并且确认你的机械臂左右臂参数维度(config/RoboTwin_setting.yml).

在该部署方式中, 由于模型接口的调用是采用RoboTwin的实现, 因此有部分信息是不需要的, 并且你需要根据需求修改RoboTwin的deploy_policy.yml文件.

# pi0 eval.sh
python script/eval_policy.py --config policy/$policy_name/deploy_policy.yml \
    --overrides \
    --task_name ${task_name} \
    --task_config ${task_config} \
    --train_config_name ${train_config_name} \
    --model_name ${model_name} \
    --ckpt_setting ${model_name} \
    --seed ${seed} \
    --policy_name ${policy_name} 

# your deploy.sh
python example/deploy/deploy.py \
    --base_model_name "openpi"\
    --base_model_class "None"\
    --base_model_path "None"\
    --base_task_name "test"\
    --base_robot_name "test_robot"\
    --base_robot_class "TestRobot"\
    --robotwin \
    --overrides \
    --task_name ${task_name} \
    --task_config ${task_config} \
    --train_config_name ${train_config_name} \
    --model_name ${model_name} \
    --ckpt_setting ${model_name} \
    --seed ${seed} \
    --policy_name ${policy_name}