关于 jax-development
面向 JAX 工程开发的技能,适用于修改转换、内核和性能的工程师。它强调明确数学约束、构建最小可复现测试,并在目标项目环境中进行测量。
主要功能
- 01检查 JAX 环境与项目
- 02构建最小故障复现用例
- 03验证数值与梯度正确性
- 04探查编译和重新编译
- 05使用受控输入进行基准测试
- 06检查分片与多主机行为
适用场景
- 01诊断转换或内核回归问题
- 02验证数值及梯度不变量
- 03测量编译和执行性能
- 04评估分片与集体通信行为
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tristanmanchester/ agent-skills --skill jax-development安装后在 Claude Code 中输入/jax-development确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/benchmark_template.pycheckify_template.pycustom_vjp_template.pyexport_template.pyissue_report_template.mdmre_template.pypallas_kernel_skeleton.pyprofile_template.pyscan_template.pyshard_map_template.pysharding_template.pytraining_step_template.pyevals/evals.jsontrigger_queries_train.jsontrigger_queries_validation.jsonevals/files/bad_control_flow.pyclosure_recompile.pydynamic_mask.pyhost_roundtrip.pylegacy_pmap.pynaive_benchmark.pyprng_reuse.pypython_loop_blowup.pyreferences/ADVANCED-EXTENSIONS.mdCODE-REVIEW-RUBRIC.mdDEBUGGING-TRIAGE.mdEXPERT-WORKFLOW.mdMENTAL-MODEL.mdPERFORMANCE-PLAYBOOK.mdPORTING-PATTERNS.md详细介绍
JAX 开发
在更改变换或内核之前,先明确数学契约。 记录形状、数据类型、数值容差、随机性、可微性和所需后端。 保留现有架构中有用的部分;仅凭新增 API 并不足以成为重写的理由。使用当前的公共接口,而不是兼容性垫片。
检查、复现、测量
将 SKILL_DIR 解析为包含此文件的目录。随附脚本位于该目录中,而非目标项目的 scripts/ 目录中。在项目实际使用的 Python 环境中运行这些脚本。使用前先查看每个脚本的帮助信息。
python "$SKILL_DIR/scripts/jax_env_report.py" --format json
python "$SKILL_DIR/scripts/jax_project_scan.py" /absolute/project --format json
python "$SKILL_DIR/scripts/jax_compile_probe.py" --help
python "$SKILL_DIR/scripts/jax_recompile_explorer.py" --help
环境探测会初始化后端并可能分配资源。报告会列出相关环境变量的名称,但不会列出其值;若导入、后端或冒烟测试失败,则返回非零状态。它不是全面的机密扫描器:分享前请检查路径、设备和项目私有输出。静态扫描只能提供线索,不能证明某个变换有误。导入、追踪、降级和基准测试模块时都会执行代码;请使用可信输入。
将故障缩减为最小复现,同时保留相关形状、数据类型、静态参数、变换顺序和后端。与简单参考实现进行比较,并在测量速度前检查数值和梯度不变量。一次只更改一个假设,并记录观察结果。
选择相关参考资料
- 追踪、形状、PyTree:心智模型、 变换决策矩阵和 移植模式。
- 正确性:调试和 审查标准。
- 计时、编译、内存:性能。
- 放置、集合通信、多主机:分片。
- 自定义导数、导出、Pallas、FFI:扩展。
- 源码级诊断:仓库地图、 工作流和源码基线。
源码基线记录了会影响这些较长参考资料的当前变更。请检查已安装的发行版,不要将在线的 latest 或未发布文档视为锁定项目的 API。实用模板以及复现和评估资源仍随包提供;请在目标环境中运行选定示例。
正确性与性能规则
保持常规变换函数纯粹;显式的 jax.ref 状态是另一种受支持的模型,有其自身的变换/效果限制,并不意味着可以隐藏 Python 变更。传递类型化 PRNG 密钥,并避免重复使用。对于跟踪中的决策,使用结构化控制流;当循环较小时,静态 Python 循环可能更合适,因此不要机械地将每个循环都替换为 scan。
有意识地处理主机传输和同步。将输入准备、跟踪/编译、分派、设备执行、输出物化和通信分开。明确检查 x64 和矩阵乘法精度。当前版本的 jax.numpy.empty 不再保证存储初始化为零;需要零值时请使用 zeros。
捐赠会消耗输入缓冲区。进行独立的计时试验时,每次调用都要构造新输入;绝不能重复使用已捐赠的预热参数。基准测试框架现在需要输入工厂,并会传播同步错误:
python "$SKILL_DIR/scripts/jax_benchmark_harness.py" \
--file /absolute/project/benchmark_case.py --function step --factory make_inputs \
--jit --donate-argnums 0 --repeat 20
make_inputs() 返回 (args, kwargs),其中包含等效的新输入。准备工作及其同步在计时范围之外;输出同步在计时范围之内。保持形状、dtype、分片方式和静态值不变,并单独验证输出。首次调用时间包含编译/执行,也可能使用缓存;它不等同于纯编译时间。对于有状态训练吞吐量,请另写基准测试,将返回的状态传递到下一步,并报告这一不同的工作负载。旧版 JSON/arrayify 或不安全的捐赠兼容路径均已移除。
如果能满足目标,优先采用全局视图代码并有意识地进行分片,而不是手动使用 shard_map。NamedSharding 放置并不等同于类型中的显式分片。当前网格上下文使用 jax.set_mesh(mesh),而不是 with mesh。测试全局/本地形状、复制、集合通信、梯度和输出分片;单设备运行无法验证多主机通信。
提供证据后结束
给出诊断、补丁/示例、正确性检查、包含硬件和工作负载信息的实测时间,以及剩余的后端限制。如果辅助函数返回了部分结果/错误输出,不要声称基准测试或编译成功。对于辅助函数回归,请运行 python -m unittest discover -s "$SKILL_DIR/tests" -v。