ONNX Runtime Webのデプロイ
ONNX Runtime Webのデプロイ
Section titled “ONNX Runtime Webのデプロイ”このドキュメントでは、本番環境でONNX Runtime Webをデプロイする方法についてのガイダンスを提供します。
- TOC
本番環境でONNX Runtime Webをデプロイする場合、以下のアセットが必要です:
-
JavaScriptコードバンドル: アプリケーションコードを含み、場合によってはONNX Runtime Web JavaScriptコードも含むJavaScriptコードバンドル(アプリケーションのビルド方法による)。
-
WebAssemblyバイナリ: ONNX Runtime WebライブラリのWebAssemblyバイナリファイル。
-
モデルファイル: ブラウザで実行したいONNXモデルファイル。
JavaScriptコードバンドル
Section titled “JavaScriptコードバンドル”JavaScriptコードバンドルは通常、Webpack、Rollup、またはESBuildなどのバンドラーによって生成された、アプリケーションコードを含むミニファイされたJavaScriptファイルです。バンドラーの構成によっては、ONNX Runtime Web JavaScriptコードがバンドルに含まれる場合と含まれない場合があります(外部依存関係として指定されている場合)。
条件付きインポート
Section titled “条件付きインポート”JavaScriptコードバンドルのサイズを減らすために、Conditional Importingを使用して、ONNX Runtime Webライブラリの必要な部分のみをインポートできます。例えば、WebAssembly実行プロバイダーのみを使用する場合、onnxruntime-web/wasmをインポートすることで、JavaScriptコードバンドルのサイズを減らすことができます。
ワーカーの読み込み
Section titled “ワーカーの読み込み”ONNX Runtime Webには、実行時に読み込まれる2つのワーカーがあります:
- proxy機能用のweb worker。ONNX Runtime Web JavaScriptコードは、proxy機能のweb workerのエントリとして読み込まれます。
- WebAssemblyマルチスレッディング機能用のweb worker。Emscripten生成JavaScriptファイルは、WebAssemblyマルチスレッディング機能のweb workerのエントリとして読み込まれます。
同じオリジン環境でデプロイする場合、ワーカーはスクリプトURLから直接読み込まれます。これにより、ワーカーはContent Security Policy (CSP)制限環境で読み込めるようになります。クロスオリジン環境でデプロイする場合、例えばCDNからワーカーを読み込む場合、同じオリジンポリシーによりワーカーはスクリプトURLから直接読み込めません。この場合、fetchが実行され、ワーカーはfetchの応答から作成されたオブジェクトURLで読み込まれます。
WebAssemblyバイナリ
Section titled “WebAssemblyバイナリ”標準ONNX Runtime Webライブラリには、以下のWebAssemblyバイナリファイルが含まれます:
| ファイル | SIMD | マルチスレッディング | JSEP | Training |
|---|---|---|---|---|
ort-wasm-simd-threaded.wasm | ✔️ | ✔️ | ❌ | ❌ |
ort-wasm-simd-threaded.jsep.wasm | ✔️ | ✔️ | ✔️ | ❌ |
ort-training-wasm-simd-threaded.wasm | ✔️ | ✔️ | ❌ | ✔️ |
列は、WebAssemblyアーティファクトで機能がサポートされているかどうかを示します。
- SIMD: Single Instruction, Multiple Data (SIMD)機能がサポートされているかどうか。
- マルチスレッディング: WebAssemblyマルチスレッディング機能がサポートされているかどうか。
- JSEP: JavaScript Execution Provider (JSEP)機能が有効かどうか。この機能はWebGPUおよびWebNN実行プロバイダーを駆動します。
- Training: トレーニング機能が有効かどうか。
本番環境でONNX Runtime Webをデプロイする場合、アプリケーションに含めるWebAssemblyバイナリファイルを考慮する必要があります。考慮事項:
- トレーニング機能を使用する場合、
ort-training-wasm-simd-threaded.wasmファイルが使用されます。 - WebGPUまたはWebNN実行プロバイダーを使用する場合、
ort-wasm-simd-threaded.jsep.wasmファイルが使用されます。 - それ以外の場合、
ort-wasm-simd-threaded.wasmファイルが使用されます。
WebAssemblyバイナリファイルが正しく提供されていることを確認する
Section titled “WebAssemblyバイナリファイルが正しく提供されていることを確認する”サーバーでWebAssemblyバイナリファイルが正しく提供されていることを確認する必要があります。アプリケーションのビルド時に必要なWebAssemblyバイナリファイルをコピーしていない場合、またはWebAssemblyバイナリファイルが期待されるパスにない場合、ONNX Runtime Webは初期化に失敗します。
WebAssemblyファイルパスのオーバーライド
Section titled “WebAssemblyファイルパスのオーバーライド”ONNX Runtime Webは、JavaScriptコードバンドルの相対パスを使用してWebAssemblyバイナリファイルを検索します。WebAssemblyバイナリファイルがJavaScriptコードバンドルと同じディレクトリにない場合、ort.env.wasm.wasmPathsの値を設定することでファイルパスをオーバーライドできます。
ONNX Runtime Webのリリースバージョンを使用している場合、ort.env.wasm.wasmPathsをjsdelivrやunpkgなどのパブリックCDNへの絶対URLに設定することもできます:
// 最新のdevバージョンのjsdelivr CDNにWebAssemblyバイナリファイルパスを設定ort.env.wasm.wasmPaths = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@dev/dist/';
// 最新のdevバージョンのunpkg CDNにWebAssemblyバイナリファイルパスを設定ort.env.wasm.wasmPaths = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@dev/dist/';詳細についてはAPI reference: env.wasm.wasmPathsを参照してください。
モデルファイル
Section titled “モデルファイル”ONNXモデルファイルが大きく、ダウンロードに時間がかかる場合、ページがリフレッシュされるたびにモデルを読み込まないように、IndexedDBを使用してモデルファイルをキャッシュすることを検討できます。
モデルに外部データが含まれている場合、外部データ情報をONNX Runtime Webに渡す必要があります。詳細については外部データを参照してください。
ファイルサイズの考慮事項
Section titled “ファイルサイズの考慮事項”アーティファクトのサイズは、本番環境でONNX Runtime Webをデプロイする際に考慮すべき重要な要素です。ファイルサイズを減らすことで、アプリケーションの読み込み時間を改善し、クライアントデバイスのメモリ消費を減らすことができます。
デプロイサイズを減らすために、以下のオプションを検討できます:
- Conditional Importingを使用して、ONNX Runtime Webライブラリの必要な部分のみをインポートします。
- 必要なWebAssemblyバイナリのみを提供するか、
ort.env.wasm.wasmPathsを使用してWebAssemblyバイナリファイルパスをパブリックCDNに設定します。
アーティファクトのサイズを最終的に制御したい場合、ONNX Runtime Webのカスタムビルドを実行することもできます。
カスタムビルド
Section titled “カスタムビルド”ONNX Runtime Webのカスタムビルドを使用することで、モデルが必要とするカーネルのみでONNX Runtime Webをビルドできます。これにより、WebAssemblyバイナリファイルのサイズを大幅に減らすことができます。ただし、手順はより複雑で、ONNX Runtime Webビルドシステムの知識が必要です。
この部分の内容は作成中です。
セキュリティの考慮事項
Section titled “セキュリティの考慮事項”セキュアコンテキスト
Section titled “セキュアコンテキスト”WebGPUはセキュアコンテキストでのみアクセス可能です。簡単に言うと、HTTPSを使用して読み込まれたページ、またはlocalhost/127.0.0.1からのHTTPを使用したページは、セキュアコンテキストと見なされます。
詳細についてはSecure ContextとWebGPU: Troubleshooting tips and fixesを参照してください。
Content Security Policy (CSP)制限環境
Section titled “Content Security Policy (CSP)制限環境”ONNX Runtime Web v1.19以降、WebAssemblyバイナリファイルとワーカーはCSP制限環境で読み込めます。動作させるために必要なアーティファクトを提供する必要があります。