6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OSS LLM をローカルでいろいろ動かしてみる

Last updated at Posted at 2024-09-05

やりたいこと

今まで 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 が表示される。

image.png

チャット領域の左上で使用するモデルを切り替えられる。複数のモデルと同時にチャットもできるので回答を比較したいときに便利。

ということで

OSS の LLM をローカルで実行して、チャット UI で使ってみました。
基本的にコンテナで提供されているので、ローカル環境を汚さずに簡単にここまでできるのは非常にありがたいですね!
ローカルで動かすので動作がすごく重たいイメージを持っていましたが、私の環境ではそこまででした (マシンスペックにもよるでしょうけど)。データプライバシーを気にする場合やファインチューニングしたモデルを使いたい場合は、クラウドサービスではなく自前で環境を用意するのも割とありなのではと感じます。

以上です。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?