使用 OpenPI-0.5 加速镜像进行训练
更新时间:2026-09-01
概述
本文介绍如何在百舸训练环境中,使用 openpi-0.5 加速镜像快速启动 pi05_libero 训练任务。该镜像已预置训练依赖,并内置了部分 OpenPI 基础资源,适合用于快速验证 OpenPI 0.5 在 LIBERO 数据集上的训练流程与性能表现。
功能介绍
- 预置训练环境:镜像内依赖已配置完成,启动任务后可直接使用镜像内 Python 环境运行训练。
- 内置基础资源:镜像内已缓存 OpenPI 相关资源,默认位置为
/root/workspace/openpi/.cache_openpi。 - 支持 LIBERO 训练:默认示例面向
pi05_libero任务与physical-intelligence/libero数据集。 - 训练性能优化:原始测试中,优化后 BS256 配置 step time 为 1.290s,samples/s 为 198.4,相比 baseline 提升约 156%。
计费说明
本文仅说明训练启动方式。实际费用以百舸训练任务运行时消耗的算力、存储等资源为准,请结合所在项目的资源与计费规则确认。
说明
开始前请确认具备以下权限或资源访问能力:
- 百舸项目中有可用 GPU 训练资源。
- 本快速开始说明为在双机八卡情况下进行训练的案例,您可以根据您的实际情况变更启动命令。
物料准备
数据集与权重已内置于镜像内,您可以直接使用,也可以参考使用格式替换为您自己的数据。
| 类型 | 说明 |
|---|---|
| 数据集 | huggingface 地址:https://huggingface.co/datasets/physical-intelligence/libero bos 下载地址:bos:/aihc-rdw-bj/huggingface.co/datasets/physical-intelligence/libero/ |
| 权重 | huggingface 地址:https://huggingface.co/lerobot/pi05_base bos 下载地址:bos:/aihc-models-bj/lerobot/pi05_base |
| 镜像内置资源 | /root/workspace/openpi/.cache_openpi中:包含 gs://openpi-assets/checkpoints/pi05_base、gs://big_vision/paligemma_tokenizer.model、assets/pi05_libero/physical-intelligence/libero/norm_stats.json |
快速开始
1. 检查或生成归一化统计文件
镜像内已经对 pi05_libero 任务和 physical-intelligence/libero 数据集完成归一化,默认路径为:
Plain Text
1assets/pi05_libero/physical-intelligence/libero/norm_stats.json
如果需要重新生成,可执行:
Shell
1/root/workspace/openpi/.venv/bin/python3 scripts/compute_norm_stats.py --config-name pi05_libero
2. 启动训练
您可以按照实际情况修改以下参数:
Plain Text
1# 模型权重
2export CHECKPOINT_PATH=
3
4# 数据集
5export DATA_PATH=
通过以下代码启动训练:
Shell
1JAX_PLATFORMS=cpu \
2BATCH_SIZE=256 \
3GRAD_ACC=2 \
4NUM_TRAIN_STEPS=50 \ CHECKPOINT_PATH=/mnt/pfs/models/pi05_base \
5DATA_PATH=/mnt/pfs/datasets bash \
6bash /root/workspace/run_train.sh
镜像内预置的脚本 /root/workspace/run_train.sh 内容:
Shell
1#!/usr/bin/env bash
2set -o pipefail
3set -x
4
5WORKSPACE_DIR=${WORKSPACE_DIR:-"/root/workspace/openpi"}
6cd "$WORKSPACE_DIR"
7
8PY=${PY:-"$WORKSPACE_DIR/.venv/bin/python"}
9
10CHECKPOINT_PATH=${CHECKPOINT_PATH:-"/root/workspace/checkpoints/pi05_base"}
11DATA_PATH=${DATA_PATH:-"/root/workspace/datasets/libero"}
12ASSETS_BASE_DIR=${ASSETS_BASE_DIR:-"$WORKSPACE_DIR/assets"}
13OPENPI_DATA_HOME=${OPENPI_DATA_HOME:-"$WORKSPACE_DIR/.cache_openpi"}
14OUTPUT_DIR=${OUTPUT_DIR:-"/root/workspace/outputs"}
15TENSORBOARD_PATH=${TENSORBOARD_PATH:-"/root/workspace/tensorboard-log"}
16TORCHINDUCTOR_CACHE_DIR=${TORCHINDUCTOR_CACHE_DIR:-"$WORKSPACE_DIR/torchinductor_cache"}
17
18mkdir -p "$OUTPUT_DIR" "$TENSORBOARD_PATH"
19
20BATCH_SIZE=${BATCH_SIZE:-384}
21GRAD_ACC=${GRAD_ACC:-2}
22GRAD_ACCUM_MODE=${GRAD_ACCUM_MODE:-always_sync}
23NUM_TRAIN_STEPS=${NUM_TRAIN_STEPS:-12}
24EXP_NAME=${EXP_NAME:-openpi_pi05_libero_gbs${BATCH_SIZE}_acc${GRAD_ACC}}
25
26COMPILE_SCOPE=${COMPILE_SCOPE:-multi_group}
27GEMMA_MODE=${GEMMA_MODE:-max-autotune-no-cudagraphs}
28GEMMA_GC_EVERY=${GEMMA_GC_EVERY:-0}
29BUCKET_MB=${BUCKET_MB:-200}
30SAVE_INTERVAL=${SAVE_INTERVAL:-999999}
31
32export JAX_PLATFORMS=cpu
33export HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1
34export WANDB_MODE=offline WANDB_DISABLED=true
35export HF_LEROBOT_HOME="$DATA_PATH"
36export OPENPI_DATA_HOME
37export TORCHINDUCTOR_CACHE_DIR
38export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
39export TORCHINDUCTOR_MIX_ORDER_REDUCTION=0
40export OMP_NUM_THREADS=${OMP_NUM_THREADS:-8}
41export TORCH_DYNAMO_RECOMPILE_LIMIT=64
42export TORCHDYNAMO_CACHE_SIZE_LIMIT=256
43
44NNODES=${NNODES:-${WORLD_SIZE:-1}}
45NODE_RANK=${NODE_RANK:-${RANK:-0}}
46MASTER_ADDR=${MASTER_ADDR:-127.0.0.1}
47MASTER_PORT=${MASTER_PORT:-23456}
48NPROC=${NPROC:-${NPROC_PER_NODE:-8}}
49unset RANK WORLD_SIZE LOCAL_RANK
50$PY -m torch.distributed.run --nnodes=$NNODES --node_rank=$NODE_RANK --master_addr=$MASTER_ADDR --master_port=$MASTER_PORT --nproc_per_node=$NPROC \
51 scripts/train_pytorch.py pi05_libero \
52 --exp_name "$EXP_NAME" \
53 --ddp-grad-accum-mode "$GRAD_ACCUM_MODE" \
54 --batch_size "$BATCH_SIZE" --gradient_accumulation_steps "$GRAD_ACC" \
55 --num_train_steps "$NUM_TRAIN_STEPS" --log_interval 1 --save_interval "$SAVE_INTERVAL" --no-wandb_enabled \
56 --no-ddp-find-unused-parameters --ddp-bucket-cap-mb "$BUCKET_MB" \
57 --model.pytorch-compile-scope "$COMPILE_SCOPE" \
58 --model.pytorch-compile-gemma-mode "$GEMMA_MODE" \
59 --gemma-gc-every-n-layers "$GEMMA_GC_EVERY" \
60 --pytorch_weight_path "$CHECKPOINT_PATH" \
61 --assets_base_dir "$ASSETS_BASE_DIR" \
62 --checkpoint_base_dir "$OUTPUT_DIR" \
63 "$@"
性能参考
| 配置 | step time | samples/s | vs baseline |
|---|---|---|---|
| 默认 baseline | 3.300s | 77.6 | — |
| 优化后(BS256) | 1.290s | 198.4 | +156% |
| 优化后(BS384,grad_acc 2, max throughput) | 1.779s | 215.9 | +178% |
注意事项
- 不要默认使用
uv运行训练:镜像内依赖已配置完成,训练应优先使用镜像内.venv环境。 - 按实际资源调整并行度与 batch size:示例中
NPROC_PER_NODE=8、BATCH_SIZE=256,请根据百舸任务实际 GPU 数量与显存调整。
评价此篇文章
