mcpField
O
ollama-stack

ollama-stack

github.com/bagelholeクラウド・DevOps1.2k343 回インストール23 週間前に更新
リポジトリ

ollama-stack について

ollama-stackは、OllamaによるローカルLLM推論環境を構築するスキルです。オフラインやプライバシー重視の開発、個人のハードウェアでのモデル実行に向けて、導入から運用までを扱います。

主な機能

  1. 01ローカルOllama推論サーバーの構築
  2. 02APIやSDK経由でのモデル呼び出し
  3. 03カスタムプロンプト付きモデルの作成
  4. 04GPUと並列処理設定の調整
  5. 05モデルの監視と問題の調査

活用シーン

  1. 01オフライン開発用LLM環境の構築
  2. 02チーム共有の推論エンドポイント提供
  3. 03個人のハードウェアでのモデル実行
  4. 04クラウドAPI利用前のローカル検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill ollama-stack

インストール後、Claude Code で/ollama-stackを入力して読み込まれたか確認します。

詳細

Ollama スタック

オフラインでプライバシーを重視するワークフロー向けに、ローカル LLM スタックをデプロイします。

このスキルを使用する場面

次の場合にこのスキルを使用します:

  • 開発向けにプライベート/ローカル LLM 推論をセットアップする
  • エアギャップ環境の AI 環境を構築する
  • 個人用ハードウェア(Mac、Linux、GPU 搭載の Windows)でモデルを実行する
  • チームで共有する推論エンドポイントを作成する
  • クラウド LLM API の利用を決める前にプロトタイプを作成する

前提条件

  • 8 GB 以上の RAM(7B 以上のモデルには 16 GB 以上を推奨)
  • GPU アクセラレーションの場合:6 GB 以上の VRAM を搭載した NVIDIA GPU、または Apple Silicon Mac
  • Docker(コンテナ化されたデプロイの場合)
  • モデル保存用に 20 GB 以上のディスク容量

クイックスタート

# Install Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Start the server
ollama serve

# Pull and run a model
ollama pull llama3.1:8b
ollama run llama3.1:8b "Explain Kubernetes pods in one paragraph"

# List available models
ollama list

# Pull specific quantization
ollama pull llama3.1:8b-instruct-q4_K_M

モデル選択ガイド

モデルサイズVRAM最適な用途
llama3.1:8b4.7 GB6 GB一般的なチャット、コーディング
llama3.1:70b40 GB48 GB複雑な推論
codellama:13b7.4 GB10 GBコード生成
mistral:7b4.1 GB6 GB高速な一般タスク
mixtral:8x7b26 GB32 GB高品質な MoE
nomic-embed-text274 MB1 GBRAG 用の埋め込み
llava:13b8 GB10 GB画像認識+テキスト
deepseek-coder-v2:16b9 GB12 GBコード生成
qwen2.5:14b9 GB12 GB多言語、推論

Docker Compose — フルスタック

# docker-compose.yml
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
      - OLLAMA_NUM_PARALLEL=4
      - OLLAMA_MAX_LOADED_MODELS=2
      - OLLAMA_FLASH_ATTENTION=1
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
      interval: 30s
      timeout: 10s
      retries: 3

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - "3000:8080"
    volumes:
      - webui_data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_AUTH=true
      - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY:-change-me-in-production}
      - DEFAULT_MODELS=llama3.1:8b
    depends_on:
      ollama:
        condition: service_healthy

  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: litellm
    restart: unless-stopped
    ports:
      - "4000:4000"
    volumes:
      - ./litellm-config.yaml:/app/config.yaml
    command: ["--config", "/app/config.yaml"]
    depends_on:
      ollama:
        condition: service_healthy

volumes:
  ollama_data:
  webui_data:
LiteLLM プロキシ設定
# litellm-config.yaml
model_list:
  - model_name: llama3
    litellm_params:
      model: ollama/llama3.1:8b
      api_base: http://ollama:11434
  - model_name: codellama
    litellm_params:
      model: ollama/codellama:13b
      api_base: http://ollama:11434
  - model_name: embeddings
    litellm_params:
      model: ollama/nomic-embed-text
      api_base: http://ollama:11434

general_settings:
  master_key: sk-local-dev-key
  max_budget: 0  # unlimited for local

API の使用方法

Ollama は OpenAI 互換の API を公開します:

# Chat completion
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.1:8b",
    "messages": [{"role": "user", "content": "Hello"}],
    "stream": false
  }'

