?为什么将 Dart 和 JAX 结合起来进行机器学习?
构建应用程序时,选择正确的工具至关重要。您需要高性能、轻松开发和无缝跨平台部署。流行的框架提供了权衡:
- C 提供速度,但会减慢开发速度。
- Dart(与 Flutter 一起)速度较慢,但简化了内存管理和跨平台开发。
但问题是:大多数框架缺乏强大的原生机器学习 (ML) 支持。这种差距的存在是因为这些框架早于人工智能繁荣。问题是:
我们如何有效地将机器学习集成到应用程序中?
诸如ONNX Runtime之类的常见解决方案允许导出ML模型以进行应用程序集成,但它们没有针对CPU进行优化,也没有足够灵活以适应通用算法。
输入JAX,一个Python库,它:
- 允许编写优化的机器学习和通用算法。
- 在 CPU、GPU 和 TPU 上提供与平台无关的执行。
- 支持诸如autograd和JIT编译等尖端功能。
在本文中,我们将向您展示如何:
- 用 Python 编写 JAX 程序。
- 生成 XLA 规格。
- 使用 C FFI 在 Dart 中部署优化的 JAX 代码。
?什么是JAX?
JAX 就像类固醇上的 NumPy。它由 Google 开发,是一个低级高性能库,使 ML 易于访问且功能强大。
- 与平台无关:代码无需修改即可在 CPU、GPU 和 TPU 上运行。
- 速度:JAX 由 XLA 编译器提供支持,优化并加速执行。
- 灵活性:非常适合机器学习模型和通用算法。
这是一个比较 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 的性能优势:
- CPU 和 GPU:JAX 比 NumPy 更快。
- TPU:由于数据传输成本,大型模型的加速变得明显。
这种灵活性和速度使 JAX 成为性能至关重要的生产环境的理想选择。
?️ 将 JAX 投入生产
云微服务与本地部署
- 云:容器化 Python 微服务非常适合基于云的计算。
- 本地:发布 Python 解释器对于本地应用程序来说并不理想。
解决方案:利用 JAX 的 XLA 编译
JAX 将 Python 代码翻译成 HLO(高级优化器)规范,可以使用 C XLA 库编译和执行。这使得:
- 用 Python 编写算法。
- 通过 C 库本地运行它们。
- 通过FFI(外部函数接口) 与 Dart 集成。
✍️ 逐步集成
1. 生成 HLO 原型
编写您的 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)放入应用程序的资产目录中。
2. 构建C动态库
修改JAX的C示例代码
克隆 JAX 存储库并导航到 jax/examples/jax_cpp。
- 添加main.h头文件:
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
- 更新BUILD文件以创建共享库:
#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。
3. 使用 FFI 将 Dart 与 C 连接
使用 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); } } </foocfunc>
您将在控制台中看到 C 库的输出。
?下一步
通过此设置,您可以:
- 使用 JAX 和 XLA 优化 ML 模型。
- 在本地运行强大的算法。
潜在用例包括:
- 搜索算法(例如,A*)。
- 组合优化(例如调度)。
- 图像处理(例如边缘检测)。
JAX 弥合了基于 Python 的开发和生产级性能之间的差距,让 ML 工程师能够专注于算法,而无需担心低级 C 代码。
我们正在构建一个尖端的人工智能平台,具有无限的聊天令牌和长期记忆,确保随着时间的推移而不断发展的无缝、上下文感知交互。
它是完全免费的,您也可以在当前的 IDE 中尝试它。
以上是使用 C FFI 从 Dart 运行 JAX 程序的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

本教程向您展示了如何将自定义的Google搜索API集成到您的博客或网站中,提供了比标准WordPress主题搜索功能更精致的搜索体验。 令人惊讶的是简单!您将能够将搜索限制为Y

本文系列在2017年中期进行了最新信息和新示例。 在此JSON示例中,我们将研究如何使用JSON格式将简单值存储在文件中。 使用键值对符号,我们可以存储任何类型的

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

利用轻松的网页布局:8个基本插件 jQuery大大简化了网页布局。 本文重点介绍了简化该过程的八个功能强大的JQuery插件,对于手动网站创建特别有用

核心要点 JavaScript 中的 this 通常指代“拥有”该方法的对象,但具体取决于函数的调用方式。 没有当前对象时,this 指代全局对象。在 Web 浏览器中,它由 window 表示。 调用函数时,this 保持全局对象;但调用对象构造函数或其任何方法时,this 指代对象的实例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。这些方法使用给定的 this 值和参数调用函数。 JavaScript 是一门优秀的编程语言。几年前,这句话可

jQuery是一个很棒的JavaScript框架。但是,与任何图书馆一样,有时有必要在引擎盖下发现发生了什么。也许是因为您正在追踪一个错误,或者只是对jQuery如何实现特定UI感到好奇

该帖子编写了有用的作弊表,参考指南,快速食谱以及用于Android,BlackBerry和iPhone应用程序开发的代码片段。 没有开发人员应该没有他们! 触摸手势参考指南(PDF) Desig的宝贵资源


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版
中文版,非常好用