구글 JAX

Google JAX
JAX
개발자구글
프리뷰 릴리즈
v0.3.13 / 2022년 5월 16일; 8개월 전(2022-05-16)
저장소github.com/google/jax
기입처Python, C++
운영 체제Linux, macOS, Windows
플랫폼Python, NumPy
크기9.0 MB
유형기계 학습
면허증.아파치 2.0
웹 사이트jax.readthedocs.io/en/latest/ Edit this on Wikidata

Google JAX는 수치 [1][2][3]함수를 변환하기 위한 기계 학습 프레임워크입니다.이것은 수정된 버전의 autograd(함수의 미분을 통해 그라데이션 함수의 자동 취득)와 TensorFlow의 XLA(가속 선형 대수)를 결합하는 것으로 설명된다.NumPy의 구조와 워크플로우를 최대한 가깝게 따르도록 설계되었으며 TensorFlow 및 PyTorch[4][5]같은 다양한 기존 프레임워크와 연동됩니다.JAX의 주요 기능은 다음과 같습니다.[1]

  1. 그라데이션: 자동 미분
  2. jit: 컴파일
  3. vmap: 자동 평가
  4. pmap: SPMD 프로그래밍

눈금을 매기다

아래 코드는 그라데이션 함수의 자동 미분을 보여줍니다.

Import 수 부터 잭스 수입품 눈금을 매기다 수입품 jax.numpy ~하듯이 jnp  # 로지스틱 함수의 정의 방어하다 로지스틱(x):       돌아가다 jnp.exp(x) / (jnp.exp(x) + 1)  # 로지스틱 함수의 그라데이션 함수를 구합니다. grad_module = 눈금을 매기다(로지스틱)  # x = 1에서 로지스틱 함수의 기울기를 평가합니다. grad_log_out = grad_module(1.0)    인쇄물(grad_log_out) 

마지막 행이 출력됩니다.

0.19661194 

점토

아래 코드는 퓨전을 통한 jit 기능의 최적화를 보여줍니다.

Import 수 부터 잭스 수입품 점토 수입품 jax.numpy ~하듯이 jnp  # 큐브 함수를 정의합니다. 방어하다 입방체(x):     돌아가다 x * x * x  데이터 생성 수 x = jnp.하나((10000, 10000))  # 큐브 함수의 jit 버전을 만듭니다. 큐브 = 점토(입방체)  # 큐브와 jit_cube 함수를 동일한 데이터에 적용하여 속도를 비교합니다. 입방체(x) 큐브(x) 

jit_cube(17행)의 계산 시간은 큐브(16행)의 계산 시간보다 현저하게 짧아야 합니다.7번 줄의 값을 늘리면 차이가 커집니다.

vmap

아래 코드는 vmap 함수의 벡터화를 보여줍니다.

Import 수 부터 기능하다 수입품 부분적인 부터 잭스 수입품 vmap 수입품 jax.numpy ~하듯이 jnp  # 함수를 정의합니다. 방어하다 그레이드(자신, 입력):     in_grad_filename(실행) = 부분적인(자신._net_grades, 자신._net_패럴)     grad_vmap = 잭스.vmap(in_grad_filename(실행))     리치_그레이드 = grad_vmap(입력)     평점 = np.배열(자신._filen_displays_displays(비활성화)(리치_그레이드))     주장하다 평점.하지 않다 == 2 그리고. 평점.모양.[0] == 입력.모양.[0]     돌아가다 평점 

이 섹션의 오른쪽에 있는 GIF는 벡터화된 덧셈의 개념을 보여줍니다.

벡터화된 덧셈의 일러스트 영상

pmap

아래 코드는 행렬 곱셈을 위한 pmap 함수의 병렬화를 보여줍니다.

# JAX에서 pmap 및 랜덤 Import, JAX NumPy Import 부터 잭스 수입품 pmap, 랜덤 수입품 jax.numpy ~하듯이 jnp  # 5000 x 6000 치수의 랜덤 매트릭스 2개 생성 (디바이스당 1개씩) 랜덤 키 = 랜덤.분열되다(랜덤.동작하고 있다(0), 2) 매트릭스 = pmap(람다 열쇠: 랜덤.보통의(열쇠, (5000, 6000)))(랜덤 키)  # 데이터 전송 없이 병렬로 각 CPU/GPU에서 로컬 매트릭스 곱셈 실행 출력 = pmap(람다 x: jnp.(x, x.T))(매트릭스)  # 데이터 전송 없이 병렬로 각 CPU/GPU의 두 매트릭스에 대한 평균을 개별적으로 구합니다. 수단 = pmap(jnp.의미하다)(출력) 인쇄물(수단) 

마지막 행에는 값이 인쇄됩니다.

[1.1566595 1.1805978] 

Jax를 사용하는 라이브러리

다음과 같은 여러 파이썬 라이브러리는 Jax를 백엔드로 사용합니다.

  • 구글 [6]브레인에서 개발고급 뉴럴 네트워크 라이브러리인 아마.
  • Haiku는 Deep [7]Mind가 개발한 뉴럴 네트워크용 객체 지향 라이브러리입니다.
  • Equinox는 파라미터화된 함수(신경망 포함)를 PyTree로 표현한다는 아이디어를 중심으로 전개되는 라이브러리입니다.패트릭 [8]키저에 의해 만들어졌습니다.
  • Optax는 DeepMind가 [9]개발한 그라데이션 처리 및 최적화를 위한 라이브러리입니다.
  • RLax는 [10]DeepMind가 개발강화 학습 에이전트 개발을 위한 라이브러리입니다.

「 」를 참조해 주세요.

외부 링크

레퍼런스

  1. ^ a b Bradbury, James; Frostig, Roy; Hawkins, Peter; Johnson, Matthew James; Leary, Chris; MacLaurin, Dougal; Necula, George; Paszke, Adam; Vanderplas, Jake; Wanderman-Milne, Skye; Zhang, Qiao (2022-06-18), "JAX: Autograd and XLA", Astrophysics Source Code Library, Google, Bibcode:2021ascl.soft11002B, archived from the original on 2022-06-18, retrieved 2022-06-18
  2. ^ Frostig, Roy; Johnson, Matthew James; Leary, Chris (2018-02-02). "Compiling machine learning programs via high-level tracing" (PDF). MLsys: 1–3. Archived (PDF) from the original on 2022-06-21.{{cite journal}}: CS1 유지보수: 날짜 및 연도(링크)
  3. ^ "Using JAX to accelerate our research". www.deepmind.com. Archived from the original on 2022-06-18. Retrieved 2022-06-18.
  4. ^ 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. Archived from the original on 2022-06-21. Retrieved 2022-06-21.
  5. ^ "Why is Google's JAX so popular?". Analytics India Magazine. 2022-04-25. Archived from the original on 2022-06-18. Retrieved 2022-06-18.
  6. ^ Flax: A neural network library and ecosystem for JAX designed for flexibility, Google, 2022-07-29, retrieved 2022-07-29
  7. ^ Haiku: Sonnet for JAX, DeepMind, 2022-07-29, retrieved 2022-07-29
  8. ^ Kidger, Patrick (2022-07-29), Equinox, retrieved 2022-07-29
  9. ^ Optax, DeepMind, 2022-07-28, retrieved 2022-07-29
  10. ^ RLax, DeepMind, 2022-07-29, retrieved 2022-07-29