使用 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 後處理的示例。
打包工具
[本節即將推出]