📚

web-llmコトハジメ(一部失敗あり)

2023/10/29に公開

はじめに

先日、「JavaScriptでLLMを弄ってみる【transformers.js】」という記事を上げた。
https://zenn.dev/saldra/articles/44bc401e773a62

よくよく考えたのだが、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に対応したモデルに変換する必要がある。ここにやり方が書いてある。
https://llm.mlc.ai/docs/compilation/compile_models.html
順番としては

  1. TVM Unity Compilerの環境構築
  2. MLC-LLMの環境構築
  3. 変換

ただし、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として配置すると良いとのことだったが、先月あたりから再発しているらしい。
https://github.com/mlc-ai/mlc-llm/issues/875
https://github.com/simonw/llm-mlc/issues/15
function 'TVMGetLastError' not foundのエラー発生に関するIssueはまだ解決していない。

モデルの変換(リベンジ)

以下記事でWSLを使うことでモデルの変換に成功した。
https://zenn.dev/saldra/articles/356f470e730d1c

Discussion