ローカル大規模言語模型の実行環境構築:Ollama 活用ガイド

Ollama の概要

Ollama は、Go 言語で構築されたオープンソースのフレームワークであり、ユーザーが自身のマシン上で大規模言語模型(LLM)を容易に実行できるように設計されています。Windows、Linux、macOS といった主要なオペレーティングシステムに対応しており、シンプルなコマンド操作だけでモデルのデプロイから推論までが可能です。また、モデルの量子化(quantization)機能をサポートしているため、ハードウェアのリソース要件を抑えつつ、高性能な推論をローカル環境で実現できます。

主要な开源モデルが幅広くサポートされており、ハードウェアスペックや用途に応じて最適なモデルを選択できます。

  • DeepSeek-R1: 中国の深度求索による模型
  • Qwen 2.5: 阿里巴巴(アリババ)グループの模型
  • Llama 3.3: Meta 社による模型
  • Phi 4: Microsoft 社の模型
  • Mistral: 仏 Mistral AI 社の模型
  • Gemma 2: Google 社の模型
  • LLaVA: 画像認識も可能なマルチモーダル模型

インストール手順

Windows 環境

公式ウェブサイトからインストーラー(OllamaSetup.exe)を取得し、実行してください。ウィザードに従ってインストールを完了させます。インストール先ディレクトリを変更したい場合は、コマンドラインから以下のように実行します。

OllamaSetup.exe /DIR="e:\tools\ollama"

Linux 環境

スクリプトを利用した自動インストールが推奨されます。

# 標準インストール
curl -fsSL https://ollama.com/install.sh | sh

# 特定バージョンの指定
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.7 sh

あるいは、バイナリを直接ダウンロードして展開する方法もあります。

curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama.tar.gz
sudo tar -C /usr -xzf ollama.tar.gz

動作確認と基本コマンド

インストール後、ターミナルでバージョン情報を表示させて正常動作を確認します。

ollama --version

Ollama の CLI は Docker の操作感に似ており、以下のサブコマンドでモデルを管理します。

  • ollama run <model>: モデルを起動し対話開始
  • ollama list (または ls): ローカルにあるモデル一覧
  • ollama ps: 現在ロード中のモデル確認
  • ollama stop <model>: 実行中のモデルを停止
  • ollama serve (または start): サーバープロセスの起動
  • ollama pull <model>: リポジトリからモデルをダウンロード
  • ollama rm <model>: モデルの削除
  • ollama create <name>: Modelfile からモデルを構築
  • ollama cp: モデルのコピー
  • ollama show: モデルの詳細情報表示
  • ollama push: リモートリポジトリへアップロード

サーバー動作は環境変数で細かく制御可能です。主な設定項目は以下の通りです。

OLLAMA_HOST        # リスニングアドレス (默认 127.0.0.1:11434)
OLLAMA_DEBUG       # デバッグログ出力 (1 で有効)
OLLAMA_MODELS      # モデルファイルの保存パス
OLLAMA_KEEP_ALIVE  # メモリ保持時間 (默认 5m)
OLLAMA_ORIGINS     # CORS 許可オリジン (* で全許可)
OLLAMA_NUM_PARALLEL # 並列リクエスト数

モデルの実行と対話

ollama run コマンドを実行すると、指定されたモデルがローカルに存在しない場合、自動的にダウンロード(pull)された後に起動します。

ollama run llama3.2:1b
ollama run qwen2.5:0.5b
ollama run deepseek-r1:1.5b

