18.1 前置条件
18.1 前置条件
source "${HOME}/.config/gr00t-inference/paths.sh"
cd "${GR00T_REPO}"
git rev-parse HEAD
预期仓库修订:
dcf5f6b759fd17cab3644a97fc4429bca7451e38
验证第 17 章的输入都在位:
test -f "${GR00T_MODEL_PATH}/config.json"
test -f "${GR00T_MODEL_PATH}/processor_config.json"
test -f "${GR00T_MODEL_PATH}/statistics.json"
test -f "${GR00T_DATASET_PATH}/meta/info.json"
test -f "${GR00T_DATASET_PATH}/meta/modality.json"
test -f "${GR00T_BACKBONE_PATH}/config.json"
TensorRT .engine 文件依赖 GPU 架构、TensorRT 版本、checkpoint、图形状、
精度与构建配置。每个目标构建自己的引擎。
18.2 TensorRT 流水线产出
18.2 TensorRT 流水线产出
完整流水线创建七个目标专属引擎:
1. vit.engine
2. llm_bf16.engine
3. vl_self_attention.engine
4. state_encoder.engine
5. action_encoder.engine
6. dit_bf16.engine
7. action_decoder.engine
18.3 在 Jetson AGX Orin 上构建
18.3 在 Jetson AGX Orin 上构建
export GR00T_TARGET=orin
source "${HOME}/.config/gr00t-inference/paths.sh"
cd "${GR00T_REPO}"
bash scripts/deployment/orin_jp72/run_full_trt.sh prepare
bash scripts/deployment/orin_jp72/run_full_trt.sh verify
bash scripts/deployment/orin_jp72/run_full_trt.sh status
包装脚本会激活 .venv-jp72,加载 JetPack 7.2 CUDA 运行时路径,并把 Orin
引擎包构建到 ${GR00T_TRT_OUTPUT} 下。
18.4 在 Jetson AGX Thor 上构建
18.4 在 Jetson AGX Thor 上构建
export GR00T_TARGET=thor
source "${HOME}/.config/gr00t-inference/paths.sh"
cd "${GR00T_REPO}"
source .venv/bin/activate
source scripts/activate_thor.sh
python scripts/deployment/build_trt_pipeline.py \
--model-path "${GR00T_MODEL_PATH}" \
--dataset-path "${GR00T_DATASET_PATH}" \
--embodiment-tag NEW_EMBODIMENT \
--output-dir "${GR00T_TRT_OUTPUT}" \
--precision bf16 \
--batch-size 1 \
--steps export,build,verify,benchmark
使用与第 10 章训练时相同的本体标签(NEW_EMBODIMENT)与 16 步动作视界。
即使与 Orin 共享 checkpoint 与数据集,也要构建独立的 Thor 输出目录。
18.5 运行离线推理
18.5 运行离线推理
先用录制的轨迹离线验证引擎:
# Orin
bash scripts/deployment/orin_jp72/run_full_trt.sh evaluate
该命令对配置好的本地轨迹评估 TensorRT 流水线,并把结果写到
${GR00T_RESULT_PATH}。
# Thor
source .venv/bin/activate
source scripts/activate_thor.sh
python scripts/deployment/standalone_inference_script.py \
--model-path "${GR00T_MODEL_PATH}" \
--dataset-path "${GR00T_DATASET_PATH}" \
--embodiment-tag NEW_EMBODIMENT \
--traj-ids 0 \
--inference-mode trt_full_pipeline \
--trt-engine-path "${GR00T_TRT_OUTPUT}/engines" \
--execution-horizon 16 \
--save-plot-path "${GR00T_RESULT_PATH}"
使用与导出引擎时相同的本体标签与动作视界。
18.6 启动 TensorRT 策略服务
18.6 启动 TensorRT 策略服务
bash scripts/deployment/orin_jp72/run_full_trt.sh serve
ss -ltn | grep ':5555'
默认端点是 127.0.0.1:5555。要开放其他地址:
export GR00T_SERVER_HOST=0.0.0.0
export GR00T_SERVER_PORT=5555
bash scripts/deployment/orin_jp72/run_full_trt.sh serve
把 SO-101 机器人客户端指向 Jetson。在 Jetson 本机——或同网络任意装有 workshop 评估脚本并接着从臂的机器上——用 Jetson 的地址运行第 11 章的 客户端:
python Isaac-GR00T/gr00t/eval/real_robot/SO100/so101_eval.py \
--robot.type=so101_follower \
--robot.port=$ROBOT_PORT \
--robot.id=$ROBOT_ID \
--robot.cameras="{
wrist: {type: opencv, index_or_path: $CAMERA_GRIPPER, width: 640, height: 480, fps: 30},
front: {type: opencv, index_or_path: $CAMERA_EXTERNAL, width: 640, height: 480, fps: 30}
}" \
--policy_host=<JETSON_IP> \
--policy_port=5555 \
--lang_instruction="Put the three vials into the vial rack"
至此,SO-101 从臂执行的是一个完全跑在 Jetson 上的策略。
校验引擎包:
find "${GR00T_TRT_OUTPUT}/engines" -maxdepth 1 -name '*.engine' -printf '%f\n' | sort
确认七个引擎都在,且验证过程没有形状或数值精度失败。
18.7 排错
18.7 排错
Orin 上找不到 libcusparseLt.so.0
使用包装脚本,不要直接调用 .venv-jp72/bin/python:
bash scripts/deployment/orin_jp72/run_full_trt.sh evaluate
Python 环境不对
which python
python -c "import sys; print(sys.executable)"
- Orin:
${GR00T_REPO}/.venv-jp72/bin/python - Thor:
${GR00T_REPO}/.venv/bin/python
引擎形状或反序列化错误
更换 checkpoint、backbone、TensorRT 版本、精度、batch size、动作视界或图 形状后,删掉目标引擎并重建:
rm -rf "${GR00T_TRT_OUTPUT}/engines"
然后重跑对应的 Orin 或 Thor 构建命令。
TensorRT 构建内存不足
free -h
df -h "${GR00T_WORKSPACE}"
sudo tegrastats
关闭其他 GPU 应用,确认工作区存储充足后再重建。
18.8 复现清单
18.8 复现清单
- 仓库处于验证过的提交;
- checkpoint、backbone、数据集与本体配置齐全;
- Orin 用
.venv-jp72;Thor 用.venv; - 七个引擎在运行它们的目标上构建;
- 离线 TensorRT 推理完成并保存结果图;
- 策略服务仅在引擎包通过验证后启动;
- SO-101 从臂执行由 Jetson 策略服务驱动的任务。
返回课程概览:SO-ARM101 Sim-to-Real VLA 课程。