本文基于昇腾官方 Pi-0 训练文档与 PI0 训练记录,输出一份可复用的案例文档。案例覆盖环境与版本对齐、代码与依赖安装、数据集与权重准备(含受限网络/离线场景)、单机 8 卡训练验证(性能/精度)与日志指标口径;并补充DeepSpeed 多机训练、精度对齐方法(固定随机性、采集与比对精度数据)以及性能调优路径(profiling、融合优化器、绑核),用于支撑现场问题定位与验收复现。
PI0(Pi-0 / pi-zero)是通用机器人基础模型之一,目标是训练出可在多机器人平台、多任务上泛化的通用机器人策略。期望在昇腾 NPU(A3 Pod)上完成训练跑通与验收,并在此基础上支持更长周期训练、精度对齐与性能调优,形成可复用方案。
| 硬件名称 | 配置信息 | 备注 |
|---|---|---|
| 机器型号 | A3 Pod | 单机 8 卡验证为主,可扩展多机 |
官方 Pi-0 文档给出的最低支持范围与版本对齐如下(以现场镜像为准):
| 软件 | 版本 | 部署方式 |
|---|---|---|
| Driver | AscendHDK 25.2.0 | 宿主机 |
| Firmware | AscendHDK 25.2.0 | 宿主机 |
| FrameworkPTAdapter | 7.1.0(首次支持) | 宿主机/容器配套 |
| CANN | 8.2.RC1(首次支持) | 宿主机/容器配套 |
| Docker 镜像 OS | Ubuntu 20.04.6 | 容器 |
| Python | 3.10.x | 容器 |
| PyTorch | 2.1.0 | 容器 |
| torch_npu | 2.1.0(release v7.1.0) | 容器 |
| DrivingSDK | master(model_examples/Pi-0) | 容器 |
(DeepSpeed 训练分支)额外关注:
| 软件 | 版本 | 备注 |
|---|---|---|
| transformers | 4.48.3 | 与 GPU 侧需尽量对齐 |
| DeepSpeed | 指定提交(示例:c2bb53f20fa) | 多机训练依赖 hostfile |
镜像:
pi0-pytorch2.1.0-ascend_cann8.2.rc1-py310-ubuntu20.04-arm64:0913PI0(Pi-0 / pi-zero)是面向通用机器人控制的视觉-语言-动作(VLA)模型。其核心思路是利用预训练视觉语言模型(VLM)的语义与视觉理解能力,结合机器人数据学习到从“感知与指令”到“连续动作”的映射,从而在多任务、多机器人平台上具备较强的泛化能力。
模型关键特点:
按官方文档准备代码(commit 与补丁见 Pi-0/README.md):
conda create -n pi0 python=3.10
conda activate pi0
git clone https://github.com/huggingface/lerobot.git
cd lerobot
git checkout 0cf864870cf29f4738d3ade893e6fd13fbd7cdb5
cp -f /path/to/PI0-TRAIN/Pi-0/pi0.patch .
cp -rf /path/to/PI0-TRAIN/Pi-0/test/ .
git apply pi0.patch
pip install -e '.[pi0]'
pip install -r /path/to/PI0-TRAIN/Pi-0/requirements.txt{dataset_path}受限网络建议使用镜像站点:
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com{pi0_weights}huggingface-cli download --resume-download --local-dir-use-symlinks False lerobot/pi0 --local-dir pi0{paligemma_weights}huggingface-cli download --resume-download --local-dir-use-symlinks False google/paligemma-3b-pt-224 --local-dir paligemma-3b-pt-224下载完成后,将本地 paligemma 路径写入代码(脚本位于 paligemma_weights_mod.sh):
bash test/paligemma_weights_mod.sh {paligemma_weights}脚本位于 Pi-0/test:
bash test/train_8p_performance.sh {dataset_path} {pi0_weights}bash test/train_8p.sh {dataset_path} {pi0_weights}日志与指标口径(由脚本生成):
lerobot/test/output/train_*_8p_base_fp32.loglerobot/test/output/Pi0_bs12_8p_acc.logFinal Performance images/sec、Final Train Loss、E2E Training Duration sec官方文档给出的单机 8 卡参考结果如下(Mixed 精度,global_batch_size=96,iterations=20k):
| NAME | Precision | iterations | global_batch_size | mean training loss | FPS |
|---|---|---|---|---|---|
| 8p-竞品A | Mixed | 20k | 96 | 0.003929 | 136.17 |
| 8p-Atlas 800T A2 | Mixed | 20k | 96 | 0.003932 | 116.36 |
实际运行的loss曲线:

