web-llmコトハジメ(一部失敗あり)
はじめに
先日、「JavaScriptでLLMを弄ってみる【transformers.js】」という記事を上げた。
よくよく考えたのだが、transformersではなくwasmで動かしたほうが普通に良いのでは、と思い立ち、ローカルLLMに向き合う会にて発言したところ「MLCベースのweb-llmはどうか」と紹介されたので試してみる。
「ブラウザ上で動いて、WebGPUで動かすことができる」というのが売りらしい。CPU推論はできなさそう。
A WebGPU-compatible browser and a local GPU are needed to run WebLLM.
https://llm.mlc.ai/docs/deploy/javascript.html
環境構築と推論
Exampleを動かしたら環境構築完了とする。
git clone https://github.com/mlc-ai/web-llm
cd web-llm/examples/get-started
npm install
npm start
Chromeで開くと推論できていることがわかる。
ソースコードを確認すると「vicuna-v1-7b-q4f32_0」らしい。使用VRAMは9.4。
速度はこんな感じ。それなりに速い。
WebGPUを使用しているのでChromeでないと動かない。
モデルの変換(失敗)
任意のモデルで推論したい場合はMLCに対応したモデルに変換する必要がある。ここにやり方が書いてある。
順番としては- TVM Unity Compilerの環境構築
- MLC-LLMの環境構築
- 変換
ただし、Windows 11だと現状うまくいかない。
TVM Unity Compilerの環境構築時にtvm.dllが存在しているのに以下エラーが発生する。
FileNotFoundError: Could not find module 'D:\dev\mlc-llm\.venv\Lib\site-packages\tvm\tvm.dll' (or one of its dependencies). Try using the full path with constructor syntax.
Issueを探してみたところ、libzstd.dllを別途でダウンロードしtvm.dllとして配置すると良いとのことだったが、先月あたりから再発しているらしい。
function 'TVMGetLastError' not found
のエラー発生に関するIssueはまだ解決していない。
モデルの変換(リベンジ)
以下記事でWSLを使うことでモデルの変換に成功した。
Discussion