关于 physicalai-train-adding-a-policy
用于指导在 PhysicalAI 中新增策略系列的开发技能,涵盖实现、注册、测试和文档更新。
主要功能
- 01三文件策略结构
- 02训练与推理接口
- 03策略 API 和 CLI 注册
- 04配置与形状验证
- 05测试和文档检查清单
适用场景
- 01实现新的 PhysicalAI 策略系列
- 02检查动作与观测张量形状
- 03通过 CLI 提供策略
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ open-edge-platform/ physical-ai-studio --skill physicalai-train-adding-a-policy安装后在 Claude Code 中输入/physicalai-train-adding-a-policy确认已加载。
附带文件references/base-classes.md
详细介绍
添加 Studio Policy
Policy 存放在 library/src/physicalai/policies/<name>/ 中。每个系列都是一个面向 Lightning 的 Policy,封装一个 torch.nn.Module Model,并拆分为三个文件。基类位于 policies/base/(policy.py 中的 Policy、model.py 中的 Model);共享的 Config / FromConfig 类型来自 Runtime(physicalai.config)——请参阅 Runtime 文档 use-from-config 和 configuration。
工作流
-
先阅读相邻系列。 研究
policies/pi05/(当前参考实现):config.py(Pi05Config(Config))、model.py(Pi05Model(Model))、policy.py(Pi05(ExportablePolicyMixin, Policy))、preprocessor.py,以及架构所需的其他模块(例如pi_gemma.py)。对于有意保持精简的系列,policies/act/是一个更小的三文件布局,不包含 VLM 栈。- 完成标准:能够说出每个新文件对应仿照哪个现有文件。
-
在
policies/<name>/中创建三个文件:config.py—<Name>Config(Config),所有超参数均为带类型的字段。model.py—<Name>Model(Model),仅包含纯torch.nn.Module逻辑。policy.py—<Name>(Policy)(仅在实现导出时添加ExportablePolicyMixin)。- 完成标准:
from physicalai.policies.<name> import <Name>, <Name>Config, <Name>Model可以正常导入。
-
实现训练和推理共用的策略接口,通过基类
Policy提供:forward(...)— 训练路径;返回值须与training_step兼容。predict_action_chunk(...)— 推理路径;返回具有已配置动作时域的张量。select_action(...)— 除非有充分理由采用专用流程,否则使用基类的动作队列行为。- 完成标准:合成批次的形状符合以下检查。
-
注册该系列,以便 API 和 CLI 用户都能找到它:
- 在
policies/__init__.py中添加导出(__all__和导入,例如<Name>、<Name>Config、<Name>Model)。 - 在
policies/__init__.py的get_physicalai_policy_class(...)/get_policy(...)分发逻辑中添加小写名称。 - 完成标准:
from physicalai.policies import <Name>, get_policy可正常使用,get_policy("<name>")返回一个实例,且--model physicalai.policies.<Name>可以解析。
- 在
-
添加 CLI 配置前,先验证直接 API 构造:
from physicalai.policies import get_policy policy = get_policy("<name>")- 完成标准:直接构造、配置往返,以及合成
forward(...)/predict_action_chunk(...)形状检查均通过。
- 完成标准:直接构造、配置往返,以及合成
-
当该策略面向 CLI 用户时,在
library/configs/physicalai/<name>.yaml中添加训练配置。 配置model.class_path、data.class_path(通常为physicalai.data.lerobot.LeRobotDataModule)以及trainer.*。参照configs/physicalai/pi05.yaml。- 完成标准:
physicalai fit --config configs/physicalai/<name>.yaml --trainer.fast_dev_run=true可完成一个步骤。
- 完成标准:
-
仅在准备就绪时接入导出。 添加
ExportablePolicyMixin和有效的样例输入,然后遵循physicalai-train-exporting-and-validating技能。如果有意不支持导出,请在策略文档字符串中明确说明。 -
添加测试,放在
library/tests/unit/policies/下现有策略测试旁边:至少包含一个构造/配置路径测试,以及一个形状验证测试。- 完成标准:
uv run pytest tests/unit/policies -k <name>通过。
- 完成标准:
-
更新文档(如果该策略面向用户):更新
library/docs/explanation/policy/以及相关配置/API 示例。
必须通过的检查
逐项检查以下内容(不能只看一眼觉得“没问题”):
- Action 形状语义 — batch、时域/分块长度和 action 维度正确,且与该系列的惯例保持一致。
- Observation 特征 — 特征名称与数据集/配置约定一致(
data/observation.py:Feature、FeatureType)。 - API 构建路径 — 导入、
get_policy(...)、直接使用构造函数,以及合成形状检查均能通过,且不涉及 CLI。 - 配置路径 — 当策略可通过 CLI 使用时,能通过
physicalai fit使用的 jsonargparse CLI 路径(class_path/init_args)完成构建。 - 重量级依赖 — 在
library/pyproject.toml中将大型系列置于可选 extra 后,并采用延迟导入,与pi05/pi0/groot/smolvla的方式一致。 - 不允许静默更改契约 — 未经协调导出/Runtime,不得更改 action 维度、特征名称或预处理方式。
验证
在 library/ 中运行:
uv run pytest tests/unit/policies -k <name>
physicalai fit --config configs/physicalai/<name>.yaml --trainer.fast_dev_run=true
prek run --all-files library/
参考资料
references/base-classes.md—Policy/Model契约及文件拆分要求。