Junkie Work

access: 267606

Dockerを使ってローカルなLLMをインストール


Dockerを使ってローカルなLLMをインストールします。LLMは、NVIDIAのGPUを使って動作させることができます。今回は、OllamaのLlama 3.1 8Bモデルを使って、Open WebUIで動作させます。

前準備

Dockerをインストール

NVIDIA Container Toolkitをインストール

動作場所の作成

Dockerで動作させるための場所を作成します。今回は、~/localai/llm というディレクトリを作成して、そこにファイルを置くことにします。

$ mkdir -p ~/localai/llm

Docker Composeファイル

Docker Composeファイルを作成します。今回は、~/localai/llm/docker-compose.yml というファイルを作成して、以下の内容を記述します。

Open WebUIと、OllamaのLlama 3.1 8Bモデルを使用します。

Open WebUIには、外部ツールやWeb検索などの機能があります。今回は通常のチャットだけを利用するため、環境変数でプラグイン、ツール、Web検索などを無効化します。

外部からアクセスできないローカル環境での利用を想定しているため、WEBUI_AUTH=Falseに設定し、Open WebUIの認証を無効化します。

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama-llama
    restart: always
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
      - ./Modelfile:/models/Modelfile
      - ./entrypoint.sh:/entrypoint.sh
    entrypoint: ["/bin/bash", "/entrypoint.sh"]
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    environment:
      - OLLAMA_HOST=0.0.0.0
      - OLLAMA_FLASH_ATTENTION=true

  open-webui:
    image: openwebui/open-webui:latest
    container_name: open-webui
    restart: always
    ports:
      - "3000:8080"
    volumes:
      - open_webui_data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_AUTH=False
      - ENABLE_PLUGINS=False
      - ENABLE_TOOLS=False
      - ENABLE_FUNCTIONS=False
      - ENABLE_TOOL_SERVERS=False
      - ENABLE_WEB_SEARCH=False
      - ENABLE_RAG_WEB_SEARCH=False
      - DEFAULT_MODEL_METADATA={"capabilities":{"builtin_tools":false}}
    depends_on:
      - ollama

volumes:
  ollama_data:
  open_webui_data:

起動時にLLMを取得するスクリプトを用意

起動時にLLMを取得するスクリプトを用意します。今回は、~/localai/llm/entrypoint.sh というファイルを作成して、以下の内容を記述します。

モデルをダウンロードしたあと、同じモデル名でカスタムモデルを生成してデフォルトの設定を上書きします。

#!/bin/bash

MODEL_NAME="llama3.1:8b"

ollama serve &
echo "Waiting for Ollama server to start..."
until ollama list > /dev/null 2>&1; do
    sleep 1
done

if ! ollama list | grep -q "^${MODEL_NAME}[[:space:]]"; then
    echo "Model $MODEL_NAME not found. Downloading..."
    if ! ollama pull "$MODEL_NAME"; then
        echo "Failed to download model: $MODEL_NAME" >&2
        exit 1
    fi
    echo "Download completed!"
else
    echo "Model $MODEL_NAME is already available."
fi

echo "Creating custom model $MODEL_NAME..."
if ! ollama create "$MODEL_NAME" -f /models/Modelfile; then
    echo "Failed to create model: $MODEL_NAME" >&2
    exit 1
fi

echo "Ollama setup completed. Ready!"
wait

モデル設定ファイルを用意

モデルの設定を記述するファイルを作成します。今回は、~/localai/llm/Modelfileというファイルを作成して、以下の内容を記述します。

FROM llama3.1:8b

PARAMETER num_ctx 16384

SYSTEM """
You are a helpful assistant. You must always respond in natural Japanese.
CRITICAL INSTRUCTIONS:
- Do NOT use any tools, functions, or plugins under any circumstances.
- Do NOT output JSON objects, tool calls, or function call syntax (such as create_task).
- Always provide direct text responses in Japanese.
"""

起動

$ cd ~/localai/llm
$ sudo docker compose up -d

動作確認

ブラウザで http://localhost:3000 にアクセスして、Open WebUIが表示されることを確認します。