构建应用程序时,选择正确的工具至关重要。您需要高性能,易于开发和无缝的跨平台部署。流行框架提供权衡:
,但这是捕获:大多数框架缺乏强大的本机机器学习(ML)支持。之所以存在此差距,是因为这些框架早于AI繁荣。问题是:
我们如何有效地将ML集成到应用程序中? (例如
onnx runtime)允许导出ML模型以进行应用程序集成,但它们对CPU的优化尚未优化,也没有足够灵活地用于广义算法。 [2
启用编写优化的ML和通用算法。在CPU,GPU和TPU上提供平台 - 无关执行。
支持?什么是JAX?
灵活性:非常适合ML模型和一般算法。
这种灵活性和速度使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)
:运送Python解释器对于本地应用程序不是理想的选择。
解决方案:利用JAX的XLA汇编
编写您的JAX函数并导出其HLO表示。例如: 导入jax.numpy作为jnp def fn(x,y,z): 返回jnp.dot(x,y) / z
要生成hlo,请使用jax存储库中的
import jax.numpy as jnp def fn(x, y, z): return jnp.dot(x, y) / z
更新构建文件以创建共享库:
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
使用DART的 FFI软件包
与C库进行通信。创建一个jax.dart文件:#ifndef MAIN_H #define MAIN_H extern "C" { int bar(int foo); } #endif
cc_shared_library( name = "jax", deps = [":main"], visibility = ["//visibility:public"], )
在此设置中,您可以:
bazel build examples/jax_cpp:jax
本地运行强大的算法。
搜索算法
(例如,a*)。
# 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)组合优化
(例如,调度)。
final jax = JAX(); print(jax.bar(42));(例如,边缘检测)。
它是完全免费的,您也可以在当前的IDE中尝试。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3