🇯🇵

ollamaで LLM-jp-13B v2.0 を動かす

2024/05/05に公開

最近 ollama の名前をよく聞くようになったので、自分でも試してみることにしました。
結論として、とてもお手軽に CPU 環境でローカル LLM を動かすことができたので、今後は ollama も積極的に使っていきたいなと思います。

ollama とは?

ローカル LLM を動かすためのライブラリです。

https://ollama.com/

LLM-jp-13B とは?

NII主催の団体 LLM-jp が開発している、日本語に特化したローカル LLM です。
日本では、まだ数の少ない、フルスクラッチで学習された日本語LLM[1]で、寛容な Apache-2.0 で提供されています。

https://www.nii.ac.jp/news/release/2024/0430.html

ollama で LLM-jp-13B v2.0 を動かす

ではさっそく始めていきましょう。

準備: ollama をインストールする

以下のインストーラに従ってアプリケーションを入手できます。

https://ollama.com/download

アプリケーションの指示に従って、CLI 上でも ollama コマンドを使えるようにしておきます。

ステップ1: LLM-jp-13B v2.0 のモデルファイルをダウンロードする

ollama では、著名な英語 LLM (Llama 3 等)はモデルライブラリとして公式にサポートされています。

https://ollama.com/library

なので、そういったモデルを動かしたいだけであれば、ollama run llama3 とするだけでOKです。

一方で、LLM-jp-13B は残念ながらそこまで知名度が高いわけではないので、自分でなんとかする必要があります。ollama は GGUF と呼ばれる形式のファイルであれば受け付けるので、GGUF フォーマットのものを探すことになります。

日本では、mmnga さんという素晴らしい方が、著名な日本語LLMを全て GGUF フォーマットに変換してくれています。感謝🙏

LLM-jp-13B v2.0 についても、以下のリポジトリに GGUF フォーマットのファイル群がまとめられています。

https://huggingface.co/mmnga/llm-jp-13b-instruct-full-ac_001_16x-dolly-ichikara_004_001_single-oasst-oasst2-v2.0-gguf

このリポジトリには、異なるレベルの量子化が施されたファイルがいくつかアップロードされています。なので、お好みのものを選べばよいということになります。
量子化については私も全く知識がないので、ひとまず推奨とされる「Q4_K_M」というレベルの量子化が施されたモデルを選択します。

https://huggingface.co/mmnga/llm-jp-13b-instruct-full-ac_001_16x-dolly-ichikara_004_001_single-oasst-oasst2-v2.0-gguf/blob/main/llm-jp-13b-instruct-full-ac_001_16x-dolly-ichikara_004_001_single-oasst-oasst2-v2.0-Q4_K_M.gguf

このページにある download ボタンを押すと、モデルファイル(8GB程度)のダウンロードが始まります。

ステップ2: Modelfile の作成

モデルファイルのダウンロードが終わったら、同じディレクトリに、Modelfile という名前で以下の中身のファイルを別に作成してください。

Modelfile
FROM ./llm-jp-13b-instruct-full-ac_001_16x-dolly-ichikara_004_001_single-oasst-oasst2-v2.0-Q4_K_M.gguf

PARAMETER temperature 0.7
PARAMETER top_p 0.95
PARAMETER repeat_penalty 1.05
PARAMETER stop "<EOD|LLM-jp>"

TEMPLATE """{{ if .System }}{{ .System }}{{ end }}{{ if .Prompt }}

### 指示:
{{ .Prompt }}{{ end }}

### 応答:
{{ .Response }}<EOD|LLM-jp>"""
SYSTEM """以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"""

Modelfile の書き方は、ドキュメントを参考に行います。

TEMPLATE の部分だけ注意が必要で、モデルのtokenizerのchat_templateを凝視しながら、適切に設定してあげる必要があります。

ステップ3: いざ、LLM-jp-13B v2.0 を動かす!🤗

ここまでくれば、あとは Modelfile からモデルの情報を作成して...

ollama create llm-jp-13b-v2 -f ./Modelfile

動かすだけです!

ollama run llm-jp-13b-v2

参考までに、自分の環境 (Apple M2 Pro) での動作例を張っておきます(GIF変換の問題で遅く見えますが、実際にはもう少し速い速度で出力できました)。

AnyConv com__hoge

ステップ4: ブラウザ上でチャットを楽しむ

ollama と Open WebUI を組み合わせて、ブラウザ上でチャットを楽しむこともできます。

やり方は karaage さんの記事に書かれているとおりです。

https://zenn.dev/karaage0703/articles/c271ca65b91bdb

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
docker run -d -p 3000:8080 --env WEBUI_AUTH=False --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

これで、http://localhost:3000 にアクセスすれば、さきほど ollama create で作成した llm-jp-13b-v2 をブラウザ上で動かせるようになります。

参考

その他のローカル LLM の Tips については、以下の記事に網羅的にまとめられています!

https://note.com/schroneko/n/n8b1a5bbc740b

脚注
  1. 日本語LLMは、フルスクラッチで学習されたモデルと、継続事前学習モデルに大別されます。継続事前学習モデルとは、既存の英語LLMに追加で日本語を学習したモデルのことで、東工大のチームが開発している Swallow などが有名です。 ↩︎

Discussion