关于 jax-training-recipe
jax-training-recipe 是用于规划 JAX 训练实验的实用技能,面向研究人员和工程师。它强调显式状态与随机数管理、纯训练步骤,以及从单设备调试逐步扩展训练的流程。
主要功能
- 01实验与设备规划
- 02PRNG key 策略
- 03显式模型与状态设计
- 04纯训练步骤流程
- 05逐步加入变换与扩展检查
适用场景
- 01规划 JAX 训练实验
- 02排查 PRNG 或 tracer 错误
- 03逐步加入 jit、vmap 或 pmap
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jurgendn/ agent-skills --skill jax-training-recipe安装后在 Claude Code 中输入/jax-training-recipe确认已加载。
附带文件references/training-recipe-details.md
详细介绍
JAX 训练方案
JAX 并不是换了语法的 PyTorch。函数是纯函数,状态是显式的,而且只有在函数边界清晰时,变换(jit、vmap、grad、pmap)才能组合使用。
如需查看具体配置和检查清单,请阅读 references/training-recipe-details.md。
信息收集
请说明:
- 任务、数据集、损失函数和指标;
- 目标设备:CPU、单 GPU、多 GPU、TPU;
- 模型框架:Flax/Linen、Equinox 或原始 JAX;
- 随机性需求:dropout、采样、数据增强;
- 状态需求:batch norm、优化器状态、EMA、检查点。
工作流程
- 定义实验和最小数据批次。
- 规划 PRNG key 的归属与拆分方式。
- 定义模型和状态的边界。
- 初始化模型和优化器。
- 编写纯函数
train_step。 - 仅在未启用
jit的步骤运行正常后,再添加jit。 - 仅在单设备行为正确后,再添加
vmap/pmap。 - 添加检查点和恢复测试。
- 执行首次运行安全检查。
- 按从小批次到完整训练的顺序分阶段扩展。
JAX 专属规则
- 绝不重复使用 PRNG key。
- 保持状态显式;不要在闭包中隐藏可变状态。
- 避免在
jit中执行 Python 副作用。 - 将
jit下的形状变化视为设计决策。 - 先在不启用
jit的情况下调试,然后逐一重新启用变换。 - 在多设备训练中,有意复制状态。
常见故障模式
- 重复使用 PRNG key,导致 dropout/采样结果重复。
- Python 控制流或副作用导致 tracer 错误。
- batch norm/dropout 状态未与参数分离。
vmap或pmap下出现形状不匹配。- 编译循环掩盖 NaN。
- 检查点缺少优化器状态或 batch 统计状态。
输出
请返回:
- 实验摘要;
- PRNG 策略;
- 模型/状态设计;
- 训练/评估步骤计划;
- 最小配置;
- 首次运行检查;
- JAX 专属故障模式;
- 扩展计划。
评论
支持 Markdown