Ollama と Open WebUI で Docker を利用して、ChatGPT のようなシステムをローカル上で環境構築したメモになります。
目次
Ollamaとは
Ollama (オラマ)は、大規模言語モデル (LLM) をローカル環境で実行できる無料のオープンソースツールです。クラウドに依存せず、自分のコンピュータのローカル環境で LLM を利用できます。11434番ポートを開いて、サーバーが動作します。Ollama だけでもコマンドライン上の操作で LLM は利用できます。
Open WebUIとは
Open WebUI は、ローカル環境で動作する AI ツールで、さまざまな大規模言語モデル (LLM) を操作できるウェブベースのインターフェースになります。ChatGPT によく似た画面になります。
ライセンス
名前 | ライセンス | リンク |
---|---|---|
Ollama | MIT License | https://github.com/ollama/ollama |
Open WebUI | BSD-3-Clause license | https://github.com/open-webui/open-webui |
LLMの名前 | ライセンス |
---|---|
Llama3 | Meta Llama 3 Community License |
Llama-3-ELYZA-JP-8B | Meta Llama 3 Community License |
環境情報
項目 | 情報 |
---|---|
OS | Windows 11 Pro |
CPU | Intel Core Ultra 7 265 |
RAM | 64GB |
GPU | NVIDIA GeForce RTX 4060 Ti(8GB) |
WSL環境 | Ubuntu 24.04 |
Docker のインストール
Docker Desktop はライセンスがややこしいので、WSL(Windows Subsystem for Linux) を利用して、Docker をインストールします。
Docker のインストールは Ubuntu での Docker Engine のインストールに従います。
WSL で利用しやすいように WSL のホームディレクトリに Windows 側での Docker 用のフォルダにアクセスしやすいようにシンボリックリンクを置くと楽かもしれません。
1 |
ln -s /mnt/d/Docker ~/Docker |
上のコマンドはWindows側ではDドライブにあるDockerのフォルダでアクセスして、WSL 側ではホームディレクトリからDockerのディレクトリにアクセスできるようにしています。
Nvidia Container Toolkit のインストール
GPU の設定を行わない場合はここはスキップできます。Docker で GPU を利用するには Nvidia Container Toolkit が必要になります。Nvidia のサイトでのインストール方法に従います。
Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit
インストールの次に行うこととして Running a Sample Workload のページがあります。次のコマンドでDocker 内で GPU が認識されているかを確認できます。
1 |
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi |
docker-compose.ymlの作成と実行
ローカルLLMの使用 - OllamaとOpen WebUIの連携について解説 - Qiitaをもとに docker-compose.yml を作成します。一部書き換えています。
書き換えている要点は
1. open-webui を23000番ポートに変更
2. Llama-3-ELYZA-JP-8B をインストールするためにホストのディレクトリをコンテナがマウント
になります。
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
version: '3.8' services: ollama: image: ollama/ollama container_name: ollama volumes: - ollama:/root/.ollama - ~/Docker/OpenWebUI/OllamaModel:/opt/OllamaModel ports: - "11434:11434" restart: unless-stopped deploy: resources: reservations: devices: - capabilities: [gpu] open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui ports: - "23000:8080" volumes: - open-webui:/app/backend/data extra_hosts: - "host.docker.internal:host-gateway" restart: always volumes: ollama: open-webui: |
docker-compose.yml が作成出来たら、
1 |
docker compose up -d |
で起動します。
Docker Engine のインストールのTipsにありますが、
1 |
sudo usermod -aG docker $USER |
で $USER を書き換えて指定することで Docker の実行から sudo を不必要にできます。
Ollama で Llama3 モデルをインストールと実行
Ollama は Docker 経由で実行することになります。
1 |
docker exec -it ollama ollama run llama3 |
で Ollama が AI と対話するプロンプトができます。初回実行の場合は Llama3 モデルのダウンロードが始まります(約5GB)。会話はヘルプを見てもいいですが、
1 |
/bye |
で終了できます。
Open WebUIにアクセス
初回アクセスはユーザー登録が必要です。ローカル環境での実行なので、適当なものでも大丈夫です。
ログインができたら、Ollama でインストールした Llama3 モデルを利用して会話ができます。ここまででも十分に楽しめる環境になります。
日本語特化の言語モデルを利用
ここでは、ollama create を使ったインストール方法の紹介を長く書きましたが、その途中でもっと簡単なインストール方法に気づきました。
1 |
ollama run hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF |
でインストールできるので、Docker の Ollama だと
1 |
docker exec -it ollama ollama run hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF |
でインストールできます。この方法だと docker-compose.yml でのマウントの記述は必要なくなるかもしれません。
Llama3 だと日本語に対して英語で返したりします。そのため、日本語特化の言語モデルを利用したくなります。Llama-3-ELYZA-JP-8B という言語モデルがありますが、Ollama を利用して、そのままインストールできません。そのため、一度モデルデータをダウンロードし、ollama create でモデルを作成する必要があります。Docker を利用しているとボリュームのマウントでコンテナ側のディレクトリ構造を意識する必要があります。
Llama-3-ELYZA-JP-8B は elyza/Llama-3-ELYZA-JP-8B-GGUF · Hugging Face になります。モデルのダウンロードは
1 |
git clone https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF |
でダウンロードできます。ダウンロードしたら、「よーしパパ、Ollama で Llama-3-ELYZA-JP-8B 動かしちゃうぞー」- Qiita を参考に Modelfile を作成し、最初の From の行はコンテナ側から見たパスで、Llama-3-ELYZA-JP-8B-q4_k_m.gguf を指定します。ここでの例は階層をだいぶ深く作っていますが、もっと単純な階層でもいいと思います。
Modelfile
1 2 3 4 5 6 7 8 9 10 11 12 |
FROM /opt/OllamaModel/Model/Llama-3-ELYZA-JP-8B/Llama-3-ELYZA-JP-8B-GGUF/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" |
モデルの作成のコマンドもコンテナ側から見たパスで Modelfile を指定して実行します。
1 |
docker exec -it ollama ollama create elyza:jp8b -f /opt/OllamaModel/Model/Llama-3-ELYZA-JP-8B/Modelfile |
インストールが完了したら、 Open WebUI にアクセスして、利用できるモデルが増えていることが確認できます。