建立應用程式時,選擇正確的工具至關重要。您需要高效能、輕鬆開發和無縫跨平台部署。流行的框架提供了權衡:
但問題是:大多數框架缺乏強大的原生機器學習 (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中文網其他相關文章!