やりたいこと
今まで OSS の LLM を触っていないなと気づいてローカルでいろいろやってみようと思い、動かし方など調べたので記事にしてみます。今回は GPU を使わず CPU のみで実行、かつコンテナ上で実行します。
環境
OS: macOS Sonoma (14.3)
CPU: M3 Pro
メモリ: 36GB
Windows の方は WSL で実行できると思います
使用するツール
- Docker
-
docker
コマンドを実行できれば OK
-
モデルを実行させるのにある程度メモリが必要なので、メモリの割り当てをある程度大きくしておくのが無難です。Llama3.1 だと約6GB必要です。
実行
Ollama
LLM を動作させることのできる、Ollama のコンテナを以下コマンドで準備する。
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
上記で起動したコンテナ上で、ollama
コマンドが使えるようになる。
今回は CPU のみで実行するので上記コマンドだが、GPU を使いたい場合は以下を参考。
Model
Llama3
Llama3 を使ってみる。
docker exec -it ollama ollama run llama3
モデルのダウンロードが始まるのでしばらく待つ。
ダウンロードが完了すると >>> Send a message (/? for help)
というプロンプトが表示されるので、自由にプロンプトを記入する。PC のスペックによって待ち時間は変わるがしばらくすると、回答が返ってくる!
>>> Hello
Hello! It's nice to meet you. Is there something I can help you with, or would you like to chat?
チャットを終了するときは、/bye
と入力する。
Ollama の Library にあるモデルは上記の方法で簡単に実行できる。
ELYZA
詳しくは以下の記事を参照。ELYZA 社が llama3 をベースに開発した日本語特化したモデル。
ELYZA は Ollama の Library にないので、自前で準備する必要がある。
まずは、起動してある Ollma のコンテナでシェルを実行する (終了するときは exit
)。
docker exec -it ollama /bin/bash # 好きなシェルで OK
モデルをダウンロードする。
curl
コマンドがインストールされていない場合は、apt
などでインストールしてください
mkdir models && cd models
mkdir Llama-3-ELYZA-JP-8B && cd Llama-3-ELYZA-JP-8B
curl -OL https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/resolve/main/Llama-3-ELYZA-JP-8B-q4_k_m.gguf
ダウンロードしたモデルと同じディレクトリに、以下の内容で Modelfile を作成する。
FROM ./Llama-3-ELYZA-JP-8B-q4_k_m.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"
最後に Ollama モデルを作成する。
ollama create elyza:jp8b -f Modelfile
これで準備は完了したので実行してみる。
ollama run elyza:jp8b
>>> こんにちは
こんにちは!どうぞよろしくお願いします。
チャット UI で動かしてみる
Ollama 対応の Web UI があるので、それを使う。
こちらもコンテナ上で実行する。
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
コンテナを起動したら http://localhost:3000 にアクセス。サインイン画面が表示されるので指示に従ってサインインすると ChatGPT ライクな UI が表示される。
チャット領域の左上で使用するモデルを切り替えられる。複数のモデルと同時にチャットもできるので回答を比較したいときに便利。
ということで
OSS の LLM をローカルで実行して、チャット UI で使ってみました。
基本的にコンテナで提供されているので、ローカル環境を汚さずに簡単にここまでできるのは非常にありがたいですね!
ローカルで動かすので動作がすごく重たいイメージを持っていましたが、私の環境ではそこまででした (マシンスペックにもよるでしょうけど)。データプライバシーを気にする場合やファインチューニングしたモデルを使いたい場合は、クラウドサービスではなく自前で環境を用意するのも割とありなのではと感じます。
以上です。