adapt gym 5history
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# RDK X5 BPU 量化流程
|
||||
|
||||
这个目录用于把 `../policy_robotlab_15000.onnx` 转成 RDK X5 可运行的
|
||||
Horizon runtime `.bin`。量化在 Mac 上用 CPU Docker 完成,板端只做离线
|
||||
`hrt_model_exec` 验证,暂时不要直接接入实机控制。
|
||||
这个目录用于把 Gym/RobotLab 的 ONNX 策略转成 RDK X5 可运行的 Horizon
|
||||
runtime `.bin`。量化在 Mac 上用 CPU Docker 完成,板端可以做离线测速和实机
|
||||
部署测试。
|
||||
|
||||
参考资料:
|
||||
|
||||
@@ -10,14 +10,103 @@ Horizon runtime `.bin`。量化在 Mac 上用 CPU Docker 完成,板端只做
|
||||
- D-Robotics 论坛 WTW/Go2/X5 流程:`https://forum.d-robotics.cc/t/topic/28338`
|
||||
|
||||
官方工具链对 ONNX 的关键限制是:`ir_version <= 7`、`opset10/11`、固定
|
||||
4 维输入,且 N 维只能为 1。因此这里不能直接拿原始 RobotLab ONNX 编译,
|
||||
需要先降级 opset,再把 `[1, 450]` 输入包成固定 4D `NCHW`:
|
||||
`[1, 1, 1, 450]`。
|
||||
4 维输入,且 N 维只能为 1。因此这里不能直接拿原始 ONNX 编译,需要先裁剪
|
||||
actions-only 输出、降级 opset,再把 `[1, D]` 输入包成固定 4D `NCHW`:
|
||||
Gym 5 帧是 `[1, 1, 1, 225]`,RobotLab 10 帧是 `[1, 1, 1, 450]`。
|
||||
|
||||
## 当前状态
|
||||
|
||||
新增 Gym 5 帧策略的一键量化入口,默认目标是:
|
||||
|
||||
- 原始模型:`../policy_35k.onnx`
|
||||
- 原始输入:`obs [1, 225]`
|
||||
- BPU 编译输入:`obs_4d [1, 1, 1, 225]`
|
||||
- BPU 输出:`actions [1, 12, 1, 1]`
|
||||
- 默认输出:`mapper_output_35k_gemm/policy_35k_int16_gemm.bin`
|
||||
- 默认校准数据:`calibration_data_35k_gym_fast64/`
|
||||
|
||||
本机 Docker 已完成一次默认量化:
|
||||
|
||||
- 浮点 4D/Gemm 图等价对比:64 个真实样本上 `max_abs_diff = 7.15e-7`
|
||||
- `hb_mapper makertbin` 输出:`actions` cosine `0.998524`,L1 `0.014313`,L2 `0.005103`,Chebyshev `0.040004`
|
||||
- 编译估计延迟:`463.9 us`
|
||||
- 产物大小:`2.0M`
|
||||
- 产物路径:`deploy_45dim_rl_gym/bpu_quantization/mapper_output_35k_gemm/policy_35k_int16_gemm.bin`
|
||||
|
||||
一键量化命令:
|
||||
|
||||
```bash
|
||||
cd /Users/chenyouyuan/cyy_ws/deploy_go1_pro/deploy_45dim_rl_gym/bpu_quantization
|
||||
./quantize_policy_x5.sh
|
||||
```
|
||||
|
||||
切换其他 Gym 轮次时直接指定模型和 round:
|
||||
|
||||
```bash
|
||||
./quantize_policy_x5.sh --policy ../policy_30k.onnx --round 30k
|
||||
./quantize_policy_x5.sh --policy ../policy_25k.onnx --round 25k
|
||||
./quantize_policy_x5.sh --policy ../policy_15k.onnx --round 15k
|
||||
```
|
||||
|
||||
脚本默认只抽 64 个真实 RL 样本做校准和最多 64 个样本做浮点等价对比,避免
|
||||
之前 512 样本和 batch 回退导致的量化流程过慢。需要更稳的校准时再手动加大:
|
||||
|
||||
```bash
|
||||
./quantize_policy_x5.sh --samples 128 --compare-limit 128
|
||||
```
|
||||
|
||||
Gym BPU 部署入口支持快速切换轮次:
|
||||
|
||||
```bash
|
||||
cd /root/go1_pro_deploy
|
||||
PYTHONPATH=/root/go1_pro_deploy python3 deploy_45dim_rl_gym/deploy_go1_rlgym_bpu_x5_fastcpp.py \
|
||||
--bpu-round 35k \
|
||||
--kill-sport \
|
||||
--enable-rl \
|
||||
--log-dir logs \
|
||||
--kp 32 --kd 1.0 \
|
||||
--kp-cal 20 --kd-cal 1.0 \
|
||||
--power-factor 9 \
|
||||
--position-protect-limit 0.0 \
|
||||
--action-clip 6.5 \
|
||||
--action-trip-limit 8.0 \
|
||||
--action-hard-trip-limit 16.0 \
|
||||
--max-target-step 0.0 \
|
||||
--max-roll-deg 50 \
|
||||
--max-pitch-deg 50 \
|
||||
--swap-vy-yaw \
|
||||
--rc-vx-scale 0.5 \
|
||||
--rc-vy-scale 0.5 \
|
||||
--rc-wz-scale 1.0 \
|
||||
--log-timing
|
||||
```
|
||||
|
||||
也可以直接指定 bin:
|
||||
|
||||
```bash
|
||||
PYTHONPATH=/root/go1_pro_deploy python3 deploy_45dim_rl_gym/deploy_go1_rlgym_bpu_x5_fastcpp.py \
|
||||
--bpu-model deploy_45dim_rl_gym/bpu_quantization/mapper_output_35k_gemm/policy_35k_int16_gemm.bin \
|
||||
--infer-check --max-steps 1000 --log-timing
|
||||
```
|
||||
|
||||
板端离线测速:
|
||||
|
||||
```bash
|
||||
cd /root/go1_pro_deploy
|
||||
PYTHONPATH=/root/go1_pro_deploy python3 deploy_45dim_rl_gym/bpu_deploy_x5/test_bpu_policy.py \
|
||||
--bpu-model deploy_45dim_rl_gym/bpu_quantization/mapper_output_35k_gemm/policy_35k_int16_gemm.bin \
|
||||
--input-bin deploy_45dim_rl_gym/bpu_quantization/calibration_data_35k_gym_fast64/00000.bin \
|
||||
--repeat 1000
|
||||
|
||||
cd /root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_deploy_x5/cpp
|
||||
./bpu_dnn_bench \
|
||||
/root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/mapper_output_35k_gemm/policy_35k_int16_gemm.bin \
|
||||
/root/go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/calibration_data_35k_gym_fast64/00000.bin \
|
||||
1000
|
||||
```
|
||||
|
||||
已经完成 `policy_robotlab_15000.onnx` 和 `policy_robotlab_6500.onnx` 的 int16
|
||||
量化。当前 BPU 部署默认使用 6500 版本:
|
||||
量化。RobotLab BPU 部署默认仍使用 6500 版本:
|
||||
|
||||
- 原始模型:`../policy_robotlab_6500.onnx`
|
||||
- 原始输入:`obs [1, 450]`
|
||||
|
||||
Reference in New Issue
Block a user