跳至內容

Google JAX

維基百科,自由的百科全書
(差異) ←上一修訂 | 最新修訂 (差異) | 下一修訂→ (差異)
JAX
開發者Google
首次發布2019年10月31日,​5年前​(2019-10-31[1]
當前版本
  • 0.4.24(2024年2月6日;穩定版本)[2]
編輯維基數據鏈接
預覽版本v0.3.13(2022年5月16日,​2年前​(2022-05-16
原始碼庫github.com/google/jax
程式語言Python, C++
作業系統Linux, macOS, Windows
平台Python, NumPy
類型機器學習
許可協議Apache 2.0
網站jax.readthedocs.io/en/latest/ 編輯維基數據

Google JAX,是Google開發的用於變換數值函數的Python機器學習框架[3][4][5]。它結合了修改版本的Autograd(自動通過函數的微分獲得其梯度函數)[6],和TensorFlow的XLA(加速線性代數[7]。它被設計為儘可能的遵從NumPy的結構和工作流程,並協同工作於各種現存的框架如TensorFlowPyTorch[8][9]

主要功能

[編輯]

JAX的主要功能是[3]

grad

[編輯]

下面的代碼演示grad函數的自動微分。

# 导入库
from jax import grad
import jax.numpy as jnp

# 定义logistic函数
def logistic(x):  
    return jnp.exp(x) / (jnp.exp(x) + 1)

# 获得logistic函数的梯度函数
grad_logistic = grad(logistic)

# 求值logistic函数在x = 1处的梯度 
grad_log_out = grad_logistic(1.0)   
print(grad_log_out)

最終的輸出為:

0.19661194

jit

[編輯]

下面的代碼演示jit函數的優化。

# 导入库
from jax import jit
import jax.numpy as jnp

# 定义cube函数
def cube(x):
    return x * x * x

# 生成数据
x = jnp.ones((10000, 10000))

# 创建cube函数的jit版本
jit_cube = jit(cube)

# 应用cube函数和jit_cube函数于相同数据来比较其速度
cube(x)
jit_cube(x)

可見jit_cube的運行時間顯著的短於cube

vmap

[編輯]

下面的代碼展示vmap函數的通過SIMD的向量化。

# 导入库
from functools import partial
from jax import vmap
import jax.numpy as jnp

# 定义函数
def grads(self, inputs):
    in_grad_partial = partial(self._net_grads, self._net_params)
    grad_vmap = vmap(in_grad_partial)
    rich_grads = grad_vmap(inputs)
    flat_grads = np.asarray(self._flatten_batch(rich_grads))
    assert flat_grads.ndim == 2 and flat_grads.shape[0] == inputs.shape[0]
    return flat_grads

pmap

[編輯]

下面的代碼展示pmap函數的對矩陣乘法的並行化。

# 从JAX导入pmap和random;导入JAX NumPy
from jax import pmap, random
import jax.numpy as jnp

# 生成2个维度为5000 x 6000的随机数矩阵,每设备一个
random_keys = random.split(random.PRNGKey(0), 2)
matrices = pmap(lambda key: random.normal(key, (5000, 6000)))(random_keys)

# 没有数据传输,并行的在每个CPU/GPU上进行局部矩阵乘法 
outputs = pmap(lambda x: jnp.dot(x, x.T))(matrices)

# 没有数据传输,并行的在每个CPU/GPU上分别求取这两个矩阵的均值
means = pmap(jnp.mean)(outputs)
print(means)

最終的輸出為:

[1.1566595 1.1805978]

使用JAX的庫

[編輯]

一些Python庫使用JAX作為後端,這包括:

參見

[編輯]

引用

[編輯]
  1. ^ jax-v0.1.49. 
  2. ^ https://github.com/google/jax/releases/tag/jax-v0.4.24.
  3. ^ 3.0 3.1 Bradbury, James; Frostig, Roy; Hawkins, Peter; Johnson, Matthew James; Leary, Chris; MacLaurin, Dougal; Necula, George; Paszke, Adam; Vanderplas, Jake; Wanderman-Milne, Skye; Zhang, Qiao, JAX: Autograd and XLA, Astrophysics Source Code Library (Google), 2022-06-18 [2022-06-18], Bibcode:2021ascl.soft11002B, (原始內容存檔於2022-06-18) 
  4. ^ Frostig, Roy; Johnson, Matthew James; Leary, Chris. Compiling machine learning programs via high-level tracing (PDF). MLsys. 2018-02-02: 1–3. (原始內容存檔 (PDF)於2022-06-21). 
  5. ^ Using JAX to accelerate our research. www.deepmind.com. [2022-06-18]. (原始內容存檔於2022-06-18) (英語). 
  6. ^ autograd. [2023-09-23]. (原始內容存檔於2022-07-18). 
  7. ^ XLA. [2023-09-23]. (原始內容存檔於2022-09-01). 
  8. ^ Lynley, Matthew. Google is quietly replacing the backbone of its AI product strategy after its last big push for dominance got overshadowed by Meta. Business Insider. [2022-06-21]. (原始內容存檔於2022-06-21) (美國英語). 
  9. ^ Why is Google's JAX so popular?. Analytics India Magazine. 2022-04-25 [2022-06-18]. (原始內容存檔於2022-06-18) (美國英語). 
  10. ^ Flax: A neural network library and ecosystem for JAX designed for flexibility, Google, 2022-07-29 [2022-07-29], (原始內容存檔於2022-09-03) 
  11. ^ Kidger, Patrick, Equinox, 2022-07-29 [2022-07-29], (原始內容存檔於2023-09-19) 
  12. ^ Kidger, Patrick, Diffrax, 2023-08-05 [2023-08-08], (原始內容存檔於2023-08-10) 
  13. ^ Optax, DeepMind, 2022-07-28 [2022-07-29], (原始內容存檔於2023-06-07) 
  14. ^ Lineax, Google, 2023-08-08 [2023-08-08], (原始內容存檔於2023-08-10) 
  15. ^ RLax, DeepMind, 2022-07-29 [2022-07-29], (原始內容存檔於2023-04-26) 
  16. ^ Jraph - A library for graph neural networks in jax., DeepMind, 2023-08-08 [2023-08-08], (原始內容存檔於2022-11-23) 
  17. ^ jaxtyping, Google, 2023-08-08 [2023-08-08], (原始內容存檔於2023-08-10) 
  18. ^ NumPyro - Probabilistic programming with NumPy powered by JAX for autograd and JIT compilation to GPU/TPU/CPU. [2022-08-31]. (原始內容存檔於2022-08-31). 
  19. ^ Brax - Massively parallel rigidbody physics simulation on accelerator hardware. [2022-08-31]. (原始內容存檔於2022-08-31). 

外部連結

[編輯]