コンテンツにスキップ

ONNX Runtime Webのデプロイ

このドキュメントでは、本番環境でONNX Runtime Webをデプロイする方法についてのガイダンスを提供します。

  • TOC

本番環境でONNX Runtime Webをデプロイする場合、以下のアセットが必要です:

  • JavaScriptコードバンドル: アプリケーションコードを含み、場合によってはONNX Runtime Web JavaScriptコードも含むJavaScriptコードバンドル(アプリケーションのビルド方法による)。

  • WebAssemblyバイナリ: ONNX Runtime WebライブラリのWebAssemblyバイナリファイル。

  • モデルファイル: ブラウザで実行したいONNXモデルファイル。

JavaScriptコードバンドルは通常、Webpack、Rollup、またはESBuildなどのバンドラーによって生成された、アプリケーションコードを含むミニファイされたJavaScriptファイルです。バンドラーの構成によっては、ONNX Runtime Web JavaScriptコードがバンドルに含まれる場合と含まれない場合があります(外部依存関係として指定されている場合)。

JavaScriptコードバンドルのサイズを減らすために、Conditional Importingを使用して、ONNX Runtime Webライブラリの必要な部分のみをインポートできます。例えば、WebAssembly実行プロバイダーのみを使用する場合、onnxruntime-web/wasmをインポートすることで、JavaScriptコードバンドルのサイズを減らすことができます。

ONNX Runtime Webには、実行時に読み込まれる2つのワーカーがあります:

  1. proxy機能用のweb worker。ONNX Runtime Web JavaScriptコードは、proxy機能のweb workerのエントリとして読み込まれます。
  2. WebAssemblyマルチスレッディング機能用のweb worker。Emscripten生成JavaScriptファイルは、WebAssemblyマルチスレッディング機能のweb workerのエントリとして読み込まれます。

同じオリジン環境でデプロイする場合、ワーカーはスクリプトURLから直接読み込まれます。これにより、ワーカーはContent Security Policy (CSP)制限環境で読み込めるようになります。クロスオリジン環境でデプロイする場合、例えばCDNからワーカーを読み込む場合、同じオリジンポリシーによりワーカーはスクリプトURLから直接読み込めません。この場合、fetchが実行され、ワーカーはfetchの応答から作成されたオブジェクトURLで読み込まれます。

標準ONNX Runtime Webライブラリには、以下のWebAssemblyバイナリファイルが含まれます:

ファイルSIMDマルチスレッディングJSEPTraining
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を参照してください。

ONNXモデルファイルが大きく、ダウンロードに時間がかかる場合、ページがリフレッシュされるたびにモデルを読み込まないように、IndexedDBを使用してモデルファイルをキャッシュすることを検討できます。

モデルに外部データが含まれている場合、外部データ情報をONNX Runtime Webに渡す必要があります。詳細については外部データを参照してください。

アーティファクトのサイズは、本番環境でONNX Runtime Webをデプロイする際に考慮すべき重要な要素です。ファイルサイズを減らすことで、アプリケーションの読み込み時間を改善し、クライアントデバイスのメモリ消費を減らすことができます。

デプロイサイズを減らすために、以下のオプションを検討できます:

  • Conditional Importingを使用して、ONNX Runtime Webライブラリの必要な部分のみをインポートします。
  • 必要なWebAssemblyバイナリのみを提供するか、ort.env.wasm.wasmPathsを使用してWebAssemblyバイナリファイルパスをパブリックCDNに設定します。

アーティファクトのサイズを最終的に制御したい場合、ONNX Runtime Webのカスタムビルドを実行することもできます。

ONNX Runtime Webのカスタムビルドを使用することで、モデルが必要とするカーネルのみでONNX Runtime Webをビルドできます。これにより、WebAssemblyバイナリファイルのサイズを大幅に減らすことができます。ただし、手順はより複雑で、ONNX Runtime Webビルドシステムの知識が必要です。

この部分の内容は作成中です。

WebGPUはセキュアコンテキストでのみアクセス可能です。簡単に言うと、HTTPSを使用して読み込まれたページ、またはlocalhost/127.0.0.1からのHTTPを使用したページは、セキュアコンテキストと見なされます。

詳細についてはSecure ContextWebGPU: Troubleshooting tips and fixesを参照してください。

ONNX Runtime Web v1.19以降、WebAssemblyバイナリファイルとワーカーはCSP制限環境で読み込めます。動作させるために必要なアーティファクトを提供する必要があります。