Ollama に関するモジュールへようこそ。
これまで多くの人工知能プロジェクトは、OpenAI、Anthropic、Google、その他のプロバイダーが提供するクラウド上のモデルAPIを利用して構築されてきました。このアプローチは非常に強力ですが、唯一の方法というわけではありません。
このチュートリアルでは別のシナリオに取り組みます:自分のコンピュータ上で直接、言語モデルを実行する という方法です。
これは次のような理由から重要です:
- ローカルでのプライバシー: ローカルにダウンロードして実行するモデルを利用すれば、プロンプトと応答がマシンの外に出る必要がありません。
- 推論コスト: ローカルでモデルを実行する場合、トークン単価のコストはかかりません。ただし、ハードウェア、電力、ストレージといった間接的なコストは存在します。
- 技術的な学習: モデルがどのようにダウンロード、ロード、実行、公開されるのかを理解することで、実際のAIシステムへの理解が深まります。
- 迅速なプロトタイピング: 常に外部APIに依存せずに実験することができます。
- 統合: OllamaはローカルHTTP APIを公開しており、Python、Node.js、.NET、Webアプリケーション、RAGツール、エージェントから利用できます。
このチュートリアルは、Windows、macOS、Linux の混在チームを想定して設計されています。まず共通の概念を見てから、各オペレーティングシステム特有の違いを確認していきます。
目次
- Ollamaとは
- ローカルモデルを使うべき場面
- システム要件
- オペレーティングシステム別のインストール
- インストールの確認
- Ollamaの再起動方法
- 初めてのローカルモデル
- CLIの基本コマンド
- モデルの保存場所
- オペレーティングシステム別の環境変数
- OllamaのREST API
- Pythonとの統合
- RAG向けのEmbeddings
- CPUとGPUのどちらを使っているかを確認する方法
- Context length
- OpenAI APIとの互換性
- ベストプラクティス
- オペレーティングシステム別のよくあるエラー
- 演習課題
- まとめ
1. Ollamaとは {#section-1}
Ollama は、言語モデルをローカルにダウンロード、管理、実行するためのツールです。
シンプルに理解する一つの方法は、OllamaをAIモデルの実行環境として捉えることです。ユーザーがモデルを名前で指定すると、Ollamaは利用できなければそれをダウンロードし、メモリにロードして、以下から利用できるようにします:
- コマンドライン;
- ローカルHTTP API;
- PythonやJavaScriptなどのライブラリ;
- OpenAIスタイルのAPIと互換性のある統合。
デフォルトでは、Ollamaのローカルサーバーは次のアドレスで利用可能になります:
http://localhost:11434
そしてAPIのベースURLは次のとおりです:
http://localhost:11434/api
主要コンポーネント
| コンポーネント | 説明 |
|---|---|
| Ollamaサーバー | モデルを実行し、ローカルリクエストに応答するプロセス。 |
ollama CLI | モデルのダウンロード、実行、一覧表示、管理を行うコマンド。 |
| REST API | アプリケーションにモデルを統合するためのローカルHTTP API。 |
| モデル | モデルの重みを含む、ローカルにダウンロードされたファイル。 |
2. ローカルモデルを使うべき場面 {#section-2}
Ollamaは特に次のような場面で役立ちます:
- ローカルでモデルがどのように動作するかを学ぶ;
- トークンコストを気にせずプロンプトを試す;
- プライベートなプロトタイプを構築する;
- 開発マシンでRAGのテストを行う;
- インターネット常時接続なしでモデルを実行する;
- 社内ツールにAIを組み込む;
- より強力なクラウドモデルを使う前に小さなモデルを比較する。
簡単な比較
| 観点 | ローカルOllama | クラウドAPI |
|---|---|---|
| プライバシー | モデルをローカルで実行すれば高い | プロバイダーに依存 |
| トークンコスト | トークンあたりの直接コストなし | 利用に応じてコスト発生 |
| 最大品質 | ハードウェアとローカルモデルに依存 | フロンティアモデルを利用可能 |
| 速度 | ローカルCPU/GPUに依存 | ネットワークとプロバイダーに依存 |
| オフライン | モデルをダウンロード後はYes | No |
| メンテナンス | ユーザー負担 | プロバイダー負担 |
実用的なルール: 学習、プロトタイピング、ローカルソリューションの構築にはOllamaを使い、最大品質、マネージドなスケーラビリティ、フロンティアモデルが必要なときはクラウドAPIを使いましょう。
3. システム要件 {#section-3}
要件は実行したいモデルによって異なります。
一般的な要件
- 小さなモデル向けには最低8 GBのRAM。
- より快適に作業するには16 GB以上のRAM。
- SSDを推奨。
- 十分な空き容量:モデルは数GBから数十GB、場合によっては数百GBを占めることがあります。
- パフォーマンスを高めるためにGPUを推奨。ただし多くの小さなモデルはCPUでも動作します。
Windows
代表的な要件:
- Windows 10 22H2以降、もしくはWindows 11。
- NVIDIA GPUを使う場合は最新のNVIDIAドライバ。
- AMD Radeon GPUを使う場合は最新のAMD Radeonドライバ。
macOS
代表的な要件:
- macOS Sonoma 14以降。
- CPU/GPUサポート付きのApple Silicon Mシリーズ。
- Intel/x86のMacではCPU実行を想定。
Linux
代表的な要件:
- 最新のLinuxディストリビューション。
- 標準インストールのようにOllamaをサービスとして使う場合は
systemd。 - GPUを使う場合は、NVIDIAまたはAMD/ROCmドライバが正しくインストールされていること。
- システムのサービスやバイナリをインストールする権限。
モデルサイズの実用的なルール
4ビット量子化されたモデルに対するおおまかなルール:
N B パラメータのモデル(B は十億単位)≈ N × 0.6 GB の RAM/VRAM
このコンテキストでは、7B は約70億パラメータを意味します。
おおよその例:
| モデル | おおよそのメモリ | コメント |
|---|---|---|
| 3B | 2〜3 GB | 控えめなマシンに適する |
| 7B / 8B | 4〜6 GB | よい入門ポイント |
| 13B / 14B | 8〜10 GB | より多くのメモリが必要 |
| 32B | 18〜24 GB | 大きなGPUか潤沢なRAMが推奨 |
| 70B | 40 GB以上 | 上級者向け |
これらの数値は目安です。実際の消費量は、量子化、コンテキスト長、GPU、オフロード、モデルの設定によって変わります。
4. オペレーティングシステム別のインストール {#section-4}
4.1 Windows
オプションA: グラフィカルインストーラ
- Ollama公式ダウンロードページにアクセスします。
OllamaSetup.exeをダウンロードします。- インストーラを実行します。
- 新しいPowerShellまたはCMDのターミナルを開きます。
- 確認します:
ollama --version
Windowsでは、Ollamaはバックグラウンドで動き続け、ollama コマンドはPowerShell、CMD、お好みのターミナルから利用できます。
オプションB: winget
winget を使う場合は、次のようにインストールできます:
winget install Ollama.Ollama
サーバーの応答を確認
curl.exe http://localhost:11434
期待されるレスポンスは次のようなものです:
Ollama is running
従来の Windows PowerShell では、
curlがエイリアスとして解決されるため挙動が異なることがあります。問題を避けるために、curl.exeまたはInvoke-WebRequestを使ってください。
4.2 macOS
推奨オプション: 公式アプリケーション
- Ollama公式ページから
.dmgファイルをダウンロードします。 .dmgをマウントします。Ollama.appをApplicationsにドラッグします。- Ollamaを起動します。
- アプリが
ollamaコマンドをPATHにインストールする許可を求めてきたら、許可します。
ターミナルから確認します:
ollama --version
サーバーの応答を確認します:
curl http://localhost:11434
Homebrewを使う代替方法
開発環境によってはHomebrewが好まれる場合があります:
brew install --cask ollama-app
その後、Ollamaアプリを起動して確認します:
ollama --version
4.3 Linux
公式スクリプトでのインストール
curl -fsSL https://ollama.com/install.sh | sh
その後、サービスを起動して確認します:
sudo systemctl start ollama
sudo systemctl status ollama
APIを確認します:
curl http://localhost:11434
期待されるレスポンス:
Ollama is running
セキュリティに関する注意
企業環境や本番環境では、リモートスクリプトを実行する前に必ず内容を確認するのがよい習慣です。
代替案として、ダウンロードして内容を確認してから実行することができます:
curl -fsSL https://ollama.com/install.sh -o install-ollama.sh
less install-ollama.sh
sh install-ollama.sh
5. インストールの確認 {#section-5}
基本コマンドは3つのシステムで同じです。
Windows
ollama --version
curl.exe http://localhost:11434
macOS
ollama --version
curl http://localhost:11434
Linux
ollama --version
curl http://localhost:11434
sudo systemctl status ollama
すべてが正しければ、ollama --version がインストールされたバージョンを表示し、curl http://localhost:11434 がOllamaが動作中である旨のレスポンスを返します。
6. Ollamaの再起動方法 {#section-6}
このチュートリアルの様々な箇所で「Ollamaを再起動する」という表現が登場します。それぞれのオペレーティングシステムで何を意味するのかを明確にしておきましょう。
Windows
- システムトレイのOllamaアイコンを探します。
- 右クリックします。
- Quit または 終了 を選びます。
- スタートメニューからOllamaを再度開きます。
その後、確認します:
curl.exe http://localhost:11434
macOS
- メニューバーのOllamaアイコンをクリックします。
- Quit Ollama を選びます。
ApplicationsからOllama.appを再度開きます。
その後、確認します:
curl http://localhost:11434
Linux
Ollamaが systemd サービスとしてインストールされている場合:
sudo systemctl restart ollama
sudo systemctl status ollama
再起動後にログを確認するには:
journalctl -e -u ollama
7. 初めてのローカルモデル {#section-7}
まずは軽量なモデルを実行してみましょう。
ollama run llama3.2
初回はOllamaがモデルをダウンロードします。その後、対話セッションが開始されます:
>>> Send a message (/? for help)
試してみてください:
教師あり学習とは何かを一文で説明してください。
セッションを終了するには:
/bye
または:
Ctrl+D
裏で何が起きたか
次のコマンドを実行したとき:
ollama run llama3.2
Ollamaは次のことを行います:
- モデルが既にダウンロードされているかを確認します。
- ダウンロードされていなければ、モデルレジストリから取得します。
- モデルをRAMまたはVRAMにロードします。
- 対話セッションを開きます。
- 各クエリで再ロードしないように、しばらくモデルをメモリに保持します。
デフォルトでは、Ollamaは最後の利用から 5分間 モデルをロードしたままにします。これがクエリ終了直後にRAMやVRAMが必ずしも下がらない理由です。
メモリを手動で解放するには:
ollama stop llama3.2
OLLAMA_KEEP_ALIVE やAPIの keep_alive パラメータでも制御できます。
8. CLIの基本コマンド {#section-8}
これらのコマンドはWindows、macOS、Linuxで同じように動作します。
# ダウンロード済みモデルの一覧を表示
ollama list
# モデルを実行せずにダウンロードのみ行う
ollama pull llama3.2
# モデルを実行する
ollama run llama3.2
# 現在メモリにロードされているモデルを確認する
ollama ps
# ロードされているモデルを停止する
ollama stop llama3.2
# ディスクからモデルを削除する
ollama rm llama3.2
# モデルの情報を確認する
ollama show llama3.2
# サーバーを手動で起動する
ollama serve
入門におすすめのモデル
サイズは目安です。正確なタグ、量子化、公開バージョンによって変わる可能性があります。大きなモデルをダウンロードする前に、Ollamaライブラリでモデルカードを確認するのがよい習慣です。
| 用途 | おすすめモデル | おおよそのサイズ | コメント |
|---|---|---|---|
| 軽量チャット | llama3.2 | 約2 GB | 控えめなマシンに最適 |
| 一般チャット | gemma3 | 約3 GB〜約17 GB | タグにより異なる。小さなバリアントから始めるのが無難 |
| 一般チャット / 推論 | qwen3 | 約3 GB〜約5 GB | 様々なシナリオで良好なパフォーマンス |
| コード | qwen2.5-coder | 約5 GB | プログラミング特化 |
| Embeddings | embeddinggemma | 1 GB未満 | embeddings用に推奨 |
| 軽量Embeddings | all-minilm | 1 GB未満 | 高速で軽量 |
VRAMが少ない(例えば4 GB)マシンの場合は、軽量モデルから始めて、ollama ps で完全にGPUに収まるかを確認するのがよいでしょう。
特定のバリアントをダウンロードするには:
ollama pull モデル名:タグ
例:
ollama pull llama3.1:8b
9. モデルの保存場所 {#section-9}
正確な場所はオペレーティングシステムやインストール方法によって異なります。
| システム | 代表的な場所 |
|---|---|
| Windows | %USERPROFILE%\.ollama または %HOMEPATH%\.ollama |
| macOS | ~/.ollama |
| Linux | 通常はOllamaのユーザー/サービス配下。インストール方法により異なる |
Windows
モデルと設定のフォルダを開く:
explorer %USERPROFILE%\.ollama
ログを開く:
explorer %LOCALAPPDATA%\Ollama
macOS
モデルと設定:
ls ~/.ollama
ログ:
ls ~/.ollama/logs
cat ~/.ollama/logs/server.log
Linux
サービスのログを表示:
journalctl -e -u ollama
または追跡モード:
journalctl -u ollama --no-pager --follow --pager-end
10. オペレーティングシステム別の環境変数 {#section-10}
Ollamaは環境変数で設定します。
主な変数:
| 変数 | 用途 |
|---|---|
OLLAMA_HOST | Ollamaがリッスンするアドレスとポート。 |
OLLAMA_MODELS | モデルが保存されるフォルダ。 |
OLLAMA_KEEP_ALIVE | モデルがロードされたままの時間。デフォルトは5分。 |
OLLAMA_NUM_PARALLEL | 並列リクエスト数の制御。 |
OLLAMA_ORIGINS | CORSで許可するオリジン。 |
OLLAMA_CONTEXT_LENGTH | 適用される場合の、モデルのデフォルト実効コンテキスト長。 |
OLLAMA_FLASH_ATTENTION | ハードウェアが対応している場合にFlash Attentionを有効化できる。 |
10.1 Windows
WindowsではOllamaがユーザーまたはシステムの環境変数を継承します。
手順:
- システムトレイからOllamaを終了します。
- 設定またはコントロールパネルを開きます。
- 「環境変数」を検索します。
- ユーザー環境変数を編集します。
OLLAMA_MODELS、OLLAMA_HOST、OLLAMA_KEEP_ALIVEなどの変数を作成または編集します。- 保存します。
- スタートメニューからOllamaを再度開きます。
例:
OLLAMA_MODELS=D:\OllamaModels
OLLAMA_HOST=127.0.0.1:11434
OLLAMA_KEEP_ALIVE=5m
10.2 macOS
OllamaがmacOSアプリとして動作している場合は、launchctl で変数を設定します。
例:
launchctl setenv OLLAMA_HOST "127.0.0.1:11434"
launchctl setenv OLLAMA_MODELS "$HOME/OllamaModels"
launchctl setenv OLLAMA_KEEP_ALIVE "5m"
その後、Ollama.appを終了して再度開きます。
変数を確認するには:
launchctl getenv OLLAMA_HOST
10.3 Linux
Ollamaが systemd サービスとして動作している場合は、サービスを編集します:
sudo systemctl edit ollama.service
以下を追加します:
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_MODELS=/mnt/models/ollama"
Environment="OLLAMA_KEEP_ALIVE=5m"
変更を適用します:
sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo systemctl status ollama
サービスに適用された変数を確認します:
systemctl show ollama | grep Environment
ログを確認します:
journalctl -e -u ollama
10.4 ローカルネットワーク内の他のマシンからのアクセス
デフォルトでは、Ollamaは 127.0.0.1:11434 でリッスンしており、同じマシンからの接続のみを受け入れます。
ローカルネットワーク内の他のマシンからの接続を受け入れるには、次を使用できます:
OLLAMA_HOST=0.0.0.0:11434
その後、オペレーティングシステムに応じてOllamaを再起動する必要があります。
設定後、ネットワーク上の別のマシンから次のように呼び出せます:
curl http://マシンのIP:11434
セキュリティに関する警告: Ollamaを直接インターネットに公開しないでください。ローカルのOllamaには公開向けに設計されたネイティブな認証がありません。リモートアクセスが必要な場合は、ファイアウォール、VPN、認証付きリバースプロキシ、制限的なネットワークルールを使ってください。
11. OllamaのREST API {#section-11}
OllamaのローカルAPIは次のURLで利用可能になります:
http://localhost:11434/api
11.1 /api/generate エンドポイント
このエンドポイントはプロンプトからテキストを生成します。
Windows PowerShell
(Invoke-WebRequest `
-Method POST `
-Uri http://localhost:11434/api/generate `
-ContentType "application/json" `
-Body '{
"model": "llama3.2",
"prompt": "ロジスティック回帰とは何かを説明してください。",
"stream": false
}'
).Content | ConvertFrom-Json
macOS / Linux
curl http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"prompt": "ロジスティック回帰とは何かを説明してください。",
"stream": false
}'
11.2 /api/chat エンドポイント
このエンドポイントでは、メッセージとロールを使った対話が可能です。
Windows PowerShell
(Invoke-WebRequest `
-Method POST `
-Uri http://localhost:11434/api/chat `
-ContentType "application/json" `
-Body '{
"model": "llama3.2",
"messages": [
{
"role": "system",
"content": "あなたは統計学の専門アシスタントです。"
},
{
"role": "user",
"content": "分散と標準偏差の違いを説明してください。"
}
],
"stream": false
}'
).Content | ConvertFrom-Json
macOS / Linux
curl http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"messages": [
{
"role": "system",
"content": "あなたは統計学の専門アシスタントです。"
},
{
"role": "user",
"content": "分散と標準偏差の違いを説明してください。"
}
],
"stream": false
}'
11.3 APIの keep_alive
デフォルトでは、Ollamaはクエリの後、約5分間モデルをメモリにロードしたままにします。これにより、連続したクエリの応答が高速化されます。
応答後にモデルを即座にアンロードするには:
curl http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"prompt": "簡潔に答えてください:Ollamaとは何ですか?",
"stream": false,
"keep_alive": 0
}'
サーバーが動作している間、ロードしたままにするには:
curl http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"prompt": "モデルをプリロードしてください。",
"stream": false,
"keep_alive": -1
}'
CLIから手動で解放することもできます:
ollama stop llama3.2
12. Pythonとの統合 {#section-12}
公式クライアントをインストールします:
pip install ollama
基本的なチャット
import ollama
respuesta = ollama.chat(
model="llama3.2",
messages=[
{
"role": "user",
"content": "過学習を回避するテクニックを3つ挙げてください。"
}
]
)
print(respuesta["message"]["content"])
ストリーミング
import ollama
stream = ollama.chat(
model="llama3.2",
messages=[
{
"role": "user",
"content": "AIに関する短い物語を聞かせてください。"
}
],
stream=True
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)
システムプロンプト付きチャット
import ollama
respuesta = ollama.chat(
model="llama3.2",
messages=[
{
"role": "system",
"content": "常にわかりやすい日本語で、シンプルな例を交えて答えてください。"
},
{
"role": "user",
"content": "ニューラルネットワークとは何ですか?"
}
]
)
print(respuesta["message"]["content"])
13. RAG向けのEmbeddings {#section-13}
embeddingsはテキストを数値ベクトルに変換します。これは意味検索やRAGシステムを構築するための基本要素です。
embeddingsモデルをダウンロードする
ollama pull embeddinggemma
次のようなモデルも検討できます:
ollama pull all-minilm
/api/embed エンドポイント
Windows PowerShell
(Invoke-WebRequest `
-Method POST `
-Uri http://localhost:11434/api/embed `
-ContentType "application/json" `
-Body '{
"model": "embeddinggemma",
"input": "猫がカーペットの上に座った。"
}'
).Content | ConvertFrom-Json
macOS / Linux
curl http://localhost:11434/api/embed \
-H "Content-Type: application/json" \
-d '{
"model": "embeddinggemma",
"input": "猫がカーペットの上に座った。"
}'
Pythonでのembeddings
import ollama
resp = ollama.embed(
model="embeddinggemma",
input="猫がカーペットの上に座った。"
)
vector = resp["embeddings"][0]
print(len(vector))
print(vector[:5])
Pythonでのミニ意味検索
import ollama
import numpy as np
textos = [
"パーセプトロンは線形の分類モデルです。",
"畳み込みニューラルネットワークは画像に有用です。",
"Transformerはアテンション機構を使用します。",
"過学習は、モデルが訓練データを過剰に記憶してしまうときに発生します。"
]
resp = ollama.embed(
model="embeddinggemma",
input=textos
)
vectores = np.array(resp["embeddings"])
consulta = "アテンションを使用するアーキテクチャは何ですか?"
resp_consulta = ollama.embed(
model="embeddinggemma",
input=consulta
)
v_consulta = np.array(resp_consulta["embeddings"][0])
similitudes = vectores @ v_consulta / (
np.linalg.norm(vectores, axis=1) * np.linalg.norm(v_consulta)
)
idx = similitudes.argmax()
print("最も関連性の高いテキスト:")
print(textos[idx])
print("類似度:", similitudes[idx])
14. CPUとGPUのどちらを使っているかを確認する方法 {#section-14}
Ollamaを使うときによくある疑問の一つは、モデルが本当にGPUを使っているのかどうか、です。
OSのグラフィカルなチャートだけに頼るのは推奨されません。Windowsのタスクマネージャー、macOSのアクティビティモニタ、その他のグラフィカルツールが示す情報は部分的だったり解釈が難しかったりします。
Ollamaから直接確認する最もシンプルな方法は次のとおりです:
ollama ps
重要な列は PROCESSOR です。
概念的な例:
NAME ID SIZE PROCESSOR CONTEXT UNTIL
llama3.2 abc123 2.0 GB 100% GPU 4096 4 minutes from now
CONTEXT 列は、そのモデルにロードされている実効コンテキストを示します。次のセクション(context length)で詳しく見ます。
| 値 | 意味 |
|---|---|
100% GPU | モデルが完全にGPUにロードされている。 |
100% CPU | モデルがシステムメモリにロードされ、CPUで動作している。 |
48%/52% CPU/GPU | モデルの一部がCPU/RAM、別の一部がGPU/VRAMにある。 |
モデルがCPUとGPUに分割されている場合、動作はしますが、通常は完全にVRAMに収まる場合より低速になります。
100% GPU と表示されてもCPUが使われる理由
ollama ps が 100% GPU と表示していても、CPUの使用がいくらか見られるのは正常です。CPUは引き続き次のようなタスクに参加します:
- トークナイゼーション;
- 実行のコーディネーション;
- 入出力;
- サンプリング;
- ローカルサーバーとの通信。
そのため、「CPU使用率」を「GPUを使っていない」ことの自動的な同義として解釈すべきではありません。
Windows: タスクマネージャーには注意
Windowsではタスクマネージャーが紛らわしいことがあります。3D グラフは必ずしもCUDA計算やモデルの実際の使用量を表していません。
NVIDIAの場合は、別のターミナルを開いて以下を実行するのがおすすめです:
nvidia-smi
また、次も実行します:
ollama ps
モデルが応答している最中に。
ollama ps が 100% GPU と示しているなら、たとえタスクマネージャーの 3D グラフが動いていないように見えても、モデルは完全にGPUに入っています。
NVIDIAでのLinux
nvidia-smi
ollama ps
nvidia-smi は使用中のVRAM、アクティブなプロセス、GPU負荷を確認できます。
AMDでのLinux
確認方法はAMD/ROCmのインストールやディストリビューションによって変わります。それでも ollama ps は、OllamaがCPU、GPU、またはその両方にモデルをロードしたかを確認するための最初の実用的な診断手段であり続けます。
macOS
Apple SiliconではOllamaはMetal経由でアクセラレーションを使用できます。実用的な診断のために:
ollama ps
アクティビティモニタで全体的な消費を確認することもできますが、Ollamaに最も役立つ解釈は通常 PROCESSOR 列です。
客観的な指標: tokens per second
実際のパフォーマンスを比較するには、CPU/GPUのチャートを見るだけでは不十分です。最も役立つ指標は生成速度です。
CLIから簡単に確認する方法は、verboseモードでモデルを実行することです:
ollama run llama3.2 --verbose
--verbose フラグはWindows、macOS、Linuxで同じように動作します。PowerShell、ターミナル、Bashシェルで使用できます。
応答が完了すると、Ollamaは次のような指標を表示します:
prompt eval rate: 1200.00 tokens/s
eval rate: 45.00 tokens/s
eval rate 指標は、モデルが1秒あたりに生成するおおよそのトークン数を示します。値が大きいほど生成が速くなります。
APIから取得する応答にも、最終的な応答に eval_count や eval_duration といった指標が含まれます。おおよその速度は次のように計算できます:
tokens_per_second = eval_count / eval_duration * 1_000_000_000
eval_duration はナノ秒単位だからです。
モデルが遅いときの素早い診断
ollama psを実行する。PROCESSORが100% GPU、100% CPU、それとも混在を示しているか確認する。- CPU/GPUの混在がある場合は、より小さなモデルや小さなコンテキストを試す。
--verboseで計測する。- モデル間で
eval rateを比較する。 - NVIDIAを使っている場合は
nvidia-smiでVRAMを確認する。 - タスクマネージャーがモデルの計算アクティビティのすべてを反映していると思い込まないようにする。
15. Context length {#section-15}
context length は、モデルが1回のクエリで考慮できるトークンの最大数です。
これは特に次の場面で重要です:
- RAG;
- 長文ドキュメントの分析;
- エージェント;
- コードアシスタント;
- 長い対話。
最大コンテキスト vs 実効コンテキスト
2つの概念を区別する必要があります:
| 概念 | 意味 |
|---|---|
| モデルの最大コンテキスト | アーキテクチャや構成上、モデルがサポートし得る量。 |
| 実効コンテキスト | Ollamaが具体的な実行で実際に使う量。 |
実効コンテキストはAPIの num_ctx または同等の設定で制御します。指定しない場合、Ollamaはモデルがサポートする最大コンテキストよりも小さい場合があるデフォルト値を適用します。
これは、利用可能なすべてのコンテキストが自動的に使われていると思い込みがちなクラウドAPI出身の利用者を驚かせがちです。
コンテキストとオフロードを確認する
実行:
ollama ps
最近のバージョンでは、出力に PROCESSOR に加えて CONTEXT 列が含まれることがあります。
概念的な例:
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gemma3:latest a2af6cc3eb7f 6.6 GB 100% GPU 65536 2 minutes from now
これにより同時に2つのことを確認できます:
- どのくらいのコンテキストが使われているか;
- モデルが完全にGPUに入ったか、CPU/GPUに分かれているか。
APIでコンテキストを設定する
/api/chat での使用例:
curl http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "この長いテキストを要約してください..."
}
],
"stream": false,
"options": {
"num_ctx": 8192
}
}'
コンテキストは大きければよいというものではない
コンテキストを増やせば長いテキストを扱えるようになりますが、同時に次のような副作用もあります:
- RAMやVRAMをより多く消費する;
- モデルの一部がCPUにオフロードされる;
- tokens per secondが下がる;
- 応答時間が増える。
ローカルモデルでは計測することが大切です。多くの単純なタスクでは、より小さなコンテキストの方が速く、十分な場合もあります。
グローバル設定
環境変数で設定することもできます:
OLLAMA_CONTEXT_LENGTH=8192
変更後はOllamaを再起動してください。
16. OpenAI APIとの互換性 {#section-16}
OllamaはOpenAIスタイルのエンドポイントとの互換性も提供します。
これにより、ベースURLを変更するだけで既存コードの一部を再利用できます。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama"
)
respuesta = client.chat.completions.create(
model="llama3.2",
messages=[
{
"role": "user",
"content": "こんにちは、Ollamaとは何かを説明してください。"
}
]
)
print(respuesta.choices[0].message.content)
ローカルサーバーを使う場合、APIキーは任意の文字列で構いません。クラウドプロバイダーのようにOllamaのローカルサーバーがAPIキーを検証することはないからです。
17. ベストプラクティス {#section-17}
1. 基準なしにモデルをダウンロードしない
各モデルは数GBを占めることがあります。ダウンロード前に、サイズ、用途、要件を確認しましょう。
ollama show llama3.2
2. 再現性が重要なときは明示的なタグを使う
実プロジェクトでは、曖昧なエイリアスへの依存を避けましょう。
良い例:
ollama run llama3.1:8b
汎用的なエイリアスに常に依存するのではなく。
3. 生成モデルとembeddingsモデルを分ける
RAGシステムでは、次の使い分けが一般的です:
- 高速なembeddingsモデル;
- より高品質なチャット/生成モデル。
例:
Embeddings: embeddinggemma
生成: llama3.2、gemma3、qwen3、その他のチャットモデル
4. Ollamaを直接インターネットに公開しない
次のように設定すると:
OLLAMA_HOST=0.0.0.0:11434
Ollamaは他のマシンからの接続を受け付けるようになります。
ローカルネットワークでは便利ですが、認証、ファイアウォール、セキュアなリバースプロキシなしに直接インターネットに公開してはいけません。
5. パフォーマンスを計測する
モデル比較のために:
- ロード時間を計測する;
- tokens per secondを計測する;
- RAM/VRAMの消費量を計測する;
ollama psでCPUかGPUかを確認する。
6. CORSに注意
ローカルWebアプリからOllamaを利用する場合は、OLLAMA_ORIGINS の設定が必要になることがあります。
開発時には広めの設定でも構いませんが、本番では制限する必要があります。
18. オペレーティングシステム別のよくあるエラー {#section-18}
18.1 Windows
ollama がコマンドとして認識されない
ターミナルを閉じて新しいものを開いてください。
それでも失敗する場合は、Ollamaがインストールされていること、ユーザーのPATHが更新されていることを確認してください。
curl が期待どおりに動作しない
従来のPowerShellでは次を使ってください:
curl.exe http://localhost:11434
または:
Invoke-WebRequest http://localhost:11434
プログレスバーに変な文字が出る
Windows 10で古いフォントを使っていると発生することがあります。ターミナルのフォントをCascadia Codeなどに変更するか、Windows Terminalを使用してください。
Cドライブの容量が少ない
設定する:
OLLAMA_MODELS=D:\OllamaModels
その後Ollamaを再起動します。
GPUを使わない
確認:
ollama ps
NVIDIA/AMDドライバとタスクマネージャーでのGPU使用率も確認してください。
18.2 macOS
CLIが見当たらない
Ollama.app を開き、要求されたらCLIリンクの作成を許可してください。
次でも確認できます:
which ollama
環境変数が反映されない
launchctl setenv を使い、Ollama.appを再起動してください。
例:
launchctl setenv OLLAMA_HOST "127.0.0.1:11434"
Intel Macでのパフォーマンスが低い
Intel/x86のMacではCPU実行を想定してください。ローカルでより良いパフォーマンスを得るには、Apple Silicon Mシリーズの方が適しています。
ログを確認する
cat ~/.ollama/logs/server.log
18.3 Linux
サービスが起動しない
sudo systemctl status ollama
ログを確認する
journalctl -e -u ollama
または:
journalctl -u ollama --no-pager --follow --pager-end
変数を変更したのに反映されない
サービスを編集した後は:
sudo systemctl daemon-reload
sudo systemctl restart ollama
NVIDIA GPUが検出されない
確認:
nvidia-smi
動作しない場合は、NVIDIAドライバのインストールを確認してください。
AMD GPUが検出されない
ディストリビューションとハードウェアに応じて、AMD/ROCmドライバを確認してください。
19. 演習課題 {#section-19}
演習1 — インストールと確認
自分のオペレーティングシステムにOllamaをインストールし、次の出力を提出してください:
ollama --version
ollama list
その後、次を実行してください:
curl http://localhost:11434
Windowsでは次を使えます:
curl.exe http://localhost:11434
演習2 — 初めてのモデル
ダウンロードして実行してください:
ollama run llama3.2
プロンプト:
教師あり学習を一文で説明し、その後に実用的な例を一つ示してください。
応答を保存してください。
演習3 — モデルの比較
例えば次の2つのモデルを比較してください:
ollama run llama3.2
ollama run gemma3
同じプロンプトを使用します:
ベイズの定理を医療の例で説明してください。
比較する項目:
- 応答の品質;
- 体感速度;
- RAM/VRAMの消費;
ollama psでのCPU/GPU使用状況。
演習4 — REST API
該当のオペレーティングシステムから /api/chat を呼び出してください。
Windows
(Invoke-WebRequest `
-Method POST `
-Uri http://localhost:11434/api/chat `
-ContentType "application/json" `
-Body '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "ローカルAIで作れる簡単なプロジェクトのアイデアを5つください。"
}
],
"stream": false
}'
).Content | ConvertFrom-Json
macOS / Linux
curl http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "ローカルAIで作れる簡単なプロジェクトのアイデアを5つください。"
}
],
"stream": false
}'
演習5 — Pythonクライアント
次を行うスクリプトを作成してください:
preguntas.txtというファイルから質問を読み込む。ollama.chatで各質問をモデルに送信する。- タイムスタンプ付きでJSONファイルに応答を保存する。
ベース例:
import json
from datetime import datetime
import ollama
with open("preguntas.txt", "r", encoding="utf-8") as f:
preguntas = [line.strip() for line in f if line.strip()]
resultados = []
for pregunta in preguntas:
respuesta = ollama.chat(
model="llama3.2",
messages=[
{
"role": "user",
"content": pregunta
}
]
)
resultados.append({
"pregunta": pregunta,
"respuesta": respuesta["message"]["content"],
"timestamp": datetime.now().isoformat()
})
with open("respuestas.json", "w", encoding="utf-8") as f:
json.dump(resultados, f, ensure_ascii=False, indent=2)
演習6 — 完全なミニRAG
embeddingsのセクションでは、最も類似する段落を探す方法をすでに見ました。この演習ではRAGフローを完成させます:
- 人工知能に関する10個の段落を用意する。
embeddinggemmaでembeddingsを生成する。- ベクトルをメモリに保存する。
- 質問が与えられたら、最も類似する段落を検索する。
- その段落をコンテキストとしてチャットモデルに渡す。
- そのコンテキストのみを使って 答えるようにモデルに指示する。
- コンテキストが不足する場合、モデルは「コンテキストに十分な情報がありません」と答える必要がある。
生成のための推奨プロンプト:
提供されたコンテキストのみを使って質問に答えてください。
コンテキストに十分な情報がない場合は、次のように答えてください:
「コンテキストに十分な情報がありません」。
コンテキスト:
{{contexto}}
質問:
{{pregunta}}
演習7 — パフォーマンス分析
同じプロンプトを2つの異なるモデルで実行し、次を記録してください:
- ロード時間;
- 合計時間;
- CPU/GPUの使用率;
- 体感品質;
- モデルのサイズ。
使用:
ollama ps
20. まとめ {#section-20}
このチュートリアルにより、Windows、macOS、Linux でOllamaをインストールして使用し、ローカルモデルを実行し、REST APIを利用し、Pythonと統合し、RAGシステム向けのembeddingsを生成できるようになりました。
Ollamaは、応用AIを学ぶ、ローカルモデルで実験する、プライベートなプロトタイプを構築するために非常に役立つツールです。常にもっとも先進的なクラウドモデルを置き換えるわけではありませんが、現代の人工知能ソリューションのアーキテクチャをより深く理解するうえで役立ちます。
次のモジュールでは、以下に進むことができます:
- 完全なRAGシステム;
- ベクトルデータベースとの統合;
- エージェント;
- 企業向け社内ツール;
- コードアシスタント;
- 制御されたローカルデプロイメント。
公式の参考資料
- Ollamaの一般ドキュメント: https://docs.ollama.com
- Ollama API: https://docs.ollama.com/api/introduction
- Windowsへのインストール: https://docs.ollama.com/windows
- macOSへのインストール: https://docs.ollama.com/macos
- Linuxへのインストール: https://docs.ollama.com/linux
- Embeddings: https://docs.ollama.com/capabilities/embeddings
/api/embedエンドポイント: https://docs.ollama.com/api/embed- トラブルシューティング: https://docs.ollama.com/troubleshooting
- Context length: https://docs.ollama.com/context-length
- 利用状況とパフォーマンス指標: https://docs.ollama.com/api/usage
- モデルライブラリ: https://ollama.com/library