ローカルLLM Ollamaをセットアップし、オフラインで生成AIを実行する

本記事では、Ollamaを使ってローカル環境で大規模言語モデルを導入・実行する手順を実践的に解説します。APIキーなしでプライベートなLLM環境を構築でき、データセンシティブなプロジェクトや開発環境での素早いプロトタイピングに活用できます。

Ollamaとは:導入前に知るべき基礎知識

Ollamaは、ローカルマシン上で大規模言語モデルを実行するためのオープンソースツールです。Docker的なシンプルさで、複雑な環境構築なしにLLMを動かせることが特徴です。

Ollamaを使うべき場面と使わない場面

使うべき場面:

  • 機密データを扱うプロジェクト(API送信を避けたい)
  • 開発・テスト環境での迅速な検証
  • ネットワーク接続が不安定な環境
  • API課金を最小化したい場合

使わない方がいい場面:

  • 最高精度の応答が必須(GPT-4などクラウドの最新モデルが必要)
  • リアルタイム性が重要(レスポンス速度がクラウドより遅い傾向)
  • GPU搭載マシンの用意が難しい場合

必要な環境と事前準備

システム要件

Ollamaの動作には以下のスペックが推奨されます:

  • CPU:4コア以上(8コア以上が理想)
  • RAM:8GB以上(16GB以上推奨)
  • GPU:NVIDIA CUDA対応GPU(推奨。CPUのみでも動作)
  • ストレージ:30GB以上の空き容量
  • OS:macOS 11以上、Linux、Windows 11(WSL2)

環境確認コマンド

Linux/macOSで現在の環境を確認する場合:

# RAM確認
free -h  # Linux
vm_stat  # macOS

# CPUコア数確認
nproc    # Linux
sysctl -n hw.ncpu  # macOS

# GPU確認(NVIDIA)
nvidia-smi

Ollamaの導入手順(ステップバイステップ)

ステップ1:Ollamaのインストール

公式サイト https://ollama.ai からOSに応じたインストーラーをダウンロードします。

macOS / Windows: インストーラーを実行し、ウィザードに従うだけです。

Linux(Ubuntu/Debian): コマンドラインからのインストールが可能:

curl -fsSL https://ollama.ai/install.sh | sh

インストール完了後、バージョン確認:

ollama --version

ステップ2:モデルのダウンロード

Ollamaでは公式レジストリから様々なモデルをダウンロードできます。軽量で日本語対応のmistralや日本語特化のelyza、高精度なllama2などが選択可能です。

モデルをダウンロード:

# 軽量で高速(推奨:初心者向け)
ollama pull mistral

# 日本語対応の軽量モデル
ollama pull elyza:7b

# より高精度(リソース多用)
ollama pull llama2:13b

ダウンロードサイズは数GBになるため、時間がかかります。利用可能なモデル一覧は Ollama Library で確認できます。

ステップ3:モデルの起動確認

ダウンロード完了後、実際にモデルを動かして動作確認:

ollama run mistral

コマンド実行後、インタラクティブなチャット画面が起動します。テスト入力を行いましょう:

>>> こんにちは。あなたは誰ですか?
(ここにAIの応答が表示されます)

>>> /bye  # 終了コマンド

アプリケーションからOllamaを呼び出す

REST APIの基本的な使い方

Ollama起動時、デフォルトでlocalhost:11434でREST APIサーバーが起動します。これを使い、プログラムからLLMを呼び出せます。

Ollamaサーバーをバックグラウンドで起動(ターミナルを別途開く):

ollama serve

Python使用時の実装例:

import requests
import json

# Ollama APIエンドポイント
url = "http://localhost:11434/api/generate"

# リクエスト作成
payload = {
    "model": "mistral",
    "prompt": "Pythonの非同期処理について簡潔に説明してください。",
    "stream": False  # ストリーミングなし(一度に全て返却)
}

# APIへリクエスト
response = requests.post(url, json=payload)

# レスポンス解析
if response.status_code == 200:
    result = response.json()
    print("AI応答:")
    print(result["response"])
else:
    print(f"エラー: {response.status_code}")

Node.js / JavaScriptからの呼び出し例:

const axios = require('axios');

async function queryOllama(prompt) {
  try {
    const response = await axios.post('http://localhost:11434/api/generate', {
      model: 'mistral',
      prompt: prompt,
      stream: false
    });
    console.log('AI応答:', response.data.response);
  } catch (error) {
    console.error('エラー:', error.message);
  }
}

// 実行例
queryOllama('JavaScriptの非同期処理について説明してください。');

ストリーミング応答の実装

リアルタイムにトークンを受け取る場合、stream: trueを使用:

import requests

url = "http://localhost:11434/api/generate"
payload = {
    "model": "mistral",
    "prompt": "クラウドコンピューティングの利点を列挙してください。",
    "stream": True  # ストリーミング有効化
}

# ストリーミングレスポンス取得
response = requests.post(url, json=payload, stream=True)

for line in response.iter_lines():
    if line:
        chunk = json.loads(line)
        # 各トークンをリアルタイム出力
        print(chunk.get("response", ""), end="", flush=True)

ハマりやすいポイントと対処法

「接続が拒否される」エラー

症状: Connection refused [127.0.0.1:11434]

原因: Ollama サーバーが起動していない

対処:

  • 別ターミナルで ollama serve を実行
  • ファイアウォール設定でポート11434がブロックされていないか確認
  • macOSの場合、Dock内のOllamaアイコンから起動確認

メモリ不足でモデルが動作しない

症状: 入力後、プロンプトが返らないまま停止

原因: RAMまたはVRAM不足

対処:

  • 小さいモデルを使用:ollama pull mistral(7B)など
  • 不要プロセスを終了してメモリを解放
  • モデル実行時に環境変数でメモリ制限を設定

メモリ制限の例(Linux):

OLLAMA_MAX_LOADED_MODELS=1 ollama serve

日本語応答が文字化けする

対処:

  • 日本語対応モデルを使用:ollama pull elyza:7b
  • プロンプトを英語で入力し、翻訳を後処理
  • UTF-8エンコーディングを明示的に指定(Python例):
import sys
sys.stdout.reconfigure(encoding='utf-8')  # UTF-8エンコーディング指定

ローカルLLMと他のソリューション比較

ソリューション 初期コスト 精度 速度 プライバシー
Ollama(ローカル) GPU購入費用 中程度 GPU依存 最高
OpenAI API 無料(従量課金) 最高 高速
Claude API 無料(従量課金) 非常に高い 中程度 中程度

本番環境への展開例

Docker を使用してOllamaを本番環境にデプロイ:

docker run -d \
  --name ollama \
  -p 11434:11434 \
  -v ollama_data:/root/.ollama \
  -e OLLAMA_HOST=0.0.0.0:11434 \
  ollama/ollama:latest

# モデルをプル
docker exec ollama ollama pull mistral

# 起動確認
curl http://localhost:11434/api/tags

よくある質問

Q1:GPUなしでも使えますか?

A: はい、使えます。ただ

K
AWS・Python・生成AIを専門とするソフトウェアエンジニア。AI・クラウド・開発ワークフローの実践ガイドを執筆しています。詳しく見る →