対話モード中は、以下の特殊コマンドが利用できます。

  • /show info: 現在のモデル設定を確認
  • /bye: 対話セッションを終了
  • """: 複数行の入力モードへ切り替え

API による連携

Ollama は HTTP ベースの REST API を提供しており、デフォルトでは http://localhost:11434 でリクエストを受け付けます。

Python (requests ライブラリ)

チャット完了 API を利用した例です。

import requests

model_name = "llama3.2:latest"
conversation = [
    {
        "role": "user",
        "content": "日本の首都について教えてください。",
    },
]
endpoint = "http://127.0.0.1:11434/api/chat"

result = requests.post(endpoint,
    json={
        "model": model_name,
        "messages": conversation,
        "stream": False
    }
)
print(result.json())

API エンドポイント仕様

主に 2 つの生成エンドポイントが用意されています。

1. 単純生成 (POST /api/generate)
コンテキストを考慮しないテキスト生成に適しています。

{
  "model": "mistral",
  "prompt": "太陽系について簡潔に説明して",
  "stream": false,
  "options": {
    "temperature": 0.5,
    "max_tokens": 200
  }
}

2. チャット生成 (POST /api/chat)
会話履歴を維持した対話型生成に適しています。

{
  "model": "mistral",
  "messages": [
    {
      "role": "user",
      "content": "こんにちは"
    }
  ],
  "stream": false
}

OpenAI 互換 SDK (Python)

OpenAI 用のクライアントライブラリを流用して接続することも可能です。

# pip install openai
from openai import OpenAI

llm_client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama-local",
)

completion = llm_client.chat.completions.create(
    model="deepseek-r1:1.5b",
    messages=[
        {"role": "user", "content": "自己紹介をしてください"}
    ],
)
print(completion.choices[0].message.content)

Go 言語 SDK

公式提供の Go クライアントを利用した実装例です。

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/ollama/ollama/api"
)

func main() {
    conversation := []api.Message{
        {
            Role:    "user",
            Content: "元気ですか?",
        },
    }
    payload := api.ChatRequest{
        Model:    "llama3.2",
        Messages: conversation,
    }
    
    callback := func(resp api.ChatResponse) error {
        fmt.Print(resp.Message.Content)
        return nil
    }
    
    client, err := api.ClientFromEnvironment()
    if err != nil {
        log.Fatal(err)
    }
    
    if err := client.Chat(context.Background(), &payload, callback); err != nil {
        log.Fatal(err)
    }
}

グラフィカルインターフェース

CUI だけでなく、GUI を通じてモデルを利用するためのツールも多数存在します。

  • Open WebUI: Web ブラウザで動作する包括的な管理画面。Docker 等を通じて起動可能。
  • Page Assist: Chrome 拡張機能としてブラウザに統合。
  • Chatbox: クロスプラットフォーム対応のデスクトップアプリケーション。
  • Cherry Studio: 複数のモデルプロバイダーを管理可能なデスクトップクライアント。

Modelfile によるモデル定制

Ollama では、Dockerfile に似た構文を持つ「Modelfile」を使用することで、ベースモデルに独自の設定やプロンプトを付与したカスタムモデルを作成できます。

構文の基本

# コメント行
INSTRUCTION 引数

指令は大文字小文字を区別しませんが、可読性のため大文字表記が一般的です。記述順序は自由ですが、FROM を先頭に配置するのが慣例です。

主要な指令

  • FROM: ベースとなる模型またはファイルパス(必須)
  • PARAMETER: 温度、コンテキスト長などの実行パラメータ
  • TEMPLATE: プロンプトのテンプレート構造(Go テンプレート構文)
  • SYSTEM: システムロールの初期メッセージ
  • ADAPTER: LoRA などのアダプターファイル
  • LICENSE: ライセンス情報の記載
  • MESSAGE: 事前定義された会話履歴

設定例

FROM mistral:latest
PARAMETER temperature 0.8
PARAMETER top_k 40
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|>
"""
SYSTEM """あなたは有用な日本語アシスタントです。常に丁寧な口調で答えてください。"""
LICENSE """
MIT License
"""
MESSAGE user "こんにちは"
MESSAGE assistant "こんにちは!何かお手伝いしましょうか?"

タグ: Ollama LLM Go Python rest-api

7月15日 19:48 投稿