🌶️

SLMをブラウザで動かしてみる (WebGPU + Phi-3.5 mini + Intel iGPU)

2024/10/31に公開

結論

まあまあ使えそうな速度で動作する。iGPU大事。
796 tokens in 71.9sec (11.08 tokens/sec)

ただし、2GBぐらいのモデルをダウンロードする必要があるので初回起動時はそれなりの時間がかかる。

PCスペック

  • Intel Core Ultra 7 165H
  • Intel Arc Graphics (Driver: 31.0.101.5333)
  • DRAM 16GB

手順

環境確認

ブラウザからGPUが見えてるか確認のため、開発者ツールのコンソールで以下を入力。

navigator.gpu.requestAdapter()

OKな例
しっかりとvender: "intel"とありますね!

Chrome version: 130.0.6723.70

NGな例
同一PCでもFirefoxだとダメでした。
こちらの通りです。Chromium系は対応が早いですね。
ちなみに、CPUで動作させると推論速度が1/100ぐらいになったので厳しいかと。

Firefox version: 131.0.3

追記:
Advanced設定まわりを全てTrueにしてもダメでした。

ビルド

https://github.com/akutsu-kei/onnxrt-web-phi3.5-igpu

こちらをdevcontainerで開いて、以下のコマンドで起動できます。

npm install
npm run build
npm run dev

モデル情報はこの部分に記載。

https://github.com/akutsu-kei/onnxrt-web-phi3.5-igpu/blob/main/main.js#L7

こちらのモデルですね。

https://huggingface.co/onnx-community/Phi-3.5-mini-instruct-onnx-web

内容的には、以下の公式レポからphi-3.5に向けた変更を入れただけです。内部では、JavaScriptからC++からビルドされたWASMが呼び出されており、そちらでonnxruntimeがphi-3.5 miniを実行するという手続きになっていました。
https://github.com/microsoft/onnxruntime-inference-examples/tree/main/js/chat

気になったこと

GPUが利用中であることをブラウザから通知されなかったが、セキュリティ的な観点で大丈夫なのだろうか? 描画ではなく完全な演算資源としてGPUが利用されるので気づかぬ間にマイニングさせられていたり。。

こんな通知があってもいいのかなー、と思いました。

GPUの設定は一般レベルの権限設定にはなさそうです。
https://support.google.com/chrome/answer/114662?hl=ja&co=GENIE.Platform%3DDesktop#zippy=%2C変更可能な権限の詳細を確認する

最後に

デプロイの手軽さを重視するなら、ブラウザで動かすのはアリかもです。
ただ、iGPUを使う分だけ描画に割けるリソースが減るので画面のカクつきが起こりやすくなります。WebGPUからNPUへアクセスできるようになると、他リソースを消費せずに推論できるようになるので期待したいです。

ヘッドウォータース

Discussion