1 ポイント 投稿者 GN⁺ 2023-07-19 | 1件のコメント | WhatsAppで共有
  • 最新版の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件のコメント

 
GN⁺ 2023-07-19
Hacker Newsのコメント
  • MLCチームはすでにStable Diffusionと大規模言語モデルのサポートを実装しています。
  • ブラウザは、Stable Diffusionのような複雑な処理をこなせる水準まで進化しました。
  • Stable Diffusionを使うには、特定のフラグを有効にした最新バージョンのChromeが必要です。
  • Stable Diffusionは、カスタム背景ジェネレーターのような他のWebサイトにも統合されています。
  • CPUバウンドな処理中にメインスレッドが停止するのを防ぐため、Service Workerの利用を検討してみてください。
  • Stable Diffusionのユースケースには、ページを再読み込みせずにリアルタイムで画像を生成することが含まれます。
  • WebGPUチャットボットや、GPUのアイドル時間にビットコインをマイニングするといった将来の応用の可能性があります。
  • WebGPUがFirefoxで利用可能になるまで待っているユーザーもいます。
  • 広告のないインターネットの可能性も提起されています。