如何使用 ONNX Runtime 将机器学习添加到您的 Web 应用程序

ONNX Runtime Web 使您能够使用 JavaScript API 和库在 Web 应用程序中运行和部署机器学习模型。本页面概述了整个开发过程中的一般流程。

根据您的应用程序开发环境,您还可以使用 ONNX Runtime 的其他语言库将机器学习集成到 Web 应用程序的服务器端。

要查看实际 Web 开发流程的示例,您可以按照以下教程中的步骤,使用 Next.js 构建一个 Web 应用程序来对图像进行分类

有关以下步骤的更多详细信息,请参阅使用 ONNX Runtime构建 Web 应用程序参考指南。

ONNX Runtime Web 应用程序开发流程

  1. 选择部署目标和 ONNX Runtime 包

    根据您的应用程序需求,ONNX Runtime 可以通过多种不同方式集成到您的 Web 应用程序中。

    • 浏览器内推理。使用 onnxruntime-web 包。

      在设备端和浏览器内进行推理有很多好处。

      • 更快。没错,对于已优化可在性能较低硬件上运行的模型,在客户端直接执行推理可以大大缩短推理时间。
      • 更安全,有助于保护隐私。由于数据在推理过程中从不离开设备,因此这是一种更安全的推理方法。
      • 可以离线工作。即使您失去互联网连接,模型仍然能够进行推理。
      • 更便宜。通过将推理卸载到浏览器,您可以降低云服务成本。

      您也可以在 Electron 应用程序的前端使用 onnxruntime-web 包。

      使用 onnxruntime-web,您可以选择使用 webglwebgpuwebnn(将 deviceType 设置为 gpu)进行 GPU 处理,以及使用 WebAssembly(wasmcpu 的别名)或 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 包。

  2. 我的应用程序使用哪种机器学习模型?

    您需要了解 Web 应用程序的场景,并获取适合该场景的 ONNX 模型。例如,该应用程序是进行图像分类、视频流中的目标检测、文本摘要或预测,还是进行数值预测。

    ONNX Runtime Web 应用程序处理 ONNX 格式的模型。ONNX 模型可以从 ONNX 模型动物园获取,从 PyTorch 或 TensorFlow 转换而来,以及许多其他地方。

    您还可以创建针对您要解决的任务的自定义模型。使用代码构建模型或使用低代码/无代码工具创建模型。查看以下资源,了解创建自定义模型的一些不同方法。所有这些资源都具有导出为 ONNX 格式的功能,以便您可以利用此模板和源代码。

  3. 如何启动我的应用程序开发?

    根据您选择的 Web 框架(例如 vuejs、reactjs、angularjs)启动您的 Web 应用程序。

    1. 添加 ONNX Runtime 依赖

    2. 在您的应用程序中调用 onnxruntime-web API

    3. 根据您的应用程序和模型添加适当的预处理和后处理

  4. 如何优化我的应用程序?

    前述步骤中提到的库和模型可以进行优化,以满足内存和处理需求。

    a. ONNX 格式的模型可以转换为 ORT 格式,以优化模型二进制大小、加快初始化速度并降低峰值内存使用。

    b. 通过构建一个只包含对您特定模型支持的自定义包,可以减小 ONNX Runtime 本身的大小。

    c. 调整 ONNX Runtime 推理会话选项,包括尝试不同的执行提供程序


目录