🖥️

【2024年2月時点】WebGPUに関する各ブラウザ、OSの挙動が若干違う話

2024/02/03に公開

Web-llmという、webGPUを使ったライブラリで遊んでおり、最近メインPCをWindowsからUbuntuに変えたことで色々と詰まったので、それについてのざっくりとした情報整理を行う。
https://zenn.dev/saldra/articles/c5473bb01c9b15

WebGPUのそもそもの対応

https://caniuse.com/webgpu
Can I useを使うと以下のことがわかる

  • PC以外のブラウザ、つまりスマホは対応していない
  • 最新版のChrome,Edge,Operaではreleaseで対応している
    • ただし、Linuxではフラグの有効化が必要
  • Firefoxではreleaseで対応しているもののフラグ有効化が必要
  • SafariではTechPreviewかつ設定で有効化が必要

基本はこれを抑えておけば大丈夫だが、web-llmではもう少し深堀りが必要になる

WebGPUの詳細の対応について

次に、各ブラウザで https://webgpureport.org/ にアクセスしてみる。
以下のスクショはすべてUbuntuであり、フラグの有効化はすべて終わっている前提。

まずはChromeから。

requestAdapterがfailedでshared workersとservice workersのwebgpu APIがn/aになっている。
次にfirefox(nightly)



adapterはきちんと読み込まれている一方で、WGSL language featuresがなかったり、dedicated,shared,service workersのwebgpu APIがn/aになっている。

これは何がおきているかはmozillaの互換性を見るとわかりやすい。
https://developer.mozilla.org/ja/docs/Web/API/WebGPU_API#ブラウザーの互換性

つまり、Linux端末においては

  • ChromeではGPUやrequestAdapterの対応がまだ
  • firefoxではNightlyでのみ一部分サポート(なのでまだ完全サポートでない)

というややこしい状況になっている。

要するに何が起こったの?

web-llmではwebGPUを使うし、adapterにも対応してないといけない。
そうなるとLinuxにおいて、ChromeはWebGPUは対応してるけどadapterに対応してないからweb-llmでは弾かれるし、firefoxはWebGPuとadapterは対応してるから動くっちゃ動くけど一部分サポートのせいなのか、推論がCPUで動く事態に遭遇する。

まとめ

「ブラウザで挙動統一されるしWebGPUええやん」とタカを括ってると普通に痛い目にあうので気をつけましょう。まぁ「対応してるのはWindowsの最新版ChromeとEdgeだけですよ」と言ってしまうのが一番安泰かも。

Discussion