{"componentChunkName":"component---src-templates-acg-portal-new-template-tsx","path":"/Dmvs45f6e","result":{"data":{"markdownRemark":{"html":"<h1 id=\"在百舸上使用-openpi-jax-加速镜像训练-pi05-模型\"><a href=\"#%E5%9C%A8%E7%99%BE%E8%88%B8%E4%B8%8A%E4%BD%BF%E7%94%A8-openpi-jax-%E5%8A%A0%E9%80%9F%E9%95%9C%E5%83%8F%E8%AE%AD%E7%BB%83-pi05-%E6%A8%A1%E5%9E%8B\" aria-label=\"在百舸上使用 openpi jax 加速镜像训练 pi05 模型 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>在百舸上使用 openpi (JAX) 加速镜像训练 pi0.5 模型</h1>\n<h2 id=\"一、概述\"><a href=\"#%E4%B8%80%E3%80%81%E6%A6%82%E8%BF%B0\" aria-label=\"一、概述 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>一、概述</h2>\n<p>本文介绍如何在百舸平台使用 openpi（JAX 版）pi0.5 训练加速镜像，完成 pi0.5 模型在 LIBERO 数据集上的监督微调（SFT）训练。该加速镜像在保持训练效果与收敛稳定性（等价性）的前提下，通过数据供给优化与计算侧优化，大幅缩短单轮迭代耗时、提升训练吞吐与 GPU 利用率，并已打通单机 8 卡与多机（2 节点）数据并行训练全链路。</p>\n<p>openpi 训练框架为 JAX 0.11 + flax nnx 的单控制器 SPMD 数据并行（非 PyTorch DDP / torchrun），由 <code>jax.jit</code> + <code>NamedSharding</code> 驱动多卡、XLA 自动插入集合通信，<strong>每节点启动 1 个训练进程</strong>。</p>\n<h2 id=\"二、适用场景\"><a href=\"#%E4%BA%8C%E3%80%81%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF\" aria-label=\"二、适用场景 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>二、适用场景</h2>\n<ul>\n<li>在 lgn7ib GPU 资源上训练 / 微调 pi0.5（π0.5）VLA 模型。</li>\n<li>基于 LIBERO 数据集进行 pi05_libero SFT 训练。</li>\n<li>需要单机 8 卡高吞吐训练，或多机 2 节点数据并行横向扩展。</li>\n<li>希望开箱即用、免环境搭建的 JAX 0.11 训练环境。</li>\n</ul>\n<h2 id=\"三、模型简介\"><a href=\"#%E4%B8%89%E3%80%81%E6%A8%A1%E5%9E%8B%E7%AE%80%E4%BB%8B\" aria-label=\"三、模型简介 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>三、模型简介</h2>\n<ul>\n<li><strong>pi0.5（π0.5）</strong> 是 Physical Intelligence 开源的 VLA（Vision-Language-Action）模型，openpi 为其官方实现（含 JAX / PyTorch 两条路径，本镜像为 <strong>JAX 路径</strong>）。</li>\n<li>结构：PaliGemma VLM（SigLIP 视觉塔 + Gemma LLM）+ action expert，以 flow-matching 生成动作 chunk；gemma 主干 18 层以 <code>nn.scan</code>（→ XLA while loop）堆叠。</li>\n<li>本任务 <code>pi05_libero</code>：在 LIBERO（40 个桌面操作任务）数据上做 SFT，动作 chunk 长度 <code>action_horizon=10</code>。</li>\n<li>官方仓库：<a href=\"https://github.com/Physical-Intelligence/openpi\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://github.com/Physical-Intelligence/openpi</a></li>\n</ul>\n<h2 id=\"四、环境与资源要求\"><a href=\"#%E5%9B%9B%E3%80%81%E7%8E%AF%E5%A2%83%E4%B8%8E%E8%B5%84%E6%BA%90%E8%A6%81%E6%B1%82\" aria-label=\"四、环境与资源要求 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>四、环境与资源要求</h2>\n<table>\n<thead>\n<tr>\n<th>项</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>GPU 资源</td>\n<td>lgn7ib，单卡约 96GB，推荐单机 8 卡；多机场景推荐 2 节点 × 8 卡</td>\n</tr>\n<tr>\n<td>代码目录</td>\n<td><code>/root/workspace/openpi</code></td>\n</tr>\n<tr>\n<td>运行时环境</td>\n<td>镜像自带 JAX 0.11 栈，开箱即用，无需挂载 venv / conda</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"五、准备工作\"><a href=\"#%E4%BA%94%E3%80%81%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C\" aria-label=\"五、准备工作 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>五、准备工作</h2>\n<p>本镜像的训练过程包含进入终端、配置环境变量、软链数据、按脚本启动训练、查看日志等交互式操作，建议在百舸开发机中执行：</p>\n<ol>\n<li>在百舸平台创建 / 进入开发机，选择 lgn7ib GPU 资源规格（推荐 8 卡）与上述训练镜像。</li>\n<li>打开开发机终端（或 WebIDE 终端），进入代码目录 <code>/root/workspace/openpi</code>。</li>\n<li>按后续章节顺序准备数据集、准备模型权重、配置训练环境变量、启动训练。</li>\n<li>在开发机中查看训练日志与产物。</li>\n</ol>\n<h2 id=\"六、准备数据集\"><a href=\"#%E5%85%AD%E3%80%81%E5%87%86%E5%A4%87%E6%95%B0%E6%8D%AE%E9%9B%86\" aria-label=\"六、准备数据集 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>六、准备数据集</h2>\n<p>LIBERO 数据集（lerobot 格式，<code>repo_id=physical-intelligence/libero</code>，1693 episode / 27.3 万帧）。</p>\n<p><strong>方式一：从 BOS 下载（推荐）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">mkdir</span> -p /root/workspace/datasets/libero\n<span class=\"line-number\">2</span>bosutil <span class=\"token function\">cp</span> -r bos://aihc-rdw-bj/huggingface.co/datasets/physical-intelligence/libero/ /root/workspace/datasets/libero/</code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>方式二：从 HuggingFace 下载</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_ENDPOINT</span><span class=\"token operator\">=</span>https://hf-mirror.com\n<span class=\"line-number\">2</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_HUB_ENABLE_HF_TRANSFER</span><span class=\"token operator\">=</span><span class=\"token number\">1</span>\n<span class=\"line-number\">3</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_HOME</span><span class=\"token operator\">=</span>/root/workspace/models/huggingface\n<span class=\"line-number\">4</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_HUB_CACHE</span><span class=\"token operator\">=</span><span class=\"token variable\">$HF_HOME</span>/hub\n<span class=\"line-number\">5</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">TRANSFORMERS_CACHE</span><span class=\"token operator\">=</span><span class=\"token variable\">$HF_HOME</span>/transformers\n<span class=\"line-number\">6</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_DATASETS_CACHE</span><span class=\"token operator\">=</span><span class=\"token variable\">$HF_HOME</span>/datasets\n<span class=\"line-number\">7</span>\n<span class=\"line-number\">8</span>huggingface-cli download physical-intelligence/libero --repo-type dataset --local-dir /root/workspace/datasets/libero</code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"七、准备模型权重\"><a href=\"#%E4%B8%83%E3%80%81%E5%87%86%E5%A4%87%E6%A8%A1%E5%9E%8B%E6%9D%83%E9%87%8D\" aria-label=\"七、准备模型权重 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>七、准备模型权重</h2>\n<p>pi05_base 基座权重（JAX / Orbax 格式）。</p>\n<p><strong>方式一：从 BOS 下载（推荐）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">mkdir</span> -p /root/workspace/models/pi05_base/params\n<span class=\"line-number\">2</span>bosutil <span class=\"token function\">cp</span> -r bos:/aihc-models-bj/gs/openpi-assets/pi05_base/params/ /root/workspace/models/pi05_base/params/</code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>方式二：从 Google Cloud Storage 下载（需联网）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token comment\"># GCS Orbax 源：gs://openpi-assets/checkpoints/pi05_base/params</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"八、配置训练环境变量\"><a href=\"#%E5%85%AB%E3%80%81%E9%85%8D%E7%BD%AE%E8%AE%AD%E7%BB%83%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F\" aria-label=\"八、配置训练环境变量 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>八、配置训练环境变量</h2>\n<p>数据与权重不入镜像，运行时通过标准环境变量指定。各集群挂载点不同，用你的实际路径覆盖对应变量即可：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">DATA_PATH</span><span class=\"token operator\">=</span><span class=\"token string\">\"<span class=\"token variable\">${DATA_PATH<span class=\"token operator\">:-</span><span class=\"token operator\">/</span>root<span class=\"token operator\">/</span>workspace<span class=\"token operator\">/</span>datasets<span class=\"token operator\">/</span>libero}</span>\"</span>\n<span class=\"line-number\">2</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">BASE_CHECKPOINT_PATH</span><span class=\"token operator\">=</span><span class=\"token string\">\"<span class=\"token variable\">${BASE_CHECKPOINT_PATH<span class=\"token operator\">:-</span><span class=\"token operator\">/</span>root<span class=\"token operator\">/</span>workspace<span class=\"token operator\">/</span>models<span class=\"token operator\">/</span>pi05_base<span class=\"token operator\">/</span>params}</span>\"</span>\n<span class=\"line-number\">3</span>\n<span class=\"line-number\">4</span><span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span> -z <span class=\"token string\">\"<span class=\"token variable\">${HF_HOME<span class=\"token operator\">:-</span>}</span>\"</span> <span class=\"token operator\">||</span> <span class=\"token string\">\"<span class=\"token variable\">${HF_HOME}</span>\"</span> <span class=\"token operator\">==</span> /app/* <span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token keyword\">then</span>\n<span class=\"line-number\">5</span>    <span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_HOME</span><span class=\"token operator\">=</span>/root/workspace/openpi/.cache/hf\n<span class=\"line-number\">6</span><span class=\"token keyword\">fi</span>\n<span class=\"line-number\">7</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_LEROBOT_HOME</span><span class=\"token operator\">=</span><span class=\"token string\">\"<span class=\"token variable\">${HF_LEROBOT_HOME<span class=\"token operator\">:-</span>${HF_HOME}</span>/lerobot}\"</span>\n<span class=\"line-number\">8</span><span class=\"token function\">mkdir</span> -p <span class=\"token string\">\"<span class=\"token variable\">$HF_LEROBOT_HOME</span>/physical-intelligence\"</span>\n<span class=\"line-number\">9</span>\n<span class=\"line-number\">10</span><span class=\"token function\">ln</span> -sfn <span class=\"token string\">\"<span class=\"token variable\">$DATA_PATH</span>\"</span> <span class=\"token string\">\"<span class=\"token variable\">$HF_LEROBOT_HOME</span>/physical-intelligence/libero\"</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>数据目录按 lerobot 格式组织：<code>physical-intelligence/libero/{data,meta,videos}</code>。norm stats 已随镜像提供于 <code>assets/</code>；若更换数据集需重算：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span>python scripts/compute_norm_stats.py --config-name pi05_libero --num-workers <span class=\"token number\">48</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>启动训练前，请确认 GPU 空闲、数据 / 权重已就位、磁盘可用空间充足，并为本次实验使用独立输出目录，避免覆盖历史实验。</p>\n<h2 id=\"九、启动训练\"><a href=\"#%E4%B9%9D%E3%80%81%E5%90%AF%E5%8A%A8%E8%AE%AD%E7%BB%83\" aria-label=\"九、启动训练 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>九、启动训练</h2>\n<h3 id=\"91-关键参数说明\"><a href=\"#91-%E5%85%B3%E9%94%AE%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E\" aria-label=\"91 关键参数说明 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9.1 关键参数说明</h3>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>值</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>--batch-size</code></td>\n<td>256（默认）</td>\n<td><strong>全局</strong> batch（跨 8 卡）</td>\n</tr>\n<tr>\n<td><code>--num-workers</code></td>\n<td>8（优化）/ 2（默认）</td>\n<td>DataLoader worker 数，本负载主瓶颈</td>\n</tr>\n<tr>\n<td><code>--fsdp-devices</code></td>\n<td>1（默认，纯 DP）</td>\n<td>>1 走 ZeRO-3 分片，省显存慢 6–8%；追吞吐峰值 / 多机弱扩展时使用</td>\n</tr>\n<tr>\n<td><code>--model.max-token-len</code></td>\n<td>28（优化）/ 200（默认）</td>\n<td>libero 实测 max=21，降到 28 可省 FFN 计算</td>\n</tr>\n<tr>\n<td><code>--weight-loader.params-path</code></td>\n<td><code>${BASE_CHECKPOINT_PATH}</code></td>\n<td>base 权重路径</td>\n</tr>\n<tr>\n<td><code>--num-train-steps</code></td>\n<td>30000</td>\n<td>总步数</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"92-优化开关\"><a href=\"#92-%E4%BC%98%E5%8C%96%E5%BC%80%E5%85%B3\" aria-label=\"92 优化开关 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9.2 优化开关</h3>\n<p>以下开关默认关闭（等于上游行为），<code>run_opt.sh</code> 已默认开启全部优化：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">OPENPI_SKIP_VIDEO_DECODE</span><span class=\"token operator\">=</span><span class=\"token number\">1</span>              <span class=\"token comment\"># 跳过未消费的视频解码（占 71% 数据成本）</span>\n<span class=\"line-number\">2</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">OPENPI_SKIP_IMAGES</span><span class=\"token operator\">=</span>right_wrist_0_rgb    <span class=\"token comment\"># 跳过恒 masked 的右腕图 token</span>\n<span class=\"line-number\">3</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">OPENPI_FLASH_ATTN</span><span class=\"token operator\">=</span><span class=\"token number\">1</span> <span class=\"token assign-left variable\">OPENPI_FLASH_IMPL</span><span class=\"token operator\">=</span>xla   <span class=\"token comment\"># flash attention（XLA 实现）</span>\n<span class=\"line-number\">4</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">OPENPI_WORKER_CPU</span><span class=\"token operator\">=</span><span class=\"token number\">1</span>                      <span class=\"token comment\"># 数据 worker 赶到 CPU，不抢 GPU</span>\n<span class=\"line-number\">5</span><span class=\"token comment\"># CLI：--num-workers 8 --model.max-token-len 28</span>\n<span class=\"line-number\">6</span><span class=\"token comment\"># config-B XLA flag（大 batch 下 +2.9%；OPENPI_STRICT_EQUIV=1 可关这组 flag）：</span>\n<span class=\"line-number\">7</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">JAX_OPTIMIZATION_LEVEL</span><span class=\"token operator\">=</span>O1\n<span class=\"line-number\">8</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">XLA_FLAGS</span><span class=\"token operator\">=</span><span class=\"token string\">\"--xla_gpu_triton_gemm_any=false --xla_gpu_enable_latency_hiding_scheduler=true --xla_gpu_enable_pipelined_all_gather=true\"</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"93-启动脚本\"><a href=\"#93-%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC\" aria-label=\"93 启动脚本 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9.3 启动脚本</h3>\n<p>容器默认工作目录 <code>/root/workspace/openpi</code>，三个脚本均在此目录：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token comment\"># 基线（上游默认：nw2 / tok200 / 无优化）</span>\n<span class=\"line-number\">2</span><span class=\"token function\">bash</span> /root/workspace/openpi/run_baseline.sh\n<span class=\"line-number\">3</span><span class=\"token comment\"># 优化（全优化）</span>\n<span class=\"line-number\">4</span><span class=\"token function\">bash</span> /root/workspace/openpi/run_opt.sh\n<span class=\"line-number\">5</span><span class=\"token comment\"># 追吞吐峰值（大 batch，需 fsdp 分片腾显存）</span>\n<span class=\"line-number\">6</span><span class=\"token function\">bash</span> /root/workspace/openpi/run_opt.sh --fsdp-devices <span class=\"token number\">8</span> --batch-size <span class=\"token number\">2048</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>脚本支持 <code>EXP_NAME=xxx</code>、<code>RESUME=1</code>、<code>SAVE_INTERVAL=n</code> 等环境变量，以及任意 <code>train.py</code> 参数透传。</p>\n<h3 id=\"94-断点续训\"><a href=\"#94-%E6%96%AD%E7%82%B9%E7%BB%AD%E8%AE%AD\" aria-label=\"94 断点续训 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9.4 断点续训</h3>\n<ul>\n<li>设置 <code>RESUME=1</code> 时脚本走 <code>--resume</code>，由 Orbax CheckpointManager 从 <code>&#x3C;checkpoint-base-dir>/pi05_libero/&#x3C;EXP_NAME></code> 恢复完整 <code>train_state</code>；未设置时走 <code>--overwrite</code>。<code>--resume</code> 与 <code>--overwrite</code> 互斥。</li>\n<li>checkpoint 路径模板：<code>&#x3C;checkpoint-base-dir>/pi05_libero/&#x3C;EXP_NAME>/&#x3C;loop_index></code>；单个 checkpoint（params + optimizer + EMA）约 <strong>42GB</strong>，<code>max_to_keep=1</code> 会清理同一实验中较旧的 checkpoint。</li>\n<li>存盘语义：<code>SAVE_INTERVAL=n</code> 表示每 n 步存一次；训练最后一步必定会存一次 checkpoint。checkpoint 根目录用 <code>--checkpoint-base-dir &#x3C;共享存储路径></code> 指定，<strong>必须落共享文件系统</strong>。</li>\n</ul>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token comment\"># 首次训练（存 ckpt）</span>\n<span class=\"line-number\">2</span><span class=\"token assign-left variable\">EXP_NAME</span><span class=\"token operator\">=</span>myrun <span class=\"token assign-left variable\">SAVE_INTERVAL</span><span class=\"token operator\">=</span><span class=\"token number\">1000</span> <span class=\"token function\">bash</span> /root/workspace/openpi/run_opt.sh --num-train-steps <span class=\"token number\">30000</span>\n<span class=\"line-number\">3</span><span class=\"token comment\"># 中断后续训（同名 EXP_NAME + RESUME=1）</span>\n<span class=\"line-number\">4</span><span class=\"token assign-left variable\">EXP_NAME</span><span class=\"token operator\">=</span>myrun <span class=\"token assign-left variable\">RESUME</span><span class=\"token operator\">=</span><span class=\"token number\">1</span> <span class=\"token function\">bash</span> /root/workspace/openpi/run_opt.sh --num-train-steps <span class=\"token number\">30000</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"十、多机训练（2-节点数据并行）\"><a href=\"#%E5%8D%81%E3%80%81%E5%A4%9A%E6%9C%BA%E8%AE%AD%E7%BB%83%EF%BC%882-%E8%8A%82%E7%82%B9%E6%95%B0%E6%8D%AE%E5%B9%B6%E8%A1%8C%EF%BC%89\" aria-label=\"十、多机训练（2 节点数据并行） permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>十、多机训练（2 节点数据并行）</h2>\n<p>openpi JAX 为 SPMD 单控制器，<strong>每节点启动 1 个进程</strong>执行 <code>python scripts/train.py</code>，该进程经 <code>jax.jit</code> + <code>NamedSharding</code> 驱动本节点全部 8 卡（不是每卡 1 进程）。各节点运行同一条命令，平台注入以下变量：</p>\n<table>\n<thead>\n<tr>\n<th>平台 env</th>\n<th>含义</th>\n<th>JAX 映射</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>MASTER_ADDR</code> / <code>MASTER_PORT</code></td>\n<td>coordinator(rank0) 地址:端口</td>\n<td><code>coordinator_address</code></td>\n</tr>\n<tr>\n<td><code>RANK</code></td>\n<td>节点 index（0=coordinator）</td>\n<td><code>process_id</code></td>\n</tr>\n<tr>\n<td><code>WORLD_SIZE</code></td>\n<td><strong>节点数</strong>（非卡数）</td>\n<td><code>num_processes</code></td>\n</tr>\n<tr>\n<td><code>NPROC_PER_NODE</code></td>\n<td>每节点卡数</td>\n<td>仅信息用，JAX 自动探测本地卡</td>\n</tr>\n</tbody>\n</table>\n<p>启动脚本 <code>run_multinode.sh</code> 已封装上述变量读取、NCCL / IB 环境与优化配方。</p>\n<p><strong>容器 RDMA / RoCE 要求（关键）</strong>：多机需容器能做 RDMA 内存注册，创建容器时必须具备以下能力：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span>--network <span class=\"token function\">host</span> --ipc <span class=\"token function\">host</span> --gpus all <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>--device /dev/infiniband --cap-add<span class=\"token operator\">=</span>IPC_LOCK --ulimit <span class=\"token assign-left variable\">memlock</span><span class=\"token operator\">=</span>-1 --ulimit <span class=\"token assign-left variable\">stack</span><span class=\"token operator\">=</span><span class=\"token number\">67108864</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<ul>\n<li>缺 <code>IPC_LOCK</code> / <code>memlock=-1</code> 会报 <code>ibv_reg_mr_iova2 failed: Cannot allocate memory</code> 或 <code>NET/IB: No device found</code>。</li>\n<li>若网卡为 RoCE（link_layer=Ethernet），需按需设置 <code>NCCL_IB_GID_INDEX=3</code>。</li>\n<li>集合通信依赖 IB / RoCE，<code>NCCL_IB_DISABLE=1</code> 强制走 socket 会导致 rendezvous 超时。</li>\n</ul>\n<h2 id=\"十一、性能参考\"><a href=\"#%E5%8D%81%E4%B8%80%E3%80%81%E6%80%A7%E8%83%BD%E5%8F%82%E8%80%83\" aria-label=\"十一、性能参考 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>十一、性能参考</h2>\n<blockquote>\n<p>以下数据为特定测试环境下的参考值。实际性能会受到资源规格、数据读取方式、网络环境、任务参数等因素影响。</p>\n</blockquote>\n<p><strong>单机 8 卡加速比</strong>（bs256 全局 batch，fsdp1）：</p>\n<table>\n<thead>\n<tr>\n<th>配置</th>\n<th>step time (s)</th>\n<th>samples/s</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseline</td>\n<td>20.10</td>\n<td>12.73</td>\n</tr>\n<tr>\n<td>优化</td>\n<td><strong>1.57</strong></td>\n<td><strong>163.01</strong></td>\n</tr>\n<tr>\n<td>加速比</td>\n<td><strong>12.8×</strong></td>\n<td><strong>12.8×</strong></td>\n</tr>\n</tbody>\n</table>\n<blockquote>\n<p>baseline 吞吐偏低的根因是上游默认 <code>num_workers=2</code> 导致数据供给严重不足（GPU 几乎空等）；优化后转为 compute-bound。优化收益主力来自数据供给（worker 数提升 + worker CPU 隔离 + 跳过无用视频解码），计算侧优化（跳过 masked 图 token / flash-xla / 降低 max-token-len）为锦上添花。</p>\n</blockquote>\n<p><strong>单机吞吐峰值</strong>：</p>\n<table>\n<thead>\n<tr>\n<th>配置</th>\n<th>samples/s</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>优化 fsdp1 bs256（默认）</td>\n<td>163.01</td>\n</tr>\n<tr>\n<td>优化 fsdp8 bs2048（追峰值）</td>\n<td><strong>228.88</strong></td>\n</tr>\n</tbody>\n</table>\n<p><strong>双机 2×8 弱扩展</strong>：</p>\n<table>\n<thead>\n<tr>\n<th>配置</th>\n<th>samples/s</th>\n<th>扩展比</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>单机 fsdp8 bs2048</td>\n<td>228.88</td>\n<td>1×（基准）</td>\n</tr>\n<tr>\n<td>双机 fsdp16 bs4096</td>\n<td><strong>443.41</strong></td>\n<td><strong>1.94× / 96.9%</strong></td>\n</tr>\n</tbody>\n</table>\n<p><strong>等价性说明</strong>：优化版的 <code>--model.max-token-len 28</code> 与 <code>OPENPI_SKIP_IMAGES=right_wrist_0_rgb</code> 改变了输入张量形状，带来约 1e-4 的浮点漂移；两者数学上只影响被 mask 的无效 token，收敛终态一致，step0 两者仅差约 1e-4。数据顺序由 <code>seed=42</code> 固定、可复现。因此优化前后 loss 收敛曲线一致，训练结果等价。</p>\n<h2 id=\"十二、常见问题\"><a href=\"#%E5%8D%81%E4%BA%8C%E3%80%81%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98\" aria-label=\"十二、常见问题 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>十二、常见问题</h2>\n<p><strong>Q1：多机训练 checkpoint 存盘卡在 <code>Waiting for Save Finalize</code>？</strong></p>\n<p>checkpoint 目录必须落在所有节点同一路径可见的共享文件系统上。orbax 多进程 finalize 需跨进程协调 rename，若各节点写各自本地盘，finalize 屏障永不达成。请通过 <code>--checkpoint-base-dir &#x3C;共享存储路径></code> 指定共享存储目录。</p>\n<p><strong>Q2：多机启动报 <code>ibv_reg_mr_iova2 failed</code> 或 <code>NET/IB: No device found</code>？</strong></p>\n<p>容器缺少 RDMA 内存注册能力，请按「十、多机训练」中的要求加上 <code>--device /dev/infiniband --cap-add=IPC_LOCK --ulimit memlock=-1</code>。</p>\n<p><strong>Q3：显存不足（OOM）？</strong></p>\n<p>优先使用 <code>--fsdp-devices >1</code> 走 ZeRO-3 分片省显存（会慢 6–8%），或适当降低 <code>--batch-size</code>。</p>\n<p><strong>Q4：离线环境下 lerobot 访问 HuggingFace Hub 报 <code>Network unreachable</code>？</strong></p>\n<p>设置离线开关并确保数据软链已建立：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">HF_HUB_OFFLINE</span><span class=\"token operator\">=</span><span class=\"token number\">1</span>\n<span class=\"line-number\">2</span><span class=\"token builtin class-name\">export</span> <span class=\"token assign-left variable\">TRANSFORMERS_OFFLINE</span><span class=\"token operator\">=</span><span class=\"token number\">1</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"十三、后续操作\"><a href=\"#%E5%8D%81%E4%B8%89%E3%80%81%E5%90%8E%E7%BB%AD%E6%93%8D%E4%BD%9C\" aria-label=\"十三、后续操作 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>十三、后续操作</h2>\n<ul>\n<li>训练完成后，checkpoint 落于 <code>--checkpoint-base-dir</code> 指定的共享存储目录，可用于后续评测或继续训练。</li>\n<li>如需长训，建议配置合理的 <code>SAVE_INTERVAL</code> 并使用独立的 <code>EXP_NAME</code>，便于断点续训与版本管理。</li>\n<li>更换数据集时，请重新计算 norm stats（见第八章）。  </li>\n</ul>","fields":{"slug":"Dmvs45f6e","title":"在百舸上使用 openpi (JAX) 加速镜像训练 pi0.5 模型","date":"2026-10-28","extractedHeadings":[]},"headings":[{"value":"在百舸上使用 openpi (JAX) 加速镜像训练 pi0.5 模型","depth":1},{"value":"一、概述","depth":2},{"value":"二、适用场景","depth":2},{"value":"三、模型简介","depth":2},{"value":"四、环境与资源要求","depth":2},{"value":"五、准备工作","depth":2},{"value":"六、准备数据集","depth":2},{"value":"七、准备模型权重","depth":2},{"value":"八、配置训练环境变量","depth":2},{"value":"九、启动训练","depth":2},{"value":"9.1 关键参数说明","depth":3},{"value":"9.2 优化开关","depth":3},{"value":"9.3 启动脚本","depth":3},{"value":"9.4 断点续训","depth":3},{"value":"十、多机训练（2 节点数据并行）","depth":2},{"value":"十一、性能参考","depth":2},{"value":"十二、常见问题","depth":2},{"value":"十三、后续操作","depth":2}]}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"Dmvs45f6e","prev":{"id":"umvs23d15","name":"在百舸上使用lingbot-va加速镜像训练视觉-动作模型","path":"umvs23d15","filePath":"操作指南/快速开始/在百舸上使用lingbot-va加速镜像训练视觉-动作模型.md","seo":null,"parentIds":["ilib2qygp","3ma0icym2"],"parents":[{"id":"ilib2qygp","documentId":"bfa43a8b-968a-41a1-8c9d-906507eeaed9","name":"操作指南","repoName":"AIHC","filePath":"操作指南","disabled":false,"path":"ilib2qygp","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null,"solutionTag":null,"solutionColor":null},{"id":"3ma0icym2","documentId":"b5f72002-c562-4200-893d-0fdfd1ed1fe8","name":"快速开始","repoName":"AIHC","filePath":"操作指南/快速开始","disabled":false,"path":"3ma0icym2","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null,"solutionTag":null,"solutionColor":null}]},"next":{"id":"am794vnny","name":"全托管资源池","path":"am794vnny","filePath":"操作指南/全托管资源池/创建全托管资源池.md","seo":null,"parentIds":["ilib2qygp","Em794shv9"],"parents":[{"id":"ilib2qygp","documentId":"bfa43a8b-968a-41a1-8c9d-906507eeaed9","name":"操作指南","repoName":"AIHC","filePath":"操作指南","disabled":false,"path":"ilib2qygp","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null,"solutionTag":null,"solutionColor":null},{"id":"Em794shv9","documentId":"e6838c09-7abc-425b-bc8c-4800ee075222","name":"全托管资源池","repoName":"AIHC","filePath":"操作指南/全托管资源池","disabled":false,"path":"Em794shv9","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null,"solutionTag":null,"solutionColor":null}]},"parents":[{"id":"ilib2qygp","documentId":"bfa43a8b-968a-41a1-8c9d-906507eeaed9","name":"操作指南","repoName":"AIHC","filePath":"操作指南","disabled":false,"path":"ilib2qygp","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null,"solutionTag":null,"solutionColor":null},{"id":"3ma0icym2","documentId":"b5f72002-c562-4200-893d-0fdfd1ed1fe8","name":"快速开始","repoName":"AIHC","filePath":"操作指南/快速开始","disabled":false,"path":"3ma0icym2","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null,"solutionTag":null,"solutionColor":null}],"specificSeo":null}}}