概要
小型のLLM Bonsai-8BをOpenWebuiで動かすことができた。
背景と目的
以前より、ローカルでLLMを動かして遊んできた。
今回は、
Bonsai-8B
というモデルを試してみる。このモデルは、
- 1ビット量子化前提で作られている
というのが特徴で、パラメータ数が少なく(2,3B)、量子化ビット数が3,4ビットあるものと比較してビット数は小さいがパラメータが多いことで、精度と速度のバランスが良いと評判なので、ぜひ試してみたい。
詳細
0. 環境
- CPU: Core-i5 14400F
- GPU: RTX4060 8GB
- RAM: DDR5-4800 16GB
- Windows11
1. Bonsai-8B セットアップ~起動
まず、以下のサイトからclone。
Windowsのセットアップ方法に従い、以下を実行。8Bのモデルがダウンロードされる。
.\setup.ps1
次に、起動するのだが、Windows向けは、LinuxやMacと異なりスクリプトが用意されていない。bin/cudaというところに、llama-cliやllama-serverというexeファイルが用意されているので、それらを利用する。llama-cli.exeを用いれば、直接チャット画面が現れるが、今回はOpenWebuiから利用するため、以下のようなバッチファイルを作成し、サーバーモードで動作させ、OpenAI 互換 API経由でリクエストを待ち構える状態にする。ポートは8081とした。
cd /d %~dp0 .\bin\cuda\llama-server.exe --model .\models\gguf\8B\Bonsai-8B.gguf --port 8081 --host 0.0.0.0
2. OpenWebui セットアップ~起動
OpenWebuiは、Windows環境ではWSL Linux上でDockerコンテナとして実行することが推奨されているが、Linux(Docker)側からWindows側で待ち構えているAPI(1で起動したもの)にアクセスするための設定周りが面倒なので、Windows側で完結する。すなわち、
python -m venv call venv\Scripts\activate pip install openwebui
インストールが完了したら、以下を実行。ここでは、8085ポートを使用する。
open-webui serve --port 8085
で起動する。Webブラウザで、localhost:8085にアクセスすると、OpenWebuiの画面が出てくる。
3. playwright-cliを用いたツールの作成
Bonsai-8Bは、function calling(Tool calling)に対応している。そのため、OpenWebuiのツールを設定することで、ツールを使用したチャットのやり取りができる。そこで、Webブラウザの操作用ツールを作成して、Bonsai-8Bから呼び出してみたい。
方法としては、
- playwright-cli
を呼び出すPythonスクリプトとする。playwright-cliは、Webブラウザを操作するAPIを提供するplaywrightというフレームワークのCLI版である。CLIを叩くには、Pythonのsubprocessモジュールを使ってコマンドを組み立ててあげるようにすればよい。したがって、以下の例のように、
def open_browser(self) -> str: """ブラウザを起動。""" cli_command = ["playwright-cli", "open", "--headed"] resp = subprocess.run( cli_command, shell=True, check=True, text=True, encoding="utf-8", errors="ignore", capture_output=True, ) return "ブラウザを起動しました."
ツールを実装することで動くはずである。
4. 動作確認
ブラウザを起動、終了、URLへ移動、スナップショット(アクセシビリティツリーを取得)など、基本的なものをいくつか実装し、
https://????/に移動してスナップショットを取得
というようなプロンプトを入力したところ、
うまくツールを呼び出してブラウザ起動し、当該URLへ移動してアクセシビリティツリーを取得することができた。
しかも、トークンの出力速度は 80token/秒 程度となっていて、他の小型といわれるような2,3Bで3,4ビット量子化クラスのLLMに比べてもかなり体感的に速い。そして、プロンプトに対してツール呼び出しが正確に行えている印象である。
したがって、この小さなモデルとツールを組み合わせれば、ストレスなくブラウザの操作ができてしまう、ということがわかった。
まとめと今後の課題
小型LLM Bonsai-8B を OpenWebui + playwright-cli で動かし、Webブラウザを操作できることがわかった。定型的な操作を自動化したり、他にもツールのバリエーションを増やすことでローカルでいろいろな操作に活用してみたい。


