Lors de la création d'applications, la sélection des bons outils est cruciale. Vous souhaitez des performances élevées, un développement facile et un déploiement multiplateforme transparent. Les frameworks populaires proposent des compromis :
Mais voici le problème : la plupart des frameworks ne disposent pas d'un support robuste pour l'apprentissage automatique (ML) natif. Cet écart existe parce que ces cadres sont antérieurs au boom de l’IA. La question est :
Comment pouvons-nous intégrer efficacement le ML dans les applications ?
Les solutions courantes telles que ONNX Runtime permettent d'exporter des modèles ML pour l'intégration d'applications, mais elles ne sont pas optimisées pour les processeurs ni suffisamment flexibles pour les algorithmes généralisés.
Entrez JAX, une bibliothèque Python qui :
Dans cet article, nous allons vous montrer comment :
JAX est comme NumPy sous stéroïdes. Développée par Google, il s'agit d'une bibliothèque de bas niveau et hautes performances qui rend le ML accessible mais puissant.
Voici un exemple comparant NumPy et 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)
L'analyse comparative dans Google Colab révèle l'avantage en termes de performances de JAX :
Cette flexibilité et cette rapidité rendent JAX idéal pour les environnements de production où les performances sont essentielles.
JAX traduit le code Python en spécifications HLO (High-Level Optimizer), qui peuvent être compilées et exécutées à l'aide de bibliothèques C XLA. Cela permet :
Écrivez votre fonction JAX et exportez sa représentation HLO. Par exemple :
# 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)
Pour générer le HLO, utilisez le script jax_to_ir.py du référentiel JAX :
import jax.numpy as jnp def fn(x, y, z): return jnp.dot(x, y) / z
Placez les fichiers résultants (fn_hlo.txt et fn_hlo.pb) dans le répertoire des ressources de votre application.
Clonez le référentiel JAX et accédez à jax/examples/jax_cpp.
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
#ifndef MAIN_H #define MAIN_H extern "C" { int bar(int foo); } #endif
Compiler avec Bazel :
cc_shared_library( name = "jax", deps = [":main"], visibility = ["//visibility:public"], )
Vous trouverez le libjax.dylib compilé dans le répertoire de sortie.
Utilisez le package FFI de Dart pour communiquer avec la bibliothèque C. Créez un fichier jax.dart :
bazel build examples/jax_cpp:jax
Incluez la bibliothèque dynamique dans le répertoire de votre projet. Testez-le avec :
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<FooCFunc, FooDartFunc>('bar'); int bar(int foo) { return _bar(foo); } }
Vous verrez la sortie de la bibliothèque C dans votre console.
Avec cette configuration, vous pouvez :
Les cas d'utilisation potentiels incluent :
JAX comble le fossé entre le développement basé sur Python et les performances au niveau de la production, permettant aux ingénieurs ML de se concentrer sur les algorithmes sans se soucier du code C de bas niveau.
Nous construisons une plate-forme d'IA de pointe avec des jetons de discussion illimités et une mémoire à long terme, garantissant des interactions transparentes et contextuelles qui évoluent au fil du temps.
C'est entièrement gratuit et vous pouvez également l'essayer dans votre IDE actuel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!