如何使用 ONNX Runtime 将机器学习添加到您的 Web 应用程序
ONNX Runtime Web 使您能够使用 JavaScript API 和库在 Web 应用程序中运行和部署机器学习模型。本页面概述了开发过程中的一般流程。
您还可以根据您的应用程序开发环境,使用 ONNX Runtime 的其他语言库将机器学习集成到您的 Web 应用程序的服务器端。
要查看 Web 开发流程的实际示例,您可以按照以下教程中的步骤 构建一个使用 Next.js 分类图像的 Web 应用程序。
有关以下步骤的更多详细信息,请参阅 使用 ONNX Runtime 构建 Web 应用程序 参考指南。
ONNX Runtime Web 应用程序开发流程
-
选择部署目标和 ONNX Runtime 包
ONNX Runtime 可以根据您的应用程序要求以多种不同方式集成到您的 Web 应用程序中。
-
浏览器内推理。使用
onnxruntime-web
包。在设备上和浏览器中进行推理都有好处。
- 速度更快。 是的,对于已优化以在低功耗硬件上运行的模型,在客户端直接进行推理可以大大缩短推理时间。
- 更安全 并有助于隐私。由于数据在推理过程中不会离开设备,因此这是一种更安全的推理方法。
- 可离线工作。 如果您失去互联网连接,模型仍然能够进行推理。
- 成本更低。 您可以通过将推理任务分载到浏览器来降低云服务成本。
您还可以在 Electron 应用程序的前端使用 onnxruntime-web 包。
使用 onnxruntime-web,您可以选择使用
webgl
、webgpu
或webnn
(deviceType
设置为gpu
)进行 GPU 处理,以及 WebAssembly (wasm
,别名为cpu
) 或webnn
(deviceType
设置为cpu
)进行 CPU 处理。所有 ONNX 运算符都受 WASM 支持,但目前只有一部分受 WebGL、WebGPU 和 WebNN 支持。 -
JavaScript 服务器端推理。使用
onnxruntime-node
包。您的应用程序可能存在约束,这意味着在服务器端执行推理会更好。
- 模型太大 且需要更高的硬件规格。为了在客户端进行推理,您需要一个足够小的模型,以便在低功耗硬件上高效运行。
- 您不希望模型被下载到设备上。
您还可以在 Electron 应用程序的后端使用 onnxruntime-node 包。
-
使用其他语言 API 进行服务器端推理。使用 ONNX Runtime 的 C/C++ 和其他语言包。
- 如果您没有使用 node.js 开发 Web 后端 如果您的 Web 应用程序后端使用其他语言开发,您可以使用所选语言的 ONNX Runtime API。
-
在 React Native 应用程序中进行推理。使用
onnxruntime-react-native
包。
-
-
我的应用程序使用哪种机器学习模型?
您需要了解您的 Web 应用程序场景并获取适合该场景的 ONNX 模型。例如,应用程序是分类图像、在视频流中进行对象检测、总结或预测文本,还是进行数值预测。
ONNX Runtime Web 应用程序处理 ONNX 格式的模型。ONNX 模型可以从 ONNX 模型动物园 获取,也可以从 PyTorch 或 TensorFlow 以及许多其他地方转换而来。
您还可以创建特定于您要解决的任务的自定义模型。使用代码构建模型或使用低代码/无代码工具创建模型。查看以下资源,了解创建自定义模型的一些不同方法。所有这些资源都具有导出为 ONNX 格式的功能,以便您可以使用此模板和源代码。
-
我如何启动应用程序开发?
根据您选择的 Web 框架(例如 vuejs、reactjs、angularjs)启动您的 Web 应用程序。
-
我如何优化我的应用程序?
前面步骤中提到的库和模型可以进行优化以满足内存和处理需求。
a. ONNX 格式的模型可以 转换为 ORT 格式,以优化模型二进制大小、加快初始化速度和峰值内存使用。
b. ONNX Runtime 本身的大小可以通过 构建自定义包 来减小,该包只包含对您的特定模型的支持。
c. 调整 ONNX Runtime 推理会话选项,包括尝试不同的执行提供程序