Al construir aplicaciones, seleccionar las herramientas correctas es crucial. Desea un alto rendimiento, un fácil desarrollo y una implementación multiplataforma perfecta. Los marcos populares ofrecen compensaciones:
Pero aquí está la captura: la mayoría de los marcos carecen de soporte robuste nativo de aprendizaje automático (ml) . Esta brecha existe porque estos marcos son anteriores al auge de la IA. La pregunta es:
¿Cómo podemos integrar eficientemente ML en aplicaciones?
soluciones comunes como Onnx Runtime Permitir exportación de modelos ML para la integración de aplicaciones, pero no están optimizados para CPU o lo suficientemente flexibles para algoritmos generalizados.
Enter jax , una biblioteca de python que:
En este artículo, le mostraremos cómo:
jax es como Numpy en esteroides. Desarrollado por Google, es una biblioteca de bajo nivel y de alto rendimiento que hace que ML sea accesible pero poderoso.
Aquí hay un ejemplo que compara Numpy y Jax:
# NumPy version import numpy as np def assign_numpy(): a = np.empty(1000000) a[:] = 1 return a # JAX version import jax.numpy as jnp import jax @jax.jit def assign_jax(): a = jnp.empty(1000000) return a.at[:].set(1)
Benchmarking en Google Colab revela el borde de rendimiento de Jax:
Esta flexibilidad y velocidad hacen que Jax sea ideal para entornos de producción donde el rendimiento es clave.
Jax traduce el código Python en HLO (Optimizador de alto nivel) Especificaciones , que se pueden compilar y ejecutar usando c xla bibliotecas . Esto habilita:
Escriba su función Jax y exporte su representación HLO. Por ejemplo:
import jax.numpy as jnp def fn(x, y, z): return jnp.dot(x, y) / z
para generar el script HLO, use el script jax_to_ir.py desde el repositorio de jax:
python jax_to_ir.py \ --fn jax_example.prog.fn \ --input_shapes '[("x", "f32[2,2]"), ("y", "f32[2,2")]' \ --constants '{"z": 2.0}' \ --ir_format HLO \ --ir_human_dest /tmp/fn_hlo.txt \ --ir_dest /tmp/fn_hlo.pb
Coloque los archivos resultantes (fn_hlo.txt y fn_hlo.pb) en el directorio de activos de su aplicación.
Clone el repositorio de Jax y navegue a jax/ejemplos/jax_cpp .
#ifndef MAIN_H #define MAIN_H extern "C" { int bar(int foo); } #endif
cc_shared_library( name = "jax", deps = [":main"], visibility = ["//visibility:public"], )
compilar con bazel:
bazel build examples/jax_cpp:jax
encontrará el compilado libjax.dylib en el directorio de salida.
use el paquete de dart ffi para comunicarse con la biblioteca C. Cree un archivo jax.dart:
import 'dart:ffi'; import 'package:dynamic_library/dynamic_library.dart'; typedef FooCFunc = Int32 Function(Int32 bar); typedef FooDartFunc = int Function(int bar); class JAX { late final DynamicLibrary dylib; JAX() { dylib = loadDynamicLibrary(libraryName: 'jax'); } Function get _bar => dylib.lookupFunction('bar'); int bar(int foo) { return _bar(foo); } }
Incluya la biblioteca dinámica en su directorio de proyecto. Pruébelo con:
final jax = JAX(); print(jax.bar(42));
verá la salida de la biblioteca C en su consola.
con esta configuración, puede:
Los casos de uso potenciales incluyen:
Jax une la brecha entre el desarrollo basado en Python y el rendimiento de nivel de producción, permitiendo que los ingenieros de ML se centren en los algoritmos sin preocuparse por el código C de bajo nivel.
Estamos construyendo una plataforma de IA de vanguardia con tokens de chat ilimitados y memoria a largo plazo, asegurando interacciones sin contexto sin contexto que evolucionan con el tiempo.
es completamente gratis, y también puede probarlo dentro de su ide actual.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3