adapt s100

This commit is contained in:
cyy_mac
2026-07-29 21:00:26 +08:00
parent 8e2f5d6de5
commit 8a44857314
6 changed files with 1881 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
model_parameters:
onnx_model: "./policy_robotlab_26000_bpu4d_gemm.onnx"
march: "nash-e"
layer_out_dump: false
working_dir: "mapper_output_26000_s100_gemm"
output_model_file_prefix: "policy_robotlab_26000_s100_int16_gemm"
input_parameters:
input_name: "obs_4d"
input_shape: "1x1x1x450"
input_type_rt: "featuremap"
input_type_train: "featuremap"
input_layout_train: "NCHW"
norm_type: "no_preprocess"
separate_batch: false
calibration_parameters:
cal_data_dir: "./calibration_data_26000_robotlab_fast64"
cal_data_type: "float32"
calibration_type: "max"
quant_config:
model_config:
all_node_type: int16
activation:
calibration_type: max
per_channel: true
compiler_parameters:
compile_mode: "latency"
optimize_level: "O2"
core_num: 1
jobs: 8
cache_mode: "disable"

View File

@@ -0,0 +1,229 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
POLICY="../policy_robotlab_26000.onnx"
ROUND="26000"
NAME=""
HISTORY_LEN=10
FLAT_DIM=""
SAMPLES=64
MIN_SAMPLES=32
LOG_PREFIX="robotlab_go1_deploy"
CAL_TAG="robotlab"
DOCKER_IMAGE="registry.d-robotics.cc/deliver/ai_toolchain_ubuntu_22_s100_s600_cpu:v3.7.0"
MARCH="nash-e"
COMPARE_LIMIT=64
RUN_CHECKER=1
QUANT="int16"
usage() {
cat <<'EOF'
Usage:
./quantize_policy_s100.sh [options]
Default: quantize RobotLab policy_robotlab_26000.onnx as 10-frame/450-dim
S100 int16 Gemm BPU model.
Options:
--policy PATH ONNX policy path, relative to this directory or absolute
--round NAME round label used in output paths, e.g. 15k/25k/30k/35k
--name NAME model basename; default is policy filename without .onnx
--history-len N observation history length; Gym=5, RobotLab=10
--flat-dim N flat input dim; default 45 * history-len
--samples N calibration sample count; default 64 for faster mapping
--min-samples N minimum valid samples required; default 32
--log-prefix PREFIX log dir prefix below logs/, default rlgym_go1_deploy
--cal-tag TAG calibration dir tag, default gym
--docker-image IMAGE D-Robotics S100/S600 CPU toolchain image
--march MARCH S100 march, default nash-e
--compare-limit N float ONNX equivalence sample count, default 64
--quant int16|int8 int16 uses all_node_type int16; int8 uses default S100 PTQ
--skip-checker accepted for parity with X5 script; hb_compile path ignores it
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--policy) POLICY="$2"; shift 2 ;;
--round) ROUND="$2"; shift 2 ;;
--name) NAME="$2"; shift 2 ;;
--history-len) HISTORY_LEN="$2"; shift 2 ;;
--flat-dim) FLAT_DIM="$2"; shift 2 ;;
--samples) SAMPLES="$2"; shift 2 ;;
--min-samples) MIN_SAMPLES="$2"; shift 2 ;;
--log-prefix) LOG_PREFIX="$2"; shift 2 ;;
--cal-tag) CAL_TAG="$2"; shift 2 ;;
--docker-image) DOCKER_IMAGE="$2"; shift 2 ;;
--march) MARCH="$2"; shift 2 ;;
--compare-limit) COMPARE_LIMIT="$2"; shift 2 ;;
--quant) QUANT="$2"; shift 2 ;;
--skip-checker) RUN_CHECKER=0; shift ;;
-h|--help) usage; exit 0 ;;
*) echo "Unknown argument: $1" >&2; usage >&2; exit 2 ;;
esac
done
if [[ -z "${FLAT_DIM}" ]]; then
FLAT_DIM=$((45 * HISTORY_LEN))
fi
case "${QUANT}" in
int16|int8) ;;
*) echo "--quant must be int16 or int8, got: ${QUANT}" >&2; exit 2 ;;
esac
if [[ "${POLICY}" = /* ]]; then
POLICY_ABS="${POLICY}"
else
POLICY_ABS="${SCRIPT_DIR}/${POLICY}"
fi
POLICY_ABS="$(cd "$(dirname "${POLICY_ABS}")" && pwd)/$(basename "${POLICY_ABS}")"
if [[ ! -f "${POLICY_ABS}" ]]; then
echo "Policy not found: ${POLICY_ABS}" >&2
exit 2
fi
case "${POLICY_ABS}" in
"${REPO_ROOT}"/*) POLICY_REL="${POLICY_ABS#${REPO_ROOT}/}" ;;
*) echo "Policy must be inside repo root ${REPO_ROOT}: ${POLICY_ABS}" >&2; exit 2 ;;
esac
if [[ -z "${NAME}" ]]; then
NAME="$(basename "${POLICY_ABS}" .onnx)"
fi
CAL_DIR="calibration_data_${ROUND}_${CAL_TAG}_fast${SAMPLES}"
if [[ "${QUANT}" = "int16" ]]; then
OUTPUT_DIR="mapper_output_${ROUND}_s100_gemm"
OUTPUT_PREFIX="${NAME}_s100_int16_gemm"
else
OUTPUT_DIR="mapper_output_${ROUND}_s100_int8_gemm"
OUTPUT_PREFIX="${NAME}_s100_int8_gemm"
fi
YAML_FILE="${OUTPUT_PREFIX}.yaml"
echo "[INFO] repo : ${REPO_ROOT}"
echo "[INFO] policy : ${POLICY_REL}"
echo "[INFO] name/round : ${NAME} / ${ROUND}"
echo "[INFO] history/shape : ${HISTORY_LEN} / 1x1x1x${FLAT_DIM}"
echo "[INFO] calibration : ${CAL_DIR} (${SAMPLES} samples, prefix ${LOG_PREFIX})"
echo "[INFO] output : ${OUTPUT_DIR}/${OUTPUT_PREFIX}.hbm"
echo "[INFO] quant : ${QUANT}"
echo "[INFO] march : ${MARCH}"
echo "[INFO] docker image : ${DOCKER_IMAGE}"
docker run --rm --platform linux/amd64 \
-e POLICY_REL="${POLICY_REL}" \
-e NAME="${NAME}" \
-e HISTORY_LEN="${HISTORY_LEN}" \
-e FLAT_DIM="${FLAT_DIM}" \
-e SAMPLES="${SAMPLES}" \
-e MIN_SAMPLES="${MIN_SAMPLES}" \
-e LOG_PREFIX="${LOG_PREFIX}" \
-e CAL_DIR="${CAL_DIR}" \
-e OUTPUT_DIR="${OUTPUT_DIR}" \
-e OUTPUT_PREFIX="${OUTPUT_PREFIX}" \
-e YAML_FILE="${YAML_FILE}" \
-e COMPARE_LIMIT="${COMPARE_LIMIT}" \
-e RUN_CHECKER="${RUN_CHECKER}" \
-e QUANT="${QUANT}" \
-e MARCH="${MARCH}" \
-v "${REPO_ROOT}:/workspace/deploy_go1_pro" \
"${DOCKER_IMAGE}" \
bash -lc '
set -euo pipefail
cd /workspace/deploy_go1_pro/deploy_45dim_rl_gym/bpu_quantization
POLICY="/workspace/deploy_go1_pro/${POLICY_REL}"
ACTIONS_ONNX="${NAME}_actions.onnx"
OPSET_ONNX="${NAME}_opset11.onnx"
BPU4D_ONNX="${NAME}_bpu4d.onnx"
GEMM_ONNX="${NAME}_bpu4d_gemm.onnx"
python3 make_calibration_data.py \
--logs-root ../../logs \
--log-prefix "${LOG_PREFIX}" \
--history-len "${HISTORY_LEN}" \
--output-dir "${CAL_DIR}" \
--max-samples "${SAMPLES}" \
--min-samples "${MIN_SAMPLES}" \
--overwrite
python3 keep_actions_output.py \
--input "${POLICY}" \
--output "${ACTIONS_ONNX}"
python3 downgrade_policy_to_opset11.py \
--input "${ACTIONS_ONNX}" \
--output "${OPSET_ONNX}"
python3 make_bpu_4d_onnx.py \
--input "${OPSET_ONNX}" \
--output "${BPU4D_ONNX}" \
--flat-dim "${FLAT_DIM}"
python3 replace_group_conv_with_gemm.py \
--input "${BPU4D_ONNX}" \
--output "${GEMM_ONNX}"
python3 compare_4d_onnx.py \
--flat-onnx "${ACTIONS_ONNX}" \
--bpu4d-onnx "${GEMM_ONNX}" \
--calibration-dir "${CAL_DIR}" \
--flat-dim "${FLAT_DIM}" \
--limit "${COMPARE_LIMIT}"
if [[ "${QUANT}" = "int16" ]]; then
QUANT_CONFIG=$(cat <<EOF
quant_config:
model_config:
all_node_type: int16
activation:
calibration_type: max
EOF
)
else
QUANT_CONFIG=""
fi
cat > "${YAML_FILE}" <<YAML
model_parameters:
onnx_model: "./${GEMM_ONNX}"
march: "${MARCH}"
layer_out_dump: false
working_dir: "${OUTPUT_DIR}"
output_model_file_prefix: "${OUTPUT_PREFIX}"
input_parameters:
input_name: "obs_4d"
input_shape: "1x1x1x${FLAT_DIM}"
input_type_rt: "featuremap"
input_type_train: "featuremap"
input_layout_train: "NCHW"
norm_type: "no_preprocess"
separate_batch: false
calibration_parameters:
cal_data_dir: "./${CAL_DIR}"
cal_data_type: "float32"
calibration_type: "max"
${QUANT_CONFIG}
per_channel: true
compiler_parameters:
compile_mode: "latency"
optimize_level: "O2"
core_num: 1
jobs: 8
cache_mode: "disable"
YAML
hb_compile -c "${YAML_FILE}"
find "${OUTPUT_DIR}" -maxdepth 1 -type f \( -name "${OUTPUT_PREFIX}.hbm" -o -name "${OUTPUT_PREFIX}.bin" \) -print -exec ls -lh {} \;
'
echo "[INFO] Done: deploy_45dim_rl_gym/bpu_quantization/${OUTPUT_DIR}/${OUTPUT_PREFIX}.hbm"