使用 ONNX Runtime 构建 Web 应用
本文档解释了使用 ONNX Runtime 构建 Web 应用的选项和注意事项。
目录
部署目标的选项
-
浏览器中推理
运行时和模型下载到客户端,推理在浏览器内部进行。在此场景下使用 onnxruntime-web。
-
服务器上推理
浏览器将用户输入发送到服务器,服务器进行推理并获得结果,然后发送回客户端。
使用原生的 ONNX Runtime 以获得最佳性能。
要将 Node.js 用作服务器应用,请在服务器上使用 onnxruntime-node(ONNX Runtime Node.js 绑定)。
-
Electron
Electron 使用前端(基于 chromium,技术上是浏览器核心)和后端(基于 Node.js)。
如果可能,在后端使用 onnxruntime-node 进行推理,这样更快。在前端使用 onnxruntime-web 也是一种选择(出于安全和兼容性考虑)。
-
React Native
React-native 是一个框架,它使用与 reactjs 相同的 API,但在移动端构建的是原生应用而非 Web 应用。应使用 onnxruntime-react-native。
获取模型的选项
你需要了解你的 Web 应用场景,并获取适合该场景的 ONNX 模型。
ONNX 模型可以从 ONNX 模型动物园获取,或从 PyTorch 或 TensorFlow 等其他框架转换而来。
你可以将 ONNX 格式模型转换为 ORT 格式模型,以优化二进制大小、加快初始化速度和降低内存峰值使用量。
你可以执行模型特定的自定义构建以进一步优化二进制大小。
引导你的应用
根据你选择的 Web 框架(例如 vuejs、reactjs、angularjs)引导你的 Web 应用。
如果你已经有一个 Web 应用并且正使用 ONNX Runtime 向其中添加机器学习功能,则可以跳过此步骤。
添加 ONNX Runtime Web 作为依赖项
安装 onnxruntime-web。这些命令行将更新应用的 package.json
文件。
使用 yarn
yarn add onnxruntime-web
使用 npm
npm install onnxruntime-web
在包名后添加“@dev”以使用每夜构建版本(例如:npm install onnxruntime-web@dev)。
在你的代码中使用 onnxruntime-web
-
导入 onnxruntime-web,详见 导入 onnxruntime-web
-
初始化推理会话,详见 InferenceSession.create
会话初始化只需要进行一次。
-
运行会话,详见 session.run
每次有新的用户输入时,都需要运行会话。
更多详情请参考 ONNX Runtime Web API 文档。
预处理和后处理
原始输入通常是字符串(用于 NLP 模型)或图像(用于图像模型)。它们来自多种形式和格式。
字符串输入
-
在 JS/wasm 中使用分词器对其进行预处理以得到数字数据,从数据创建张量,然后将其馈送给 ORT 进行模型推理。
-
使用一个或多个自定义算子来处理字符串。使用自定义算子进行构建。模型可以直接处理字符串张量输入。请参考onnxruntime-extensions库,其中包含一组可能的自定义算子。
图像输入
-
使用 JS/wasm 库预处理数据,并创建张量作为输入以满足模型的要求。请参见 使用 ONNX Runtime Web 进行图像分类教程。
-
修改模型,将预处理作为算子包含在模型内部。模型将期望某种特定的 Web 图像格式(例如来自 canvas 的位图或纹理)。
输出
模型的输出各不相同,大多数都需要自己的后处理代码。请参考上面的教程作为 JavaScript 后处理的示例。
打包工具
[本节内容即将推出]