change dir

This commit is contained in:
linux5880
2026-08-01 15:48:09 +08:00
parent 6441d9ad35
commit b254390802

View File

@@ -13,10 +13,28 @@
| IsaacLab 源码 | `/opt/IsaacLab` | `v2.3.2` | | IsaacLab 源码 | `/opt/IsaacLab` | `v2.3.2` |
| IsaacLab 训练与自带 MuJoCo 部署 | `/opt/go2_rl_robotlab``go1` 分支 | `f40874bc90c72264dbf46989d90e15a9715c1393` | | IsaacLab 训练与自带 MuJoCo 部署 | `/opt/go2_rl_robotlab``go1` 分支 | `f40874bc90c72264dbf46989d90e15a9715c1393` |
| 自动化 sim2sim 评估 | `/opt/RoboGauge``go1` 分支 | `66d0eb9010dabc501c52a8b9e5ffb2149dbcb82b` | | 自动化 sim2sim 评估 | `/opt/RoboGauge``go1` 分支 | `66d0eb9010dabc501c52a8b9e5ffb2149dbcb82b` |
| 独立 MuJoCo、ONNX、X5/S100 BPU 部署 | `/opt/go1_pro_deploy/deploy_45dim_rl_gym` | `22a13d6659c59e2793b08c767ab69d8fcc0a406b` | | 独立 MuJoCo、ONNX、X5/S100 BPU 部署 | `/opt/go1_deploy/deploy_rl_lab` | `22a13d6659c59e2793b08c767ab69d8fcc0a406b` |
| 官方公开 SDK | [unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk) | | 官方公开 SDK | [unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk) |
| 私有 Go1 PRO SDK | 仅在内部部署机使用,本文不公开协议、密钥和专有接口 | | 私有 Go1 PRO SDK | 仅在内部部署机使用,本文不公开协议、密钥和专有接口 |
当前交付镜像只保留 RobotLab 版本,部署目录结构固定为:
```text
/opt/go1_deploy/
deploy_rl_lab/
policy_robotlab_26000.onnx
deploy_go1_onnx_mujoco_lab.py
deploy_go1_rlgym_pro_sdk_lab.py
deploy_go1_rlgym_pro_sdk_lab_fastcpp.py
bpu_quantization/
bpu_deploy_x5/
bpu_deploy_s100/
terrains/
logs/
```
已删除的 `deploy_45dim/``deploy_wtw/``sim2sim_mujoco_example/` 和旧 Gym/旧轮次 ONNX 不属于交付结构,本文不再引用。量化机、训练镜像和板端分别使用 `/opt/go1_deploy``/root/go1_deploy` 作为仓库根目录,子目录均为 `deploy_rl_lab`
本文有两条使用路径: 本文有两条使用路径:
- **路径 A直接使用交付镜像**:不要重新 clone 或重新安装,使用 `/opt` 下的固定目录和解释器。 - **路径 A直接使用交付镜像**:不要重新 clone 或重新安装,使用 `/opt` 下的固定目录和解释器。
@@ -34,7 +52,7 @@ X5 模型: policy_robotlab_26000_int16_gemm.bin
S100 模型: policy_robotlab_26000_s100_int16_gemm.hbm S100 模型: policy_robotlab_26000_s100_int16_gemm.hbm
``` ```
训练目录中的导出文件会保留课程阶段。量化脚本使用 `--name policy_robotlab_26000` 时会生成上面的 X5/S100 名称TorchScript/ONNX 是否另存为不带课程后缀的别名必须在发布记录中明确。26000 只是当前均衡基线,不表示轮数越大一定越好。若任务以上楼梯为主,应同时保留 15000 和 26000若以平地高速或下楼梯为主可继续比较 33500。最终模型仍应根据多 seed RoboGauge、MuJoCo 回放和真机日志共同选择 训练目录仍可保留不同课程阶段的 checkpoint 用于比较,但交付目录只保留最终选定的 26000 版本。量化脚本使用 `--name policy_robotlab_26000` 时会生成上面的 X5/S100 名称。26000 只是当前均衡基线,不表示轮数越大一定越好;更换发布 checkpoint 时,应重新导出 ONNX 并完整执行 RoboGauge、MuJoCo 和量化验收,而不是把多个旧 ONNX 一并放入交付目录
### 1.2 全流程 ### 1.2 全流程
@@ -141,7 +159,7 @@ sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker image inspect registr
/opt/IsaacLab /opt/IsaacLab
/opt/go2_rl_robotlab /opt/go2_rl_robotlab
/opt/RoboGauge /opt/RoboGauge
/opt/go1_pro_deploy /opt/go1_deploy
/opt/envs/go2_rl_robotlab /opt/envs/go2_rl_robotlab
/opt/envs/robogauge /opt/envs/robogauge
``` ```
@@ -155,7 +173,9 @@ export MPLCONFIGDIR=/tmp/robogauge-matplotlib
test -d /opt/IsaacLab test -d /opt/IsaacLab
test -d /opt/go2_rl_robotlab test -d /opt/go2_rl_robotlab
test -d /opt/RoboGauge test -d /opt/RoboGauge
test -d /opt/go1_pro_deploy test -d /opt/go1_deploy
test -d /opt/go1_deploy/deploy_rl_lab
test -f /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx
test -x /opt/envs/go2_rl_robotlab/bin/python test -x /opt/envs/go2_rl_robotlab/bin/python
test -x /opt/envs/robogauge/bin/python test -x /opt/envs/robogauge/bin/python
nvidia-smi nvidia-smi
@@ -179,7 +199,7 @@ export OMNI_KIT_ACCEPT_EULA=YES
/opt/go2_rl_robotlab/outputs /opt/go2_rl_robotlab/outputs
/opt/RoboGauge/logs /opt/RoboGauge/logs
/opt/RoboGauge/outputs /opt/RoboGauge/outputs
/opt/go1_pro_deploy/logs /opt/go1_deploy/logs
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
@@ -191,13 +211,13 @@ Dockerfile 中应使用交付镜像的实际运行 UID/GID下面的 `APP_UID/
```dockerfile ```dockerfile
RUN install -d -m 0775 /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \ RUN install -d -m 0775 /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \
/opt/RoboGauge/logs /opt/RoboGauge/outputs \ /opt/RoboGauge/logs /opt/RoboGauge/outputs \
/opt/go1_pro_deploy/logs \ /opt/go1_deploy/logs \
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \ /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \ /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs \ /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs \
&& chown -R ${APP_UID}:${APP_GID} /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \ && chown -R ${APP_UID}:${APP_GID} /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \
/opt/RoboGauge/logs /opt/RoboGauge/outputs \ /opt/RoboGauge/logs /opt/RoboGauge/outputs \
/opt/go1_pro_deploy/logs \ /opt/go1_deploy/logs \
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \ /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \ /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
@@ -210,7 +230,7 @@ test -w /opt/go2_rl_robotlab/logs
test -w /opt/go2_rl_robotlab/outputs test -w /opt/go2_rl_robotlab/outputs
test -w /opt/RoboGauge/logs test -w /opt/RoboGauge/logs
test -w /opt/RoboGauge/outputs test -w /opt/RoboGauge/outputs
test -w /opt/go1_pro_deploy/logs test -w /opt/go1_deploy/logs
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
@@ -252,7 +272,7 @@ find /opt/go2_rl_robotlab/logs/rsl_rl/go1_moe_cts -path '*image_direct_1iter*' -
```bash ```bash
sudo install -d -o "$USER" -g "$(id -gn)" /opt/envs /opt/IsaacLab sudo install -d -o "$USER" -g "$(id -gn)" /opt/envs /opt/IsaacLab
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab /opt/RoboGauge /opt/go1_pro_deploy sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab /opt/RoboGauge /opt/go1_deploy
conda create --prefix /opt/envs/go2_rl_robotlab python=3.11 -y conda create --prefix /opt/envs/go2_rl_robotlab python=3.11 -y
conda activate /opt/envs/go2_rl_robotlab conda activate /opt/envs/go2_rl_robotlab
@@ -268,7 +288,7 @@ python -m pip install torch==2.7.0 torchvision==0.22.0 --index-url https://downl
git clone --branch v2.3.2 --depth 1 https://github.com/isaac-sim/IsaacLab.git /opt/IsaacLab git clone --branch v2.3.2 --depth 1 https://github.com/isaac-sim/IsaacLab.git /opt/IsaacLab
git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/go2_rl_robotlab.git /opt/go2_rl_robotlab git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/go2_rl_robotlab.git /opt/go2_rl_robotlab
git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/RoboGauge.git /opt/RoboGauge git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/RoboGauge.git /opt/RoboGauge
git clone --branch main --single-branch https://gitea.qingruxu.xyz/cyy/go1_pro_deploy.git /opt/go1_pro_deploy git clone --branch main --single-branch https://gitea.qingruxu.xyz/cyy/go1_pro_deploy.git /opt/go1_deploy
cd /opt/go2_rl_robotlab cd /opt/go2_rl_robotlab
@@ -292,7 +312,7 @@ python -m pip install -e /opt/RoboGauge
```bash ```bash
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs
sudo install -d -o "$USER" -g "$(id -gn)" /opt/RoboGauge/logs /opt/RoboGauge/outputs sudo install -d -o "$USER" -g "$(id -gn)" /opt/RoboGauge/logs /opt/RoboGauge/outputs
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go1_pro_deploy/logs sudo install -d -o "$USER" -g "$(id -gn)" /opt/go1_deploy/logs
``` ```
记录环境,便于在部署前复现: 记录环境,便于在部署前复现:
@@ -573,7 +593,7 @@ OMNI_KIT_ACCEPT_EULA=YES /opt/envs/go2_rl_robotlab/bin/python scripts/rsl_rl/pla
同一 run 下再次导出会覆盖这两个通用文件名。必须在切换到下一个 checkpoint 前复制并带上轮次、课程阶段;导出文件完整写入后才能终止 play 同一 run 下再次导出会覆盖这两个通用文件名。必须在切换到下一个 checkpoint 前复制并带上轮次、课程阶段;导出文件完整写入后才能终止 play
```bash ```bash
cp <RUN_DIR>/exported/policy.onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx cp <RUN_DIR>/exported/policy.onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx
cp <RUN_DIR>/exported/policy.onnx /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.onnx cp <RUN_DIR>/exported/policy.onnx /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.onnx
cp <RUN_DIR>/exported/policy.pt /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.pt cp <RUN_DIR>/exported/policy.pt /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.pt
``` ```
@@ -603,10 +623,10 @@ OMNI_KIT_ACCEPT_EULA=YES CUDA_VISIBLE_DEVICES=1 /opt/envs/go2_rl_robotlab/bin/py
### 8.3 检查 ONNX 接口 ### 8.3 检查 ONNX 接口
```bash ```bash
/opt/envs/go2_rl_robotlab/bin/python -c "import onnx, onnxruntime as ort; p='/opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx'; onnx.checker.check_model(onnx.load(p)); s=ort.InferenceSession(p, providers=['CPUExecutionProvider']); print([(x.name,x.shape,x.type) for x in s.get_inputs()]); print([(x.name,x.shape,x.type) for x in s.get_outputs()])" /opt/envs/go2_rl_robotlab/bin/python -c "import onnx, onnxruntime as ort; p='/opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx'; onnx.checker.check_model(onnx.load(p)); s=ort.InferenceSession(p, providers=['CPUExecutionProvider']); print([(x.name,x.shape,x.type) for x in s.get_inputs()]); print([(x.name,x.shape,x.type) for x in s.get_outputs()])"
``` ```
预期 ONNX 输入为 `obs: [1, 450] float32`,输出为 `actions: [1, 12] float32`本次导出的 19500、26000 和 33500 ONNX 已通过 `onnx.checker.check_model()`。输入输出不匹配时不要继续 sim2sim 或量化。 预期 ONNX 输入为 `obs: [1, 450] float32`,输出为 `actions: [1, 12] float32`当前交付的 26000 ONNX 已通过 `onnx.checker.check_model()`。输入输出不匹配时不要继续 sim2sim 或量化。
### 8.4 独立 MuJoCo 快速检查 ### 8.4 独立 MuJoCo 快速检查
@@ -615,12 +635,12 @@ OMNI_KIT_ACCEPT_EULA=YES CUDA_VISIBLE_DEVICES=1 /opt/envs/go2_rl_robotlab/bin/py
Linux 不需要 `mjpython`;它主要用于 macOS 的 MuJoCo 图形启动。镜像中用绝对 ONNX 路径执行非交互采样。该脚本会在加载模型前切换工作目录,相对 ONNX 路径可能因此失效: Linux 不需要 `mjpython`;它主要用于 macOS 的 MuJoCo 图形启动。镜像中用绝对 ONNX 路径执行非交互采样。该脚本会在加载模型前切换工作目录,相对 ONNX 路径可能因此失效:
```bash ```bash
cd /opt/go1_pro_deploy/deploy_45dim_rl_gym cd /opt/go1_deploy/deploy_rl_lab
env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \ env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx \ --onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx \
--sample \ --sample \
--sample-seconds 1 \ --sample-seconds 1 \
--sample-log-dir /opt/go1_pro_deploy/logs --sample-log-dir /opt/go1_deploy/logs
``` ```
采样目录名固定以 `mujoco_stairs_sample_` 开头,用于保存独立 MuJoCo ONNX 推理检查日志PTQ 使用第 11 节的正式 64 样本校验集。 采样目录名固定以 `mujoco_stairs_sample_` 开头,用于保存独立 MuJoCo ONNX 推理检查日志PTQ 使用第 11 节的正式 64 样本校验集。
@@ -629,10 +649,10 @@ env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
```bash ```bash
env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \ env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx \ --onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx \
--sample-stairs-level 3 \ --sample-stairs-level 3 \
--sample-seconds 20 \ --sample-seconds 20 \
--sample-log-dir /opt/go1_pro_deploy/logs \ --sample-log-dir /opt/go1_deploy/logs \
--spawn-x -0.6 \ --spawn-x -0.6 \
--spawn-z 0.34 --spawn-z 0.34
``` ```
@@ -799,13 +819,13 @@ task_name="go1_lab.flat"
## 10. 独立 MuJoCo sim2sim ## 10. 独立 MuJoCo sim2sim
这里推荐使用 `go1_pro_deploy/deploy_45dim_rl_gym/deploy_go1_onnx_mujoco_lab.py`,因为它与 RobotLab 的 10 帧/450 维 ONNX 接口一致。 这里推荐使用 `/opt/go1_deploy/deploy_rl_lab/deploy_go1_onnx_mujoco_lab.py`,因为它与 Lab 的 10 帧/450 维 ONNX 接口一致。
```bash ```bash
cd /opt/go1_pro_deploy/deploy_45dim_rl_gym cd /opt/go1_deploy/deploy_rl_lab
MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \ MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx --onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx
``` ```
这是带窗口和键盘的交互命令,需要可用的 X11/桌面。Linux 使用普通 `python`;只有 macOS 才通常需要 `mjpython`。脚本内部会 `chdir` 到自身目录,因此 `--onnx` 使用绝对路径。无图形环境应使用 8.4 节的 `--sample` 命令。 这是带窗口和键盘的交互命令,需要可用的 X11/桌面。Linux 使用普通 `python`;只有 macOS 才通常需要 `mjpython`。脚本内部会 `chdir` 到自身目录,因此 `--onnx` 使用绝对路径。无图形环境应使用 8.4 节的 `--sample` 命令。
@@ -814,8 +834,8 @@ MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
```bash ```bash
MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \ MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx \ --onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx \
--terrain /opt/go1_pro_deploy/deploy_45dim_rl_gym/terrains/stairs/stairs_3.xml \ --terrain /opt/go1_deploy/deploy_rl_lab/terrains/stairs/stairs_3.xml \
--spawn-x -0.6 \ --spawn-x -0.6 \
--spawn-z 0.34 --spawn-z 0.34
``` ```
@@ -854,13 +874,15 @@ BPU 量化不是把 ONNX 改一个后缀。至少需要:
当前 26000 模型使用 `calibration_data_26000_robotlab_fast64/` 中的 64 个 PTQ 校验样本。这批数据来自 ONNX 推理流程,不是 X5 量化产生的模型 `.bin`。需要重新生成时,先检查供 `make_calibration_data.py` 使用的 ONNX 推理日志: 当前 26000 模型使用 `calibration_data_26000_robotlab_fast64/` 中的 64 个 PTQ 校验样本。这批数据来自 ONNX 推理流程,不是 X5 量化产生的模型 `.bin`。需要重新生成时,先检查供 `make_calibration_data.py` 使用的 ONNX 推理日志:
```bash ```bash
find /opt/go1_pro_deploy/logs \ find /opt/go1_deploy/logs \
-path '*/robotlab_go1_deploy_*/steps.jsonl' \ -path '*/robotlab_go1_deploy_*/steps.jsonl' \
-type f -print -type f -print
``` ```
`make_calibration_data.py` 读取日志中的 `mode: RL` 和 45 维 `obs_single`,按部署顺序重建 10 帧/450 维历史,并写出工具链所需的 raw float32 校准输入 `.bin`。这里的 `.bin` 是 PTQ 输入文件X5 编译完成后生成的模型也使用 `.bin` 后缀,但两者用途完全不同。脚本找不到匹配日志或有效样本不足时会中止,不会绕过数据准备继续编译。 `make_calibration_data.py` 读取日志中的 `mode: RL` 和 45 维 `obs_single`,按部署顺序重建 10 帧/450 维历史,并写出工具链所需的 raw float32 校准输入 `.bin`。这里的 `.bin` 是 PTQ 输入文件X5 编译完成后生成的模型也使用 `.bin` 后缀,但两者用途完全不同。脚本找不到匹配日志或有效样本不足时会中止,不会绕过数据准备继续编译。
路径 A 已随镜像提供 `calibration_data_26000_robotlab_fast64/`。量化脚本检测到目录中恰好有 64 个 `.bin` 时直接复用;路径 B 或样本数量不匹配时,才从上述 ONNX 推理日志重新生成。
当前量化脚本会保留 actions 输出、降级 opset、包装为 BPU 需要的 4D 输入,并把 MoE grouped Conv 等价替换为 Gemm以减少 CPU fallback。中间 norm 节点位于 actor 之前,不能随意删除或移到后处理。 当前量化脚本会保留 actions 输出、降级 opset、包装为 BPU 需要的 4D 输入,并把 MoE grouped Conv 等价替换为 Gemm以减少 CPU fallback。中间 norm 节点位于 actor 之前,不能随意删除或移到后处理。
量化脚本内部流程如下: 量化脚本内部流程如下:
@@ -881,19 +903,19 @@ ONNX 推理流程日志 steps.jsonl
| 参数 | 含义 | 常用设置 | | 参数 | 含义 | 常用设置 |
| --- | --- | --- | | --- | --- | --- |
| `--policy` | 原始 ONNX 路径,必须在部署仓库内 | `../policy_robotlab_26000.onnx` | | `--policy` | 原始 ONNX 路径,必须在部署仓库内 | `../policy_robotlab_26000.onnx` |
| `--round` | 输出目录和校准目录里的轮次标签,不参与计算 | `26000``35k` | | `--round` | 输出目录和校准目录里的轮次标签,不参与计算 | `26000` |
| `--name` | 输出模型 basename不填时取 ONNX 文件名 | `policy_robotlab_26000` | | `--name` | 输出模型 basename不填时取 ONNX 文件名 | `policy_robotlab_26000` |
| `--history-len` | 历史帧数,用于重建输入维度 | RobotLab 为 `10`Gym 为 `5` | | `--history-len` | 历史帧数,用于重建输入维度 | Lab 固定`10` |
| `--flat-dim` | 平铺输入维度;不填时为 `45 * history-len` | RobotLab 为 `450`Gym 为 `225` | | `--flat-dim` | 平铺输入维度;不填时为 `45 * history-len` | Lab 固定`450` |
| `--samples` | 校准样本数量,越大越慢但覆盖更稳 | 默认 `64`,必要时 `128` | | `--samples` | 校准样本数量,越大越慢但覆盖更稳 | 默认 `64`,必要时 `128` |
| `--min-samples` | 最少有效样本数,不足则中止 | 默认 `32` | | `--min-samples` | 最少有效样本数,不足则中止 | 默认 `32` |
| `--log-prefix` | 从 `logs/` 下筛选 ONNX 推理日志的目录前缀 | `robotlab_go1_deploy` | | `--log-prefix` | 从 `logs/` 下筛选 ONNX 推理日志的目录前缀 | `robotlab_go1_deploy` |
| `--cal-tag` | 校准目录标签,区分 RobotLab/Gym | `robotlab``gym` | | `--cal-tag` | 校准目录标签 | `robotlab` |
| `--compare-limit` | 浮点 ONNX 等价对比样本数 | 默认 `64` | | `--compare-limit` | 浮点 ONNX 等价对比样本数 | 默认 `64` |
| `--quant` | 量化策略 | 默认 `int16``int8` 仅作对照 | | `--quant` | 量化策略 | 默认 `int16``int8` 仅作对照 |
| `--docker-image` | D-Robotics CPU 工具链镜像 | X5/S100 各自不同 | | `--docker-image` | D-Robotics CPU 工具链镜像 | X5/S100 各自不同 |
量化建议在 Mac 或训练机的 Docker 中完成,不在 X5/S100 板端跑 Docker。本文训练/量化主机的仓库固定为 `/opt/go1_pro_deploy`;板端只负责加载产物做离线测速、数值对齐和实机部署。 量化建议在 Mac 或训练机的 Docker 中完成,不在 X5/S100 板端跑 Docker。本文训练/量化主机的仓库固定为 `/opt/go1_deploy`;板端只负责加载产物做离线测速、数值对齐和实机部署。
量化脚本内部直接调用 `docker`。运行 X5/S100 脚本前先验收 daemon 量化脚本内部直接调用 `docker`。运行 X5/S100 脚本前先验收 daemon
@@ -912,13 +934,13 @@ sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker load \
# sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker pull openexplorer/ai_toolchain_ubuntu_20_x5_cpu:v1.2.8 # sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker pull openexplorer/ai_toolchain_ubuntu_20_x5_cpu:v1.2.8
``` ```
脚本默认会用 `docker run --rm --platform linux/amd64` 启动这个镜像,并把当前仓库挂载到 `/workspace/deploy_go1_pro`。量化机执行: 脚本默认会用 `docker run --rm --platform linux/amd64` 启动这个镜像,并把当前仓库挂载到容器内 `/workspace/go1_deploy`。量化机执行:
```bash ```bash
cd /opt/go1_pro_deploy cd /opt/go1_deploy
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \ sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_x5.sh \ bash deploy_rl_lab/bpu_quantization/quantize_policy_x5.sh \
--policy ../policy_robotlab_26000.onnx \ --policy ../policy_robotlab_26000.onnx \
--round 26000 \ --round 26000 \
--name policy_robotlab_26000 \ --name policy_robotlab_26000 \
@@ -939,29 +961,16 @@ X5 关键配置:
- int16 时脚本在 YAML 中写入 `optimization: "set_all_nodes_int16"` - int16 时脚本在 YAML 中写入 `optimization: "set_all_nodes_int16"`
- `hb_mapper checker` 默认会先运行;明确知道模型已检查过时才使用 `--skip-checker` - `hb_mapper checker` 默认会先运行;明确知道模型已检查过时才使用 `--skip-checker`
如果要量化旧 Gym 5 帧模型,必须同步修改历史长度、日志前缀和标签 以下是 **RDK X5 目标板** 命令。板端软件按交付约定安装在 `/root/go1_deploy`;这是硬件系统路径,不是训练/量化镜像路径,也不应复制回 `/opt` 镜像执行
```bash
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_x5.sh \
--policy ../policy_35k.onnx \
--round 35k \
--history-len 5 \
--log-prefix rlgym_go1_deploy \
--cal-tag gym \
--quant int16
```
以下是 **RDK X5 目标板** 命令。板端软件按交付约定安装在 `/root/go1_pro_deploy`;这是硬件系统路径,不是训练/量化镜像路径,也不应复制回 `/opt` 镜像执行:
板端先做完全离线自检,不连接电机控制: 板端先做完全离线自检,不连接电机控制:
```bash ```bash
cd /root/go1_pro_deploy cd /root/go1_deploy
PYTHONPATH=/root/go1_pro_deploy \ PYTHONPATH=/root/go1_deploy \
python3 deploy_45dim_rl_gym/bpu_deploy_x5/test_bpu_policy.py \ python3 deploy_rl_lab/bpu_deploy_x5/test_bpu_policy.py \
--bpu-model deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_gemm/policy_robotlab_26000_int16_gemm.bin \ --bpu-model deploy_rl_lab/bpu_quantization/mapper_output_26000_gemm/policy_robotlab_26000_int16_gemm.bin \
--input-bin deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \ --input-bin deploy_rl_lab/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
--repeat 1000 --repeat 1000
``` ```
@@ -981,10 +990,10 @@ sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker load \
脚本同样在量化机 Docker 中运行,不在 S100 板端运行 Docker 脚本同样在量化机 Docker 中运行,不在 S100 板端运行 Docker
```bash ```bash
cd /opt/go1_pro_deploy cd /opt/go1_deploy
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \ sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_s100.sh \ bash deploy_rl_lab/bpu_quantization/quantize_policy_s100.sh \
--policy ../policy_robotlab_26000.onnx \ --policy ../policy_robotlab_26000.onnx \
--round 26000 \ --round 26000 \
--name policy_robotlab_26000 \ --name policy_robotlab_26000 \
@@ -1010,16 +1019,16 @@ S100 关键配置:
```bash ```bash
/usr/hobot/bin/hrt_model_exec model_info \ /usr/hobot/bin/hrt_model_exec model_info \
--model_file deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm --model_file deploy_rl_lab/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm
``` ```
板端测速: 板端测速:
```bash ```bash
/usr/hobot/bin/hrt_model_exec perf \ /usr/hobot/bin/hrt_model_exec perf \
--model_file deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm \ --model_file deploy_rl_lab/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm \
--model_name policy_robotlab_26000_s100_int16_gemm \ --model_name policy_robotlab_26000_s100_int16_gemm \
--input_file deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \ --input_file deploy_rl_lab/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
--frame_count 1000 \ --frame_count 1000 \
--thread_num 1 --thread_num 1
``` ```
@@ -1169,9 +1178,9 @@ pgrep -fl 'keep_sport_alive|Legged_sport|appTransit'
X5 示例: X5 示例:
```bash ```bash
cd /root/go1_pro_deploy cd /root/go1_deploy
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \ PYTHONPATH=/root/go1_pro_sdk:/root/go1_deploy \
python3 deploy_45dim_rl_gym/bpu_deploy_x5/deploy_go1_robotlab_bpu_x5_fastcpp.py \ python3 deploy_rl_lab/bpu_deploy_x5/deploy_go1_robotlab_bpu_x5_fastcpp.py \
--infer-check \ --infer-check \
--log-dir logs \ --log-dir logs \
--print-every 50 \ --print-every 50 \
@@ -1182,9 +1191,9 @@ python3 deploy_45dim_rl_gym/bpu_deploy_x5/deploy_go1_robotlab_bpu_x5_fastcpp.py
S100 示例: S100 示例:
```bash ```bash
cd /root/go1_pro_deploy cd /root/go1_deploy
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \ PYTHONPATH=/root/go1_pro_sdk:/root/go1_deploy \
python3 deploy_45dim_rl_gym/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \ python3 deploy_rl_lab/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \
--infer-check \ --infer-check \
--log-dir logs \ --log-dir logs \
--print-every 50 \ --print-every 50 \
@@ -1349,7 +1358,3 @@ loop_dt_ms / recv_ms / policy_ms / work_ms / state_fresh / state_age_ms
- [Unitree unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk) - [Unitree unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk)
- 本地 `go2_rl_robotlab/docs/go1.md` - 本地 `go2_rl_robotlab/docs/go1.md`
- 本地 `RoboGauge/assets/docs/go1_policy_io_zh.md` - 本地 `RoboGauge/assets/docs/go1_policy_io_zh.md`
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/README.md`
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/README.md`
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/bpu_deploy_x5/README.md`
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/bpu_deploy_s100/README.md`