adapt gym 5history

This commit is contained in:
cyy_mac
2026-07-28 16:36:33 +08:00
parent 6c4dd6ed14
commit 071c576bfe
14 changed files with 1782 additions and 77 deletions

View File

@@ -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]`