- 最新版のChromeで「Experimental WebAssembly」および「Experimental WebAssembly JavaScript Promise Integration (JSPI)」フラグを有効にした状態で、Stable Diffusion WebGPUデモを実行する必要があります。
- デモの各推論ステップには約1分かかり、画像を生成するためにVAEデコーダーを実行するのにさらに約10秒かかります。
- DevToolsを開いたままにすると、デモの速度は約2倍遅くなります。
- デモで使われる UNET モデルはCPUでのみ実行され、ブラウザタブが停止することがありますが、GPUで実行するより10%高速です。
- デモで許容できる結果を得るための最小ステップ数は20です。ただし、デモ目的であれば3ステップで十分です。
- モデルファイルはキャッシュされるため、デモを実行するたびにダウンロードする必要はありません。
- 「protobuf parsing failed」エラーが発生した場合は、DevToolsで Application -> Storage に移動してサイトデータを削除できます。
- 「sbox_fatal_memory_exceeded」エラーが発生した場合は、十分なRAMがないためデモを実行できません。タブまたはブラウザを再読み込みしてみてください。
- デモは、StableDiffusionPipeline を Python から JS に移植し、onnxruntime と emscripten+binaryen にパッチを当てて、4GBを超えるメモリを割り当てて使用できるようにすることで実現しました。
- 現在のデモはマルチスレッドに対応しておらず、1つのCPUコアしか使用しないため低速です。WebAssembly.Memory コンストラクタによる64ビットメモリのサポート不足も制約となっています。
- デモはGPU上で動作しますが、webgpu と onnxruntime は初期段階にあるため、まだ多くの処理が実装されていません。データはJSを介してGPUとCPUの間で継続的に転送されるため、処理速度が遅くなります。より多くの処理がJSカーネルを持つようになれば、デモはさらに高速になるでしょう。
- GitHubで公開されているコードを使って、デモをローカルで実行できます。
- パッチ済みの onnxruntime を使えば、transformers.js で大規模なLLMを実行できますが、メモリは8GBに制限されます。このパッケージを使ってロードできる重みは最大約4GBです。
- 著者は以前に node.js バインディングへGPUアクセラレーションを追加した経験があるため、onnxruntime リポジトリにプルリクエストを送る予定です.
1件のコメント
Hacker Newsのコメント