构建应用程序时,选择正确的工具至关重要。您需要高性能、轻松开发和无缝跨平台部署。流行的框架提供了权衡:
但问题是:大多数框架缺乏强大的原生机器学习 (ML) 支持。这种差距的存在是因为这些框架早于人工智能繁荣。问题是:
我们如何有效地将机器学习集成到应用程序中?
诸如ONNX Runtime之类的常见解决方案允许导出ML模型以进行应用程序集成,但它们没有针对CPU进行优化,也没有足够灵活以适应通用算法。
输入JAX,一个Python库,它:
在本文中,我们将向您展示如何:
JAX 就像类固醇上的 NumPy。它由 Google 开发,是一个低级高性能库,使 ML 易于访问且功能强大。
这是一个比较 NumPy 和 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)
Google Colab 中的基准测试揭示了 JAX 的性能优势:
这种灵活性和速度使 JAX 成为性能至关重要的生产环境的理想选择。
JAX 将 Python 代码翻译成 HLO(高级优化器)规范,可以使用 C XLA 库编译和执行。这使得:
编写您的 JAX 函数并导出其 HLO 表示。例如:
# 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)
要生成 HLO,请使用 JAX 存储库中的 jax_to_ir.py 脚本:
import jax.numpy as jnp def fn(x, y, z): return jnp.dot(x, y) / z
将生成的文件(fn_hlo.txt 和 fn_hlo.pb)放入应用程序的资产目录中。
克隆 JAX 存储库并导航到 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
使用 Bazel 编译:
cc_shared_library( name = "jax", deps = [":main"], visibility = ["//visibility:public"], )
您将在输出目录中找到编译后的 libjax.dylib。
使用 Dart 的 FFI 包 与 C 库通信。创建一个 jax.dart 文件:
bazel build examples/jax_cpp:jax
将动态库包含在您的项目目录中。测试一下:
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); } }
您将在控制台中看到 C 库的输出。
通过此设置,您可以:
潜在用例包括:
JAX 弥合了基于 Python 的开发和生产级性能之间的差距,让 ML 工程师能够专注于算法,而无需担心低级 C 代码。
我们正在构建一个尖端的人工智能平台,具有无限的聊天令牌和长期记忆,确保随着时间的推移而不断发展的无缝、上下文感知交互。
它是完全免费的,您也可以在当前的 IDE 中尝试它。
以上是使用 C FFI 从 Dart 运行 JAX 程序的详细内容。更多信息请关注PHP中文网其他相关文章!