JAX
扫码查看

Documentación sobre JAX, un marco informático de alto rendimiento para matrices.

JAX

En las cambiantes áreas del aprendizaje automático y la computación científica, los dos factores principales más necesarios son la velocidad de operación y la flexibilidad. El programa llamado JAX, que proviene del equipo de investigación de Google, es una herramienta muy conocida que ha llegado a la cima de la lista en la búsqueda de la aceleración en las áreas de computación numérica y aprendizaje profundo. JAX tiene todas las características básicas de NumPy y, además, introduce un lenguaje muy familiar con algunas de las características más avanzadas, como la diferenciación automática, lo que permite ejecutar cargas de trabajo de aprendizaje automático y código optimizado para GPUs/TPUs modernas y también con compilación just-in-time. En este trabajo se estudia JAX en la búsqueda de la forma más adecuada de utilizarlo, comparando la capacidad real con la pretendida, y ofreciendo un sencillo tutorial adecuado para los principiantes en esta materia.
¿Qué es JAX?
JAX es una potente biblioteca de computación numérica que amplía la funcionalidad de NumPy para incorporar diversas funciones que mejoran la productividad del aprendizaje automático moderno y la computación científica. JAX, a diferencia de otras bibliotecas más antiguas, se centra en la organización de la transferencia de funciones, lo que ayuda a que el código que escribe el investigador y el ingeniero sea a la vez corto y potente. Las principales características de JAX son su compatibilidad con la diferenciación automática, la aceleración por hardware y la facilidad de integración con los flujos de trabajo existentes en Python.
Principales atributos de JAX
JAX se diferencia de otras herramientas de cálculo numérico por las siguientes características únicas:
Compatibilidad con NumPy: JAX soporta la mayoría de las operaciones de array que ofrece NumPy. De este modo, los usuarios no tienen que desechar sus antiguos códigos cuando utilizan operaciones Numpy y también pueden disfrutar de las ventajas de la aceleración GPU/TPU.
Diferenciación automática: Al proporcionar la diferenciación automática en modo inverso y directo como parte de la biblioteca, JAX reduce la barrera de entrada al laborioso cálculo de gradientes para aplicaciones de aprendizaje automático y optimización.
Compilación justo a tiempo (JIT): Una de las características del decorador jit es la capacidad de compilar funciones Python directamente a un código máquina eficiente, lo que lleva a ganar mucho en rendimiento.
Aceleración por hardware: Sin ningún cambio en el código, JAX puede funcionar con la misma fluidez en CPUs, GPUs y TPUs tanto para tareas de investigación sencillas como a muy gran escala.
Transformaciones de funciones: Herramientas altamente eficientes como grad, vmap y pmap no sólo pueden transformar (y por tanto optimizar) funciones mediante vectorización, paralelización y dosificación automática, sino que además pueden hacerlo de forma fácil y rápida.

Introducción a JAX: tutorial básico
Nuestro objetivo en este caso es proporcionar un breve ejemplo que introduzca las características de diferenciación automática y compilación JIT de JAX.
En primer lugar, JAX debe ser instalado a través de pip:
pip install jax jaxlib
A continuación, deben importarse los módulos necesarios:
importar jax
importar jax.numpy como jnp
from jax import grad, jit
Es una buena idea elegir una función que sea fácil de entender y explicar antes de encontrar el gradiente de alguna función:
def f(x):
return 3 * x ** 2 + 2 * x + 1
df_dx = grad(f)
print(df_dx(2.0)) # Salida: 14.0
La compilación JIT permite una ejecución más rápida:
@jit
def fast_f(x):
return 3 * x ** 2 + 2 * x + 1
print(fast_f(2.0)) # Salida: 17.0
Este tutorial muestra algo más que lo bueno que es JAX para encontrar gradientes. Encajando tales operaciones en el núcleo, JAX ofrece vmap y pmap para el trabajo por lotes o propósitos de paralelización de dispositivos.
Conclusión
JAX supone un gran avance en el campo de la computación de matrices, ya que combina la facilidad de uso de NumPy con las últimas optimizaciones de rendimiento. Aunque aprender a manejar la programación funcional es un pequeño obstáculo que hay que superar, el alcance de la velocidad y la adaptabilidad de los beneficios resultantes es bastante gratificante. Ya se trate de entrenar modelos de aprendizaje automático, simulaciones científicas u optimización de funciones matemáticas, JAX es la herramienta que ayudará a elevar los límites de lo posible en Python.

FacebookXWhatsAppPinterestLinkedIn