模型部署示例
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}