本节内容来自记录(pi0模型.md),用于扩展到更长周期训练与多机场景。以下内容避免绑定任何企业内部路径,示例路径需按现场替换。
关键参数:
NNODES:节点总数NODE_RANK:当前节点编号MASTER_ADDR:主节点地址MASTER_PORT:主节点端口hostfile:各节点 IP 与 slots(每节点卡数/slot 数)hostfile 示例:
192.168.1.1 slots=16
192.168.1.2 slots=16常见做法是由平台注入环境变量(如 VC_WORKER_NUM/VC_TASK_INDEX)并从节点列表文件中读取主节点地址,自动生成 hostfile,减少人工错误。
对齐流程建议:
固定随机性(NPU)可采用 msprobe 提供的 seed_all()(示例逻辑,实际插入位置以训练主入口为准):
from msprobe.pytorch import seed_all
seed_all(seed=1234, mode=True, rm_dropout=True)性能分解:
单 batch 总时间 = 数据加载 + 模型前反向 + 优化器 + 后处理 + 通信 + 调度
建议闭环:
已验证的优化点与收益(以现场数据为准):
| 1 | 叠衣服622数据集 | mirro | H20 | 单机 | 8万 | 38.09 | 8万 | 可正常叠衣服 | PASS | / | 效果基线 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 叠衣服622数据集 | mirro | 910C | 单机 | 8万 | 21.16 | 8万 | 可正常叠衣服 | PASS | 1.80倍 | 效果与GPU相当 | |
| 3 | 叠衣服3522数据集 | mirro | 910C | 四机 | 5万 | / | 5万 | 无法完成任务,效果较差 | FAIL | / | ①GPU正常抓取失败后会重试,NPU抓取失败会直接进入下一步。 ②机械臂会略过一些中间动作,动作不连贯。 | 无GPU基线,未对齐超参。本来应该跑5w步,实际跑8w步,存在过拟合可能。 |
| 4 | 叠衣服802数据集 | mirro | H20 | 单机 | 16万 | 226.78 | 8万 | 可正常叠衣服 | PASS | / | 效果基线 | |
| 5 | 叠衣服802数据集 | mirro | 910C | 单机 | 16万 | 119.6 | 8万 | 未真机测试 | NT | 1.89倍 | 效果与GPU相当 | |
| 6 | 叠衣服802数据集 | mirro | H20 | 双机 | 8万 | 115.43 | 4万 | 未真机测试 | NT | / | 效果基线 | |
| 7 | 叠衣服802数据集 | mirro | 910C | 双机 | 8万 | 61.95 | 4万 | 可正常叠衣服 | PASS | 1.86倍 | 效果与GPU相当 | |
| 8 | 叠衣服808数据集 | mirro | 910C | 双机 | 8万 | 60.95 | 4万 | 可正常叠衣服 | PASS | 1.89倍 | 能完成任务 | 未跑GPU基线 |
| 9 | 叠衣服808数据集 | mirro | 910C | 四机 | 4万 | 30.25 | 2万 | 可正常叠衣服 | PASS | 线性度0.988 | 能完成任务 | |
| 10 | 叠衣服808数据集 | mirro | 910C | 八机 | 2万 | 16.1 | 1万 | 可正常叠衣服 | PASS | 线性度0.928 | 能完成任务 |
优化前:
优化后: