一、总览
全流程涉及 TI-ONE 的两个模块:
| 模块 | 承担的工作 |
| 开发机 | 挂载 CFS,下载数据集与基座权重,创建训练脚本 |
| 任务式建模 | 提交训练任务,环境准备与 DDP 训练由入口脚本自动完成 |
二、环境规格
| 项目 | 配置 |
| 模型 | PI05_base(3B 参数) |
| 训练框架 | openpi(PyTorch 训练路径,scripts/train_pytorch.py) |
| 分布式方式 | DDP(torchrun) |
| 数据集 | LIBERO(physical-intelligence/libero) |
| 配置文件 | pi05_libero |
| 训练精度 | BF16 |
| 机型 | HCCGC50S |
| 训练镜像 | ngc26.02-ofed5.8-hccgc50s-vla-v1.0(平台预置镜像,支持 openpi、fastwam 等模型快速启动) |
| 存储 | CFS(与训练资源同地域、同 VPC) |
三、前置要求
1. 计算资源:已准备 HCCGC50S 资源,并纳管到 TI-ONE 的资源组中。
2. 文件存储:已创建 CFS 文件系统,地域与 VPC 均需与训练资源一致,否则挂载失败。
3. 训练镜像:平台预置的 VLA 镜像已内置 openpi 仓库(容器内路径 /workspace/openpi)与 install_transformers_replace.sh,无需自行克隆代码;数据集与基座权重不在镜像内,需按步骤二准备。
五、步骤一:创建开发机并挂载 CFS
进入 训练工坊 > 开发机,单击新建:
| 配置项 | 填写说明 |
| 镜像 | 任意内置镜像,本开发机仅用于准备数据与脚本 |
| 机器来源 | 从已有 TI-ONE 资源组中选择 |
| 存储配置 | 选择前置要求中创建的 CFS,路径默认根目录 / |
注意:说明:
六、步骤二:准备数据集与基座权重
本实践所需物料由平台提供,包含数据集、归一化统计量与已转换为 PyTorch 格式的基座权重,下载后即可直接训练,无需自行执行归一化统计与权重格式转换。
七、1. 创建目录
ASSETS=/home/tione/notebook/embodied-ai/openpi-assetsmkdir -p $ASSETS/datasets \\ $ASSETS/assets/pi05_libero/physical-intelligence/libero \\ $ASSETS/checkpoints \\ $ASSETS/code
八、2. 下载并解压
ASSETS=/home/tione/notebook/embodied-ai/openpi-assetsCOS_BASE=https://taco-train-data-1251001002.cos.ap-shanghai.myqcloud.com# 2.1 LIBERO 数据集(约 35 GB,pi05_libero 配置默认加载)cd $ASSETS/datasetswget $COS_BASE/datasets/libero/physical-intelligence.tar.gztar -xf physical-intelligence.tar.gz# 2.2 归一化统计量:state / actions 各维度的均值与标准差,用于把量纲不同的数值缩放到同一尺度(推理时还原);随数据集提供,无需执行 compute_norm_statswget -O $ASSETS/assets/pi05_libero/physical-intelligence/libero/norm_stats.json $COS_BASE/datasets/libero/norm_stats.json# 2.3 分任务数据集(可选,约 4.7 GB,按 LIBERO 子任务拆分)cd $ASSETS/datasetswget $COS_BASE/datasets/libero/libero_mujoco3.3.2.tar.gztar -xf libero_mujoco3.3.2.tar.gz# 2.4 PI05_base 基座权重(约 14 GB,已转换为 PyTorch 格式)cd $ASSETS/checkpointswget $COS_BASE/models/PI05/pi05_base_pytorch.tar.gztar -xf pi05_base_pytorch.tar.gz
九、3. 校验结果
ASSETS=/home/tione/notebook/embodied-ai/openpi-assets# 目录结构(限制层级,避免列出数万个数据文件)find $ASSETS -maxdepth 3 -type d | sort# 关键文件必须存在ls $ASSETS/assets/pi05_libero/physical-intelligence/libero/norm_stats.json \\ $ASSETS/checkpoints/pi05_base_pytorch/config.json# 数据集占用应约 35 GBdu -sh $ASSETS/datasets/physical-intelligence/libero
预期目录结构:
/home/tione/notebook/embodied-ai/openpi-assets/├── datasets/│ ├── physical-intelligence/libero/ # pi05_libero 配置加载的数据集│ │ ├── meta/│ │ ├── data/chunk-000/…│ │ └── videos/chunk-000/…│ └── libero_mujoco3.3.2/ # 分任务数据集(可选)│ ├── libero_10_no_noops_lerobot/│ ├── libero_spatial_no_noops_lerobot/│ ├── libero_object_no_noops_lerobot/│ └── libero_goal_no_noops_lerobot/├── assets/pi05_libero/physical-intelligence/libero/norm_stats.json├── checkpoints/pi05_base_pytorch/ # PyTorch 格式基座权重└── code/ # 训练脚本(步骤三创建)
注意:说明:
注意:以上物料只需准备一次,后续训练任务复用同一份。
十、步骤三:准备训练脚本
在开发机 Terminal 中执行以下命令,创建训练脚本与入口脚本。两段命令均可整段复制粘贴后执行,heredoc 内的变量不会被提前展开。
十一、1. 训练脚本train_pytorch.sh
cat > /home/tione/notebook/embodied-ai/openpi-assets/code/train_pytorch.sh <<'EOF'#!/usr/bin/env bashset -euo pipefailexport JAX_PLATFORMS=cpu# 数据集已预置到 CFS;lerobot 仍会查询 hub refs,放行镜像访问避免卡住export HF_ENDPOINT=https://hf-mirror.comunset HF_HUB_OFFLINE 2>/dev/null || trueexport HF_LEROBOT_HOME=/home/tione/notebook/embodied-ai/openpi-assets/datasetsexport TRANSFORMERS_OFFLINE=1export NCCL_DEBUG=WARNexport NCCL_MIN_CTAS=1export NCCL_NSOCKS_PERTHREAD=2export NCCL_SOCKET_NTHREADS=2export NCCL_P2P_DISABLE=0export NCCL_SHM_DISABLE=0export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:Trueexport OMP_NUM_THREADS=1export MY_CHECKPOINTS_PATH=/home/tione/notebook/embodied-ai/openpi-assets/checkpointsexport NPROC_PER_NODE=${NPROC_PER_NODE:-$(nvidia-smi -L | grep -c '^GPU')}export NNODES=${NNODES:-1} NODE_RANK=${NODE_RANK:-0}export MASTER_ADDR=${MASTER_ADDR:-127.0.0.1} MASTER_PORT=${MASTER_PORT:-29571}cd /workspace/openpimkdir -p ./logsset -exexp_name=pi05_libero_pytorchtorchrun \\ –nnodes=$NNODES \\ –nproc_per_node=$NPROC_PER_NODE \\ –node_rank=$NODE_RANK \\ –master_addr=$MASTER_ADDR \\ –master_port=$MASTER_PORT \\ scripts/train_pytorch.py pi05_libero \\ –exp-name $exp_name \\ –pytorch-weight-path $MY_CHECKPOINTS_PATH/pi05_base_pytorch \\ –pytorch-training-precision bfloat16 \\ –batch-size 256 \\ –num-train-steps 50 \\ –log-interval 10 \\ –save-interval 25 \\ –no-wandb-enabled \\ 2>&1 | tee "./logs/${exp_name}-node${NODE_RANK}-$(date +"%Y%m%d-%H%M%S").log"EOFchmod +x /home/tione/notebook/embodied-ai/openpi-assets/code/train_pytorch.sh
关键约定:
·JAX_PLATFORMS=cpu:本实践走 PyTorch 训练路径,将 JAX 限制在 CPU 上,避免占用 GPU 显存。
·NPROC_PER_NODE / NNODES / NODE_RANK / MASTER_ADDR / MASTER_PORT:由入口脚本从平台注入的变量传入,并带默认值兜底,便于在开发机单机调试。
·CUDA_VISIBLE_DEVICES:默认对应单节点 8 卡,若申请卡数不同需相应调整。
·–batch-size 256:全局 batch size,单节点 8 卡下每卡 32。
·–num-train-steps 50、–save-interval 25:用于快速跑通链路,正式训练按需调整。
十二、2. 入口脚本 run.sh
cat > /home/tione/notebook/embodied-ai/openpi-assets/code/run.sh <<'EOF'#!/usr/bin/env bash# TI-ONE 任务式建模入口:环境准备 -> 资产校验 -> DDP 训练set -euo pipefailASSETS=/home/tione/notebook/embodied-ai/openpi-assetscd /workspace/openpi# 1. 环境准备:patch 作用于容器内 Python 环境,每次任务都需执行bash install_transformers_replace.sh# 2. 资产校验:缺失时立即失败,避免训练启动后才报错NORM_STATS=/workspace/openpi/assets/pi05_libero/physical-intelligence/libero/norm_stats.json[ -f "$NORM_STATS" ] || { echo "[error] 未找到 $NORM_STATS,请检查步骤二物料与存储挂载配置"; exit 1; }[ -d "$ASSETS/checkpoints/pi05_base_pytorch" ] \\|| { echo "[error] 未找到 $ASSETS/checkpoints/pi05_base_pytorch,请检查步骤二物料与存储挂载配置"; exit 1; }# 3. 启动训练(分布式参数由 TI-ONE 注入)cd /workspace/openpi/codeNPROC_PER_NODE=$GPU_NUM_PER_NODE NNODES=$WORLD_SIZE NODE_RANK=$RANK bash train_pytorch.shEOFchmod +x /home/tione/notebook/embodied-ai/openpi-assets/code/run.sh
注意:说明:
十三、步骤四:创建训练任务
进入 训练工坊 > 任务式建模,单击新建。
十四、1. 基本信息
| 配置项 | 填写说明 |
| 任务名称 | 自定义,支持中英文、数字、下划线、短横,需以中英文或数字开头 |
| 地域 | 与 CFS、资源组所在地域一致 |
| 训练镜像 | 在预置镜像中选择 ngc26.02-ofed5.8-hccgc50s-vla-v1.0 |
| 训练模式 | 选择 DDP |
| 算力规格 | 机型选择 HCCGC50S,例如 128C1024G HCC-N50p-72G*8;节点数量按训练规模填写 |
| 自动重启 | 可选 |
选择镜像(镜像中心 > 预置镜像):
训练模式与算力规格(示例为 2 节点):
注意:说明:
注意:多机训练建议选择整机资源,避免碎片化影响通信性能。
十五、2. 存储路径设置
按用途分别挂载 CFS 子目录,共四行。四行都需配置,缺少任一行会导致任务启动即失败:
| 存储类型 | 用途 | 源路径(CFS) | 容器内路径 |
| CFS | 用户自有数据 | <CFS 根目录>/embodied-ai/openpi-assets | /home/tione/notebook/embodied-ai/openpi-assets |
| CFS | 训练输出 | <CFS 根目录>/embodied-ai/openpi-assets/checkpoints | /workspace/openpi/checkpoints |
| CFS | 用户自有数据 | <CFS根目录>/embodied-ai/openpi-assets/assets | /workspace/openpi/assets |
| CFS | 用户自有代码 | <CFS根目录>/embodied-ai/openpi-assets/code | /workspace/openpi/code |
配置示例:
注意:说明:
十六、3. 启动命令
启动命令在每个节点上执行。环境准备与训练启动已收敛到入口脚本,因此只需一行:
bash /home/tione/notebook/embodied-ai/openpi-assets/code/run.sh
十七、4. 提交任务
确认配置后提交。此后环境准备、资产校验、训练与产物落盘全部在任务内自动完成。
注意:说明:
注意:DDP 模式包含 Master 和 Worker 两种角色,编号 0 的是 Master(RANK=0),负责保存模型。单节点任务只有 Master 一个实例,多节点任务才会有 Worker。任意实例退出码非 0 则整个任务失败。
平台注入的 DDP 环境变量
| 变量名 | 描述 |
| GPU_NUM_PER_NODE | 单个节点的 GPU 卡数 |
| WORLD_SIZE | DDP 训练任务的节点数 |
| RANK | 当前节点编号(Master 为 0) |
| MASTER_ADDR | Master 节点地址 |
| MASTER_PORT | Master 节点端口 |
| GPU_NUM | 任务包含的 GPU 卡总数 |
| NODE_LIST | 任务节点列表及各节点 GPU 卡数 |
| INDEX | 当前节点在 NODE_LIST 中的索引 |
十八、步骤五:观察训练与获取产物
在任务式建模页面单击任务名称进入详情,通过 日志 页观察训练状态。多机训练可切换「节点」下拉框分别查看:
正常流程的日志顺序:
1. 环境检测(Health Check Summary → PASS);
2. Start command: bash …/run.sh;
3. transformers_replace applied -> …;
4. 进入训练,按 –log-interval 打印 loss 与吞吐,按 –save-interval 保存 checkpoint。
注意:说明:
任务结束后,产物位于 CFS。目录名为训练步数,由 –save-interval 与 –num-train-steps 决定(这篇配置下为 25、49、50):
<openpi-assets>/checkpoints/pi05_libero/pi05_libero_pytorch/├── 25│ ├── assets/physical-intelligence/libero/norm_stats.json│ ├── metadata.pt│ ├── model.safetensors│ └── optimizer.pt├── 49/…└── 50/…
在开发机中即可直接查看与复用,也可作为下一次训练或评测任务的输入。
十九、步骤六:扩展到多机训练
将节点数量调整为 N(N ≥ 2)即可发起多机训练,脚本无需修改——分布式参数均由平台注入。
·整机与 RDMA:建议每节点配置 8 卡整机资源。节点数 ≥ 2 且每节点 8 卡整机时,平台默认配置 RDMA,无需额外设置。
·NCCL 环境变量:平台已为 HCC 机型内置 NCCL_IB_*、NCCL_SOCKET_IFNAME、GLOO_SOCKET_IFNAME 等变量,无需显式设置。
·确认 RDMA 生效:日志出现下列内容即表示 RDMA 通信已启用。
[0] NCCL INFO Channel 00/0 : 8[0] -> 0[0] [receive] via NET/IBext/0/GDRDMA
·自定义镜像:需自行确保镜像已安装用户态 RDMA 驱动;平台预置镜像默认支持常见 HCC 机型。
20、附录:开启 TACO 训练加速
平台提供 taco-train 训练加速库,以 wheel 包形式安装到训练容器中,通过环境变量零代码接入,无需改动 openpi 训练脚本或切换镜像。
建议先按这篇步骤一至步骤五跑通训练基线,再开启加速并对比效果。
前置条件:容器内 Python 为 3.12(该 wheel 为 cp312 构建,Requires-Python >=3.12),可用 python3 –version 确认。
21、1. 在入口脚本中安装并注入 prelude
在 run.sh 中、调用 train_pytorch.sh 之前加入以下片段。加速库安装到容器临时目录,任务结束随容器释放:
# ===== taco-train 加速接入 =====TACO_WHL="https://taco-train-data-1251001002.cos.ap-shanghai.myqcloud.com/taco-train/taco_train-0.1.0%2Bnv-cp312-cp312-linux_x86_64.whl"TACO_SP=/tmp/taco_train/site-packagesmkdir -p "$TACO_SP"pip install -q –target "$TACO_SP" "$TACO_WHL"export PYTHONPATH=$TACO_SP:$TACO_SP/taco_train/prelude:$PYTHONPATHexport TACO_TRAIN_FEATURES=openpi_skip_outer_checkpoint,openpi_compile,tf32export TACO_TRAIN_REPORT=1echo "[taco] prelude=$TACO_SP/taco_train/prelude"
prelude 目录中的 sitecustomize.py 会在 Python 解释器启动时自动加载,并按 TACO_TRAIN_* 环境变量激活加速特性。由于环境变量会被 torchrun 拉起的各个 rank 及 DataLoader 子进程继承,整条训练链路均可生效。
22、2. 加速特性配置
上一节的脚本片段已包含 openpi 的推荐配置,无需额外设置即可使用。本节说明可选特性与按模型的推荐配置,便于按需调整。
| 环境变量 | 说明 | 上节脚本中的取值 |
| PYTHONPATH | 加速库与 prelude 目录,须在脚本中设置并保留原值 | $TACO_SP:$TACO_SP/taco_train/prelude:$PYTHONPATH |
| TACO_TRAIN_FEATURES | 启用的优化特性,多个以逗号分隔 | openpi_skip_outer_checkpoint,openpi_compile,tf32 |
| TACO_TRAIN_REPORT | 训练结束时打印各特性状态 | 1 |
| TACO_TRAIN_LOGLEVEL | 日志级别,可选 debug/info/warning/error | 未设置(默认 warning) |
调整特性时,修改 run.sh 中 TACO_TRAIN_FEATURES 一行即可,可选值如下:
·openpi 专属:openpi_compile、openpi_sdpa、openpi_skip_outer_checkpoint
·通用:tf32、compile、cudnn_benchmark、dataloader、cuda_prefetch、thread_affinity、gc_tuning、memory、fused_adamw、split_k_batchnorm、ulimit
此外,将 TACO_TRAIN_FEATURES 设为 auto 可由加速库自动检测可用特性;设置 TACO_TRAIN_ALL=1 则开启全部特性(会覆盖 TACO_TRAIN_FEATURES),建议仅用于对比测试。
注意:说明:
注意:以上变量均在 run.sh 中 export,不要填入平台的环境变量配置项。
按模型的推荐配置
不同模型可启用的加速特性不同,按下表设置 TACO_TRAIN_FEATURES 即可,其余接入方式(prelude 路径、环境变量注入)完全一致。
| 模型 / 训练形态 | 推荐 TACO_TRAIN_FEATURES | 说明 |
| openpi(PyTorch 版本) | openpi_skip_outer_checkpoint,openpi_compile,tf32 | 这篇采用的配置,bw1000 与 HCCGC50S(pro5000)通用,已实测 |
| wan2.2 | wan_disable_addmm,wan_compile,wan_vae_chunk,wan_fused_padcat,wan_rope_f32,wan_rmsnorm | |
| 其他模型 | auto | 自动检测可开启的通用特性 |
注意:说明:
注意:auto 只开启检测为可用的特性,风险低;TACO_TRAIN_ALL=1 会强制开启全部特性(覆盖 TACO_TRAIN_FEATURES),建议仅用于对比测试。
23、3. 验证加速效果
·日志中出现 [taco] prelude=… 且随后无报错,说明加速库已安装、prelude 路径已注入。
·训练结束时 rank 0 会打印特性状态表(由 TACO_TRAIN_REPORT=1 开启),据此确认各特性是否真正生效:
┌─ taco-train — optimization summary│ tf32 applied ×1│ openpi_compile applied ×1│ openpi_skip_outer_checkpoint applied ×1│ … off└────────────────────────────────────────────
applied 表示已生效,off 表示未启用。若显示 n/a (openpi not installed),说明容器内无法导入 openpi,通常是 PYTHONPATH 被平台环境变量配置项覆盖,按上一节注意事项处理。
·加速失败不会中断训练:prelude 激活异常时解释器仍会正常启动,训练照常执行但无加速效果。因此不能以「任务是否成功」判断,必须结合状态表或吞吐数据确认。
·吞吐对比:保持 batch size 与基线一致(这篇为 –batch-size 256),对比开启前后日志中的单步耗时与 samples/s。如需上调 batch size,以不出现 OOM 为准。
24、4. 支持范围
| 模型 | HCCGC50S(pro5000) | bw1000 | 推荐配置(见上一节) |
| openpi PyTorch 版本(这篇) | 支持 | 支持 | openpi(PyTorch 版本) |
| wan2.2 | 支持 | 支持 | wan2.2 |
| fastwam | 支持 | 支持 | 其他模型 |
| 其他模型 | 以 auto 试跑为准 | 以 auto 试跑为准 | 其他模型 |