通勤中にぼ~っとエックス(旧ツイッター)を眺めていると、gemma-2ベースの新しい日本語特化モデル「EZO-Common-9B-gemma-2-it」がHugging Faceにアップされて、9Bといういい感じのちっちゃいサイズなのに性能がめちゃくちゃいいらしい、というポストが流れてきた(というかいつも@umiyuki_aiさんのポストを見ているだけなのだが…)。じゃあ週末に動かしてみよっかな~、とか考えていたら、OllamaとOpen WebUIのバージョンが自分のローカル環境からかなりバージョンが上がっていることに気づき、ついでにバージョンも上げてみることにした。
バージョンアップをする
嘘です。Docker環境でバージョンを上げる方法がマジでわからなかったので、イメージ・コンテナを削除して、もう一度入れなおすというハイパー力技で乗り切りました。削除のほうはWindowsのDocker DesktopのGUIから削除ボタンをポチポチするだけです。
Ollamaの入れ直し
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
ローカルにollamaイメージがない場合は自動でDocker Hubから最新バージョンをpullしてくれるみたいです。イメージのpullからコンテナの起動まで1コマンドでできる。
Open WebUIの入れ直し
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
こちらも同じくイメージのpullとコンテナの起動を1コマンドで実行している。OllamaもOpen WebUIも、マウントしているパスは前回と同じなので、前に使ったモデルもろもろは残っているみたいだ。
EZO-Common-9B-gemma-2-it-GGUFを動かす
ブラウザにポート3000のアドレスを入れてOpen WebUIを起動する。
http://localhost:3000
本来GGUF形式のモデルをOllamaで動かす場合、ModelFileを作ってollamaのcreateコマンドを使わなければならないが、まあまあ新しいバージョンのOllama/Open WebUIだとブラウザから直接操作することができる。マジかよ~便利すぎるだろ~~~~。(コマンドでやる場合、自分はここのページを参考にさせてもらいました。ありがとうございます!)
そういうわけでブラウザから画面左下の管理者パネルをクリック。
管理者パネルのタブを「設定」に切り替えて、左メニューから「モデル」を選ぶ。ちょっと下のほうに「実験的」という項目があって右のほうにちっちゃく「表示」というリンクがあるのでクリックする。するとGGUFアップロード機能が展開されるので、ここからローカルにDLしているGGUFファイルをOllamaに渡すことができる。「ファイルモード」の部分をクリックするとHugging FaceのGGUFファイルがUpされているURLを入れるURLモードに切り替わるが、自分は先にDL済みファイルがあったのでファイルモードを選んだ。URLモードも使えるならマジでらくちんそう。
ファイル選択後の画面。アップロードボタンが追加されて、従来のcreateコマンドの時に使っていたModelFile相当の設定をすると思われるテキストボックスが表示される。とりあえずデフォルトのままアップロードのアイコンをクリックする。5分くらい待つとアップロードが完了する。
アップロード後、ブラウザのモデル選択肢にEZO-Common-9B-gemma-2-it-GGUFが追加されている。自分のPCはメモリが16GBで、う~んぎりぎり動くかなどうかな~ってことでEZO-Common-9B-gemma-2-it.Q4_K_M.ggufを選んでいました。なのですが、実行すると普通に失敗しました。
Docker Desktopのコンソールをみると9.4GB必要なのに7.7GBしかないよ~っということで、メモリ足りないエラーになっているので、ブラウザのほうでコンテキストサイズを小さくしてあげます。画面右上にあるスライダーのマークをクリックすると設定が出てきます。この中の「コンテキストの長さ」を、メモリが収まるいい感じのサイズまで小さくしてあげます。自分の環境だと512まで小さくする必要がありました。PCにメモリもりもり積んでいる人はあんま調整いらなさそう。
コンテキストの長さを調整したあとにもう一度実行すると、今度は生成できた。
比較のために素のGemma2も動かしてみた。
スコア測定とかは自分はぜんぜんやっていないので、まだふたつのモデルの違いがいまいちわかっていないが、どちらにせよ9BサイズのローカルLLMでこれだけの日本語能力を持っているのはありがたすぎるね…。Open WebUIとの連携も強化されていってて、ますます便利になるな~っと思いました。でもメモリの少ない環境だと、2つぶんのコンテナを動かすとマジでメモリ食いまくるので、1つのコンテナに統合するとか、ブラウザなし版で動かしてみるとか、なんかは必要そうな気がするな…。次はOpen WebUIが提供しているOllama/Open WebUIが1セットになっているDockerイメージを試してみようかな~。
っというか、最近ずっと表面をなぞるだけのやってみたまみれになっている…いるが…! 実際に毎週毎週新しい面白そうな話が出てくるから、試してみたくなっちゃうんだ! 仕方ない! 新しい話が止まったら、いままで遊んできたものを使ってなんかかんやコネコネしたいね。