# Embeddings
curl http://localhost:11434/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nomic-embed-text",
    "input": "The quick brown fox"
  }'

# List models
curl http://localhost:11434/api/tags
Python クライアント
# pip install ollama
import ollama

# Chat
response = ollama.chat(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "Explain Docker in 3 sentences"}],
)
print(response["message"]["content"])

# Streaming
for chunk in ollama.chat(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "Write a haiku about containers"}],
    stream=True,
):
    print(chunk["message"]["content"], end="", flush=True)

# Embeddings
result = ollama.embed(model="nomic-embed-text", input="Hello world")
print(f"Embedding dimensions: {len(result['embeddings'][0])}")
OpenAI SDK との互換性
from openai import OpenAI

client = OpenAI(base_url="http://localhost:11434/v1", api_key="unused")

response = client.chat.completions.create(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)

カスタム Modelfile

カスタムのシステムプロンプトとパラメーターを使って、特化したモデルを作成します:

# Modelfile.devops-assistant
FROM llama3.1:8b

SYSTEM """You are a DevOps expert assistant. You provide concise, production-ready
advice about infrastructure, CI/CD, containers, and cloud services.
Always include relevant commands and config examples."""

PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
PARAMETER repeat_penalty 1.1
# Build and use custom model
ollama create devops-assistant -f Modelfile.devops-assistant
ollama run devops-assistant "Set up a GitHub Actions workflow for Docker builds"

GPU の設定

NVIDIA
# Verify GPU access
nvidia-smi
ollama run llama3.1:8b --verbose  # Shows GPU layers loaded

# Environment tuning
export OLLAMA_NUM_PARALLEL=4          # Concurrent requests
export OLLAMA_MAX_LOADED_MODELS=2     # Models in VRAM
export OLLAMA_FLASH_ATTENTION=1       # Faster attention
export CUDA_VISIBLE_DEVICES=0,1       # Multi-GPU
Apple Silicon
# Metal acceleration is automatic on macOS
# Verify with:
ollama run llama3.1:8b --verbose
# Look for: "metal" in the output

# Optimize for unified memory
export OLLAMA_NUM_PARALLEL=2          # Keep memory headroom
export OLLAMA_MAX_LOADED_MODELS=1     # One model at a time on 16GB

モニタリング

# Check running models and memory usage
curl http://localhost:11434/api/ps

# Prometheus metrics (if enabled)
curl http://localhost:11434/metrics

# Quick health check script
#!/bin/bash
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:11434/api/tags)
if [ "$response" = "200" ]; then
    echo "Ollama is healthy"
    curl -s http://localhost:11434/api/ps | python3 -m json.tool
else
    echo "Ollama is down (HTTP $response)"
    exit 1
fi

Systemd サービス

# /etc/systemd/system/ollama.service
[Unit]
Description=Ollama LLM Server
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_NUM_PARALLEL=4"
Environment="OLLAMA_FLASH_ATTENTION=1"
LimitNOFILE=65535

[Install]
WantedBy=default.target
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama
sudo systemctl daemon-reload
sudo systemctl enable --now ollama
sudo systemctl status ollama

セキュリティ

  • 本番環境では 127.0.0.1 にバインドし(デフォルト)、リモートアクセスにはリバースプロキシを使用します
  • Open WebUI で WEBUI_AUTH=true を設定します
  • リモートアクセスには TLS 対応の nginx を使用します:
server {
    listen 443 ssl;
    server_name llm.internal.example.com;
    ssl_certificate /etc/ssl/certs/llm.pem;
    ssl_certificate_key /etc/ssl/private/llm.key;

    location / {
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
        proxy_buffering off;              # Required for streaming
        proxy_read_timeout 600s;          # Long model responses
        allow 10.0.0.0/8;
        deny all;
    }
}

トラブルシューティング

問題解決方法
モデルの動作が遅すぎるより小さい量子化(q4_K_M)を使用し、フラッシュアテンションを有効にします
メモリ不足num_ctx を減らし、より小さいモデルを使用し、OLLAMA_MAX_LOADED_MODELS=1 を設定します
GPU が検出されないnvidia-smi を確認し、CUDA ドライバーを再インストールして、Docker の GPU ランタイムを確認します
接続が拒否されるOLLAMA_HOST の設定を確認し、ファイアウォールのルールを確認します
モデルのダウンロードに失敗するディスク容量を確認し、自己署名レジストリの場合は ollama pull --insecure を使用して再試行します

関連スキル

コメント