2026-10-20 18:23:40
JAX 是 Autograd 和 XLA 的结合体,旨在提供高性能机器学习研究支持,具有自动微分、高性能编译和并行编程等核心特性,已被谷歌 AI、DeepMind 等多个项目采用。
JAX 的核心特性自动微分能力
作为 Autograd 的更新版本,JAX 可对原生 Python 和 Numpy 函数实现自动微分,支持通过 loops、branches、recursion 和 closures 进行微分操作,并能对导数的导数求导。
提供反向模式微分(反向传播)功能,通过 grad 函数实现,且支持与正向微分按任意顺序复合,满足复杂算法需求。
示例代码中 grad_fun = jit(grad(logprob_fun)) 展示了如何通过 grad 计算梯度,并通过 jit 编译优化。
基于 XLA 的高性能编译
JAX 使用 XLA(Accelerated Linear Algebra)编译器,可将 Numpy 程序编译为针对 GPU 和 TPU 优化的代码,默认通过系统调用自动 JIT 编译执行。
提供 jit 函数 API,允许用户手动将自定义 Python 函数编译为 XLA 优化的内核,实现编译与自动微分的任意复合,最大化性能。
示例中 perex_grads = jit(vmap(grad_fun, in_axes=(None, 0, 0))) 展示了如何结合 jit 和 vmap 实现高效计算。
并行编程支持
vmap:用于自动向量化,将函数从单样本操作扩展为批量操作,提升计算效率。
pmap:支持单一程序多数据(SPMD)的并行编程,可跨多个 GPU 或 TPU 核编程,并实现整体微分,适用于大规模分布式训练。
谷歌相关项目
Google Trax:一个模块化、可配置的深度学习库,支持强化学习、序列建模等任务,代码库为 google/trax。
Flax:基于 JAX 的神经网络库,提供简洁的 API 和灵活的模型构建方式,代码库为 google/flax。
JAX-MD:专注于分子动力学的模拟库,利用 JAX 的自动微分和并行能力加速物理计算,代码库为 google/jax-md。
Neural Tangents:研究神经网络核方法的库,支持无限宽度网络的快速计算,代码库为 google/neural-tangents。
CleverHans(TensorFlow 版本):安全领域对抗样本研究库,部分功能迁移至 JAX 以提升性能,代码库为 tensorflow/cleverhans2。
DeepMind 相关项目
Haiku:基于 JAX 的神经网络库,设计灵感来自 Sonnet,提供简洁的模型定义方式,代码库为 deepmind/dm-haiku。
RLax:强化学习算法库,封装了常见 RL 算法(如 DQN、PPO),代码库为 deepmind/rlax。
其他机构与个人项目
Uber Pyro:概率编程语言,部分模块迁移至 JAX 以利用其自动微分和编译能力,代码库为 pyro-ppl/pyro。
Oxford Discopy:量子计算与范畴论研究库,使用 JAX 实现高效计算,代码库为 oxford-quantum-group/discopy。
Symbolic Deep Learning Simulation:个人项目,探索符号深度学习与物理模拟的结合,代码库为 MilesCranmer/symbolic_deep_learning。
EagerPy:个人项目,提供统一的张量操作接口,支持 JAX、PyTorch 等后端,代码库为 jonasrauber/eagerpy。
基准测试
在 Google Colab 和 pyhpc-benchmarks(如 dionhaefner/pyhpc-benchmarks)中,JAX 展示了显著的性能优势,尤其在 GPU/TPU 加速和大规模并行计算场景下。
通过 XLA 编译和 JIT 优化,JAX 可减少 Python 解释器的开销,接近原生 C++/CUDA 的性能水平。
适用场景
科研探索:自动微分和灵活的函数变换支持快速原型设计,适合新算法研究。
高性能计算:XLA 编译和并行编程能力满足大规模模型训练需求。
跨平台部署:支持从 CPU 到 TPU 的无缝迁移,降低硬件适配成本。
JAX 通过整合 Autograd 的自动微分和 XLA 的高性能编译,为机器学习研究提供了强大的工具链。其核心特性(如 grad、jit、vmap、pmap)支持复杂算法的高效实现,而谷歌 AI、DeepMind 等机构的广泛应用进一步验证了其可靠性。未来,随着更多项目迁移至 JAX,其生态和性能优势将持续扩大。