SLMをブラウザで動かしてみる (WebGPU + Phi-3.5 mini + Intel iGPU)
結論
まあまあ使えそうな速度で動作する。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にしてもダメでした。
ビルド
こちらをdevcontainerで開いて、以下のコマンドで起動できます。
npm install
npm run build
npm run dev
モデル情報はこの部分に記載。
こちらのモデルですね。
内容的には、以下の公式レポからphi-3.5に向けた変更を入れただけです。内部では、JavaScriptからC++からビルドされたWASMが呼び出されており、そちらでonnxruntimeがphi-3.5 miniを実行するという手続きになっていました。
気になったこと
GPUが利用中であることをブラウザから通知されなかったが、セキュリティ的な観点で大丈夫なのだろうか? 描画ではなく完全な演算資源としてGPUが利用されるので気づかぬ間にマイニングさせられていたり。。
こんな通知があってもいいのかなー、と思いました。
GPUの設定は一般レベルの権限設定にはなさそうです。
最後に
デプロイの手軽さを重視するなら、ブラウザで動かすのはアリかもです。
ただ、iGPUを使う分だけ描画に割けるリソースが減るので画面のカクつきが起こりやすくなります。WebGPUからNPUへアクセスできるようになると、他リソースを消費せずに推論できるようになるので期待したいです。
Discussion