Ollamaを始めよう! ローカルで大規模言語モデル(LLM)を自在に動かす第一歩
序章:Ollamaの世界へようこそ
近年、ChatGPTに代表される大規模言語モデル(LLM)が目覚ましい進化を遂げ、私たちのデジタルライフや働き方に革命をもたらし始めています。これらの強力なモデルは、かつてはクラウド上の巨大な計算資源でしか動かせないものでしたが、技術の進歩により、より小型化されたモデルが登場し、さらにローカル環境でも効率的に実行できるフレームワークが開発されています。
その中でも、Ollamaはローカル環境でのLLMの実行と管理を驚くほど簡単にすることを目指した、注目すべきツールです。macOS、Linux、Windowsといった主要なOS上で、人気の高いLLM(Llama 2, Mistral, Mixtral, Gemmaなど)を手軽にダウンロードし、実行し、さらにはカスタマイズすることまで可能にします。
なぜローカルでLLMを動かすことが重要なのでしょうか? いくつかの理由があります。
- プライバシーとセキュリティ: 機密性の高い情報を扱う場合、外部のサーバーにデータを送信することなく、ローカル環境で処理できることは大きな利点です。
- コスト効率: API利用料を気にすることなく、好きなだけモデルを実行できます。
- オフライン利用: インターネット接続がない環境でもLLMを利用できます。
- カスタマイズと実験: 独自のデータでモデルをファインチューニングしたり、モデルのパラメータや構造を変更したりといった実験を自由に行えます。
- 低レイテンシ: ネットワーク遅延なしに、迅速な応答を得られます。
この記事は、Ollamaを使ってローカル環境でLLMを動かし始めるための、最も詳細なガイドとなることを目指しています。Ollamaのインストールから、モデルのダウンロードと実行、REST APIを使ったプログラムからの利用、そして自分だけのカスタムモデル作成まで、Ollamaドキュメントの「Get started」セクションを基に、必要な知識と手順を網羅的に解説します。
さあ、Ollamaとともに、あなたのローカル環境でLLMの可能性を探求する旅に出ましょう!
第一歩:Ollamaの導入準備
Ollamaをインストールする前に、お使いのコンピューターがOllamaを実行するための基本的な要件を満たしているか確認しましょう。Ollamaは比較的軽量に設計されていますが、実行するLLMのサイズによっては、それなりの計算資源(特にメモリとGPU)が必要になります。
システム要件
Ollama自体は最小限のリソースで動作しますが、実際にLLMを実行するためには以下の要素が重要です。
- オペレーティングシステム (OS):
- macOS: Sonoma (14) 以降が推奨されます。以前のバージョンでも動作する場合がありますが、最新版が最も安定しており、最適なパフォーマンスを発揮します。Apple Silicon (M1, M2, M3チップなど) を搭載したMacでは、GPUアクセラレーションが強力に効きます。Intel MacでもCPU実行は可能ですが、大規模モデルでは時間がかかります。
- Linux: 様々なディストリビューション(Ubuntu, Fedora, Debian, Arch Linuxなど)で動作します。ただし、Systemdが動作している環境が推奨されます。Linuxでは、NVIDIA、AMD、Intelといった様々なGPUを用いたハードウェアアクセラレーションが可能です。GPUを使用する場合は、適切なドライバーがインストールされていることを確認してください。
- Windows: Windows 10以降が必要です。Ollamaの公式ビルドはWSL 2 (Windows Subsystem for Linux 2) を利用してLinux環境でOllamaサービスを動かすため、WSL 2がインストールされている必要があります。WSL 2上でGPUを使用するには、Windows側のGPUドライバーとWSL 2側のCUDAまたはDirectXドライバが適切に設定されている必要があります。
- CPU: 最新のLLMをCPUのみで実行するには、かなりの処理能力が必要ですが、Ollamaは可能な限りGPUを利用するように設計されています。GPUがない場合でも実行は可能ですが、応答速度は大幅に低下します。高性能なマルチコアCPUであれば、CPU実行でも小規模なモデルなら実用的な速度で動くこともあります。
- RAM (メモリ): 実行するモデルのサイズによって大きく異なりますが、一般的に 8GB以上 が推奨されます。大規模なモデル(例: 7Bパラメータモデル)を実行するには、16GB以上 のメモリがあることが望ましいです。モデルの一部または全体をGPUメモリにオフロードする場合でも、OSや他のアプリケーションが使用するメモリと、モデルの残りの部分や推論プロセス自体が使用するメモリが必要になります。
- GPU (グラフィックス処理ユニット): これがOllamaでLLMを快適に動かす上で最も重要な要素です。 多くのLLMはGPU上での並列計算に最適化されています。
- VRAM (GPUメモリ): 実行するモデルのサイズと、そのモデルをどれだけGPUにオフロード(ロード)できるかによって必要なVRAM容量が決まります。一般的に、7Bパラメータのモデルを十分に活用するには 6GB以上、13Bパラメータのモデルには 8GB以上、さらに大きなモデルにはそれ以上のVRAMが推奨されます。VRAMが足りない場合でも、Ollamaはモデルの一部をVRAMに、残りをシステムRAMに配置する「レイヤーオフロード」を自動的に行いますが、VRAMが多いほど高速に動作します。
- 対応GPU:
- NVIDIA: CUDA対応GPUが必要です。最新のドライバーがインストールされていることを確認してください。
- AMD: ROCmまたはDirectML (Windows/WSL) に対応したGPUが必要です。LinuxでのROCmサポートは進化中であり、特定のディストリビューションやGPUモデルに限定される場合があります。Windows/WSLではDirectMLが利用可能です。
- Intel: OpenVINOまたはDirectML (Windows/WSL) に対応したGPUが必要です。LinuxでのOpenVINOサポートやWindows/WSLでのDirectMLサポートが利用可能です。
- GPUがない場合でもCPUのみで実行可能ですが、大規模モデルでは応答に時間がかかることを覚悟してください。
インストール前の確認事項
- インターネット接続: モデルのダウンロードにはインターネット接続が必要です。
- ディスク容量: ダウンロードするモデルのサイズによっては、数GBから数十GBのディスク容量が必要になります。実行したいモデルのサイズを確認し、十分な空き容量があるか確認してください。
- 管理者権限: インストールにはシステムへの変更が必要なため、管理者権限を持つユーザーアカウントが必要です。
- WSL 2 (Windowsの場合): WindowsにOllamaをインストールするには、事前にWSL 2が有効化され、Linuxディストリビューション(例: Ubuntu)がインストールされている必要があります。WSL 2のインストール手順はMicrosoftの公式ドキュメントを参照してください。
これらの要件を確認し、必要な準備が整ったら、いよいよOllamaのインストールに進みましょう。
第二歩:Ollamaのインストール手順
Ollamaのインストールは非常に簡単です。お使いのOSに合わせて、以下の手順を実行してください。
macOSでのインストール
macOSでは、専用のGUIインストーラーが提供されています。
- 公式サイトにアクセス: ウェブブラウザで https://ollama.com/ にアクセスします。
- 「Download」ボタンをクリック: トップページにあるダウンロードボタンをクリックします。
- macOS版をダウンロード: オペレーティングシステムの選択肢から「macOS」を選び、インストーラーファイル(
.dmg
形式)をダウンロードします。 - インストーラーを実行: ダウンロードした
.dmg
ファイルをダブルクリックして開きます。 - アプリケーションフォルダに移動: 表示されたウィンドウで、OllamaアイコンをApplicationsフォルダのエイリアスにドラッグ&ドロップします。
- Ollamaを起動: ApplicationsフォルダからOllamaアプリケーションを起動します。初めて起動する際には、セキュリティの警告が表示される場合がありますが、「開く」を選択して進みます。
- メニューバーアイコン: Ollamaが起動すると、メニューバーにアイコンが表示されます。このアイコンをクリックすると、Ollamaの起動・停止、設定、ログ表示などを行うことができます。デフォルトでは、システム起動時に自動的にOllamaサービスが開始されるように設定されます。
これでmacOSへのインストールは完了です。Ollamaサービスはバックグラウンドで動作し、ターミナルや他のアプリケーションから利用できるようになります。
Linuxでのインストール
Linuxでは、シェルスクリプトを使った簡単なコマンドでインストールできます。多くの一般的なディストリビューション(Ubuntu, Debian, Fedora, Arch Linuxなど)をサポートしています。
- ターミナルを開く: Ctrl+Alt+Tなどのショートカットでターミナルエミュレータを開きます。
-
インストールスクリプトを実行: 以下のコマンドを実行します。
bash
curl -fsSL https://ollama.com/install.sh | shこのコマンドは、
curl
を使ってOllamaのインストールスクリプトをダウンロードし、それをsh
で実行します。スクリプトは自動的にOllamaをダウンロードし、/usr/local/bin/ollama
に配置し、Systemdサービスとして設定します。 -
インストール後の確認: スクリプトの実行が完了したら、Ollamaが正しくインストールされ、サービスが実行されているか確認できます。
“`bash
ollama –version例: ollama version 0.1.x
systemctl status ollama
Active: active (running) と表示されていればOK
“`
もしSystemdが利用できない環境の場合は、スクリプトはOllamaバイナリをインストールするだけで、サービスの設定は手動で行う必要があります。しかし、多くのモダンなLinuxディストリビューションではSystemdが標準です。
GPU対応について: インストールスクリプトは、システムにインストールされているGPU(NVIDIA, AMDなど)を検出し、対応するOllamaバイナリをダウンロードします。GPUが検出されない場合や、特定のGPUを使いたい場合は、環境変数を設定してからスクリプトを実行することも可能です。例えば、NVIDIA GPUを使いたい場合は以下のようになります。
“`bash
NVIDIA GPUを使用する場合
通常は自動検出されますが、明示的に指定する場合
例: CUDA_VERSION=12.1, AMD_GPU_ID=gfx90a, INTEL_GPU=1 など
curl -fsSL https://ollama.com/install.sh | sh
“`特定のGPUのバージョンや環境変数については、Ollamaの公式ドキュメントやGitHubリポジトリで詳細を確認してください。
Windowsでのインストール (WSL 2必須)
WindowsにOllamaをインストールするには、WSL 2が必須です。まだWSL 2をセットアップしていない場合は、Microsoftの公式ドキュメントを参照して先に設定してください。
-
WSL 2をインストール・有効化: PowerShellまたはコマンドプロンプトを管理者として開き、以下のコマンドを実行します。
powershell
wsl --installこれにより、WSL 2とデフォルトのLinuxディストリビューション(通常はUbuntu)がインストールされます。インストール後、Linux環境のセットアップ(ユーザー名とパスワードの設定)を行います。
-
Ollama公式サイトにアクセス: ウェブブラウザで https://ollama.com/ にアクセスします。
- 「Download」ボタンをクリック: ダウンロードボタンをクリックします。
- Windows版をダウンロード: オペレーティングシステムの選択肢から「Windows」を選び、インストーラーファイル(
.exe
形式)をダウンロードします。 - インストーラーを実行: ダウンロードした
.exe
ファイルをダブルクリックして実行します。 - インストール場所の選択: インストール場所を選択します。デフォルトの場所で問題ありません。
- インストール開始: 指示に従ってインストールを進めます。インストーラーは自動的にWSL 2環境内にOllamaをセットアップします。
- インストール完了: インストールが完了したら、Ollamaが起動し、バックグラウンドでサービスとして動作を開始します。WindowsのシステムトレイにOllamaアイコンが表示されることがあります。
これでWindows (WSL 2経由) へのインストールは完了です。WSL 2で開いたLinuxターミナルからollama
コマンドが利用できるようになります。
インストール後の確認
どのOSでもインストールが完了したら、ターミナル(macOS: ターミナル, Linux: ターミナル, Windows: WSL 2のLinuxターミナル)を開いて、以下のコマンドを実行し、Ollamaコマンドが利用できることを確認しましょう。
bash
ollama --version
Ollamaのバージョン情報が表示されれば、インストールは成功です。
次に、現在インストールされているモデルの一覧を表示してみましょう。
bash
ollama list
インストール直後はまだどのモデルもダウンロードしていないため、以下のように何も表示されないはずです。
(何も表示されない)
これで、Ollamaを使用する準備が整いました。
第三歩:モデルのダウンロードと基本的な実行
Ollamaのインストールが完了したら、いよいよ大規模言語モデルをダウンロードして実行してみましょう。Ollamaは ollama.com/library
という公式モデルライブラリを提供しており、そこから様々なモデルを簡単にダウンロードできます。
モデルライブラリの利用
ollama.com/library
にアクセスすると、利用可能なモデルとその説明、サイズ、提供者などが一覧表示されています。Llama 2, Mistral, Mixtral, Gemma, Code Llamaなど、人気のモデルが揃っています。各モデルには、パラメータ数や量子化レベルによって複数のバリアント(タグ)が存在します。例えば、llama2
には7b
, 13b
, 70b
といったパラメータ数の違いや、7b
, 7b:text
, 7b:chat
といった用途やフォーマットの違い、さらに量子化レベルを示すタグ(例: 7b-chat-q4_0
)などがあります。
ollama run
コマンド
Ollamaでモデルをダウンロードし、すぐに実行を開始するための最も基本的なコマンドが ollama run
です。
bash
ollama run <model_name>
<model_name>
には、ollama.com/library
に記載されているモデル名(タグを含むことも可能)を指定します。例えば、Llama 2のデフォルトバージョンを実行したい場合は、以下のコマンドを実行します。
bash
ollama run llama2
このコマンドを初めて実行すると、Ollamaは指定されたモデルがローカルに存在するか確認します。存在しない場合は、自動的に ollama.com/library
からダウンロードを開始します。
ダウンロードの進捗はターミナルに表示されます。モデルのサイズやインターネット接続速度によって、ダウンロードには数分から数十分かかる場合があります。
pulling manifest
pulling 99c032a0849d... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 3.8 GB/3.8 GB
pulling f2e38v34r3f1... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 11 KB/11 KB
verifying sha256 digest
using f2e38v34r3f1...
setting parameter system
setting parameter template
setting parameter license
setting parameter model_file
setting parameter safe_prompt
ダウンロードが完了し、モデルがロードされると、Ollamaは対話モードに入ります。
“`
Send a message (/? for help)
“`
対話モードでの使い方
>>> Send a message (/? for help)
と表示されたら、キーボードからプロンプト(質問や指示)を入力し、Enterキーを押します。Ollamaはモデルを使って応答を生成し、ターミナルに表示します。
“`
What is the capital of France?
The capital of France is Paris.“`
複数行の入力をしたい場合は、Shift+Enterで改行できます。入力の最後にEnterキーを押すと、プロンプトがモデルに送信されます。
対話を終了するには、/bye
と入力してEnterキーを押すか、Ctrl+D(Linux/macOS)またはCtrl+Z followed by Enter(Windows WSL)を押します。
“`
/bye
“`
モデルの指定方法(タグ)
ollama run
コマンドでは、モデル名に続けてタグを指定することで、特定のバリアントを実行できます。例えば、Llama 2の7B chatモデルの量子化レベル4を指定したい場合は、以下のようになります。
bash
ollama run llama2:7b-chat-q4_0
タグを指定しない場合、Ollamaは通常 latest
タグまたはモデルライブラリで指定されたデフォルトのタグを試します。
一度モデルをダウンロードしてしまえば、次回以降 ollama run
コマンドを実行した際にはダウンロードはスキップされ、すぐにモデルのロードと対話モードへの移行が行われます。
コマンドラインからの直接実行(非対話モード)
ollama run
は対話モードがデフォルトですが、プロンプトをコマンドライン引数として渡したり、標準入力から受け取ったりすることで、非対話的に実行することも可能です。これは、スクリプト内でOllamaを利用したい場合に便利です。
プロンプトをコマンドライン引数として渡す場合:
bash
ollama run llama2 "What is the capital of Germany?"
標準入力からプロンプトを受け取る場合(パイプを使用):
bash
echo "Generate a short poem about the sea." | ollama run mistral
この方法で実行すると、Ollamaはプロンプトに対する応答を標準出力に表示し、実行が完了するとすぐに終了します(対話モードには入りません)。
このように、ollama run
コマンドはOllamaを使ったローカルLLM実行の最も基本的な入り口となります。まずは、お気に入りのモデルをいくつかダウンロードして、対話モードでその性能を試してみることから始めましょう。
第四歩:モデルの管理と操作
Ollamaで複数のモデルを扱うようになると、それらを一覧表示したり、不要になったモデルを削除したりといった管理作業が必要になります。Ollamaはこれらの操作のためのコマンドラインツールを提供しています。
インストールされているモデルの一覧表示
ollama list
コマンドを使うと、ローカルにダウンロード済みのモデルとそのバージョン(タグ)、サイズ、最終更新日時を確認できます。
bash
ollama list
出力例:
NAME ID SIZE MODIFIED
llama2:latest f2e38v34r3f1 3.8 GB 2 minutes ago
mistral:latest 235f0205f541 4.1 GB 5 hours ago
codellama:7b d0617d3576d2 3.8 GB 2 days ago
my-custom-model:latest 1a2b3c4d5e6f 2.1 GB an hour ago
NAME
: モデル名とそのタグ(例:llama2:latest
)。ID
: モデルのユニークなハッシュ値。SIZE
: ディスク上のモデルファイルのサイズ。MODIFIED
: モデルが最後に使用されたか、ダウンロードされた日時。
このリストを確認することで、どのモデルがインストールされているか、どのくらいのディスク容量を占めているかなどを把握できます。
モデルのダウンロード(pull
コマンド)
ollama run
は初回実行時にモデルを自動的にダウンロードしますが、明示的にモデルをダウンロードしたい場合は ollama pull
コマンドを使用できます。
bash
ollama pull <model_name>[:<tag>]
例:
bash
ollama pull gemma:7b
このコマンドは、指定されたモデルの指定されたタグをダウンロードします。すでにそのモデルがローカルに存在し、リモートに新しいバージョンがある場合は、アップデートがダウンロードされます。最新バージョンがすでに存在する場合は、ダウンロードはスキップされます。
pull
コマンドは、複数のモデルをまとめてダウンロードしておきたい場合や、自動ダウンロードではなく手動でダウンロードプロセスを管理したい場合に便利です。
モデルの削除 (rm
コマンド)
不要になったモデルは ollama rm
コマンドで削除できます。モデルファイルは大きい場合が多いので、ディスク容量を節約するために定期的に不要なモデルを削除するのは良い習慣です。
bash
ollama rm <model_name>[:<tag>] [<model_name>[:<tag>] ...]
削除したいモデルの名前とタグを指定します。複数のモデルを一度に削除することも可能です。
例:
“`bash
llama2のデフォルトタグを削除
ollama rm llama2
mistralとcodellama:7bを削除
ollama rm mistral codellama:7b
“`
モデル名のみを指定した場合、デフォルトのタグ(通常はlatest
)が削除されます。特定のタグのモデルを削除したい場合は、必ずタグを含めて指定してください。
削除を実行する前に、Ollamaは確認メッセージを表示しません。実行するとすぐにモデルファイルが削除されるため、注意して使用してください。
モデルのプッシュ (push
コマンド)
Ollamaで作成したりカスタマイズしたりしたモデルを、他のOllamaユーザーと共有したい場合があります。ollama push
コマンドは、ローカルのモデルをOllamaモデルレジストリ(デフォルトは ollama.com
)にアップロードするために使用します。
bash
ollama push <model_name>
このコマンドを使用するには、ollama.com
でアカウントを作成し、ログインしている必要があります。通常、カスタムモデルを公開する場合に使用しますが、個人用のモデルをバックアップ目的でプッシュすることも可能です。
この機能は「Get started」セクションの範囲を超えるかもしれませんが、モデル作成と関連する重要な操作です。
モデルのアップデート
ollama pull <model_name>
コマンドは、指定したモデルの最新バージョンが存在すれば自動的にダウンロードしてアップデートを行います。特定のモデルの最新状態を保ちたい場合は、定期的に ollama pull
コマンドを実行すると良いでしょう。
モデル管理コマンドを使うことで、ローカルのOllama環境を整理し、必要なモデルだけを効率的に管理できます。
第五歩:REST APIによるプログラマブルな利用
Ollamaの強力な機能の一つは、REST APIを提供していることです。これにより、コマンドラインツールを使うだけでなく、プログラミング言語(Python, Node.js, Goなど)や他のアプリケーションからOllamaを呼び出し、LLMの機能を利用することができます。
なぜAPIを使うのか?
- アプリケーション連携: LLMを組み込んだ独自のアプリケーション(チャットボット、要約ツール、コード生成アシスタントなど)を開発できます。
- 自動化: 定型的なテキスト生成や分析タスクを自動化できます。
- Webサービス構築: OllamaをバックエンドとしたWebサービスを提供できます。
- 柔軟な制御: コマンドラインでは難しい、より細かなモデルの振る舞いやパラメータを制御できます。
Ollamaサービスが起動していれば、デフォルトで 127.0.0.1:11434
(または localhost:11434
)のアドレスでAPIエンドポイントが公開されます。
主要なAPIエンドポイント
Ollama APIは、以下のような主要なエンドポイントを提供しています(すべて POST
リクエストで利用可能)。
/api/generate
: プロンプトに対するテキスト生成。/api/chat
: 対話形式でのテキスト生成(チャットボット)。/api/list
: ローカルにインストールされているモデルの一覧取得。/api/pull
: モデルのダウンロード。/api/create
: カスタムモデルの作成。/api/delete
: モデルの削除。/api/show
: モデルの詳細情報取得(パラメータ、テンプレートなど)。/api/copy
: モデルのコピー。
ここでは、最も頻繁に利用されるであろう /api/generate
と /api/chat
を中心に解説します。
/api/generate
エンドポイント
このエンドポイントは、指定されたプロンプトに基づいてテキストを生成するために使用します。
リクエスト例 (curl)
ストリーミングなし(応答全体を受け取る):
bash
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt": "Why is the sky blue?"
}'
ストリーミングあり(生成されたテキストをチャンクごとに受け取る):
bash
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt": "Tell me a short story.",
"stream": true
}'
stream: true
を指定すると、モデルがテキストを生成するたびに部分的な応答が返されます。これは、チャットインターフェースなどでリアルタイムにテキストを表示するのに便利です。stream: false
(または省略)の場合、生成が完了するまで応答は返されません。
リクエストボディの構造:
model
(string, 必須): 使用するモデル名(タグを含む)。例:"llama2"
,"mistral:7b"
prompt
(string, 必須): モデルに与えるプロンプトテキスト。options
(object, オプション): 生成パラメータを制御するためのオプション。temperature
(number): 生成されるテキストのランダム性(0-2.0)。高いほどランダムになります。top_k
(integer): サンプリング時に考慮する最も確率の高いトークンの数。top_p
(number): サンプリング時に考慮する累積確率の閾値。num_ctx
(integer): モデルが考慮するコンテキストウィンドウのサイズ(トークン数)。- その他、多くのパラメータがあります。詳細はAPIドキュメントを参照してください。
system
(string, オプション): システムメッセージ。チャットAPIのシステムプロンプトと同様の役割を果たしますが、generateエンドポイントでも使用できます。template
(string, オプション): プロンプトに適用するカスタムテンプレート。ModelfileのTEMPLATE命令と同様。stream
(boolean, オプション): ストリーミング応答を有効にするか (デフォルト:false
)。
Pythonでの利用例 (requests
ライブラリ)
まず requests
ライブラリをインストールします。
bash
pip install requests
次に、Pythonスクリプトを作成します。
“`python
import requests
import json
url = “http://localhost:11434/api/generate”
model_name = “llama2” # または使用したいモデル名
prompt_text = “What is the largest ocean on Earth?”
payload = {
“model”: model_name,
“prompt”: prompt_text,
“stream”: False # ストリーミングなし
}
try:
response = requests.post(url, json=payload)
response.raise_for_status() # ステータスコードがエラーの場合は例外を発生させる
# ストリーミングなしの場合の応答処理
result = response.json()
print("Generated text:")
print(result.get("response"))
except requests.exceptions.RequestException as e:
print(f”Error calling Ollama API: {e}”)
“`
ストリーミングありの場合のPythonコード例:
“`python
import requests
import json
url = “http://localhost:11434/api/generate”
model_name = “mistral”
prompt_text = “Write a short poem about the stars.”
payload = {
“model”: model_name,
“prompt”: prompt_text,
“stream”: True # ストリーミングあり
}
try:
response = requests.post(url, json=payload, stream=True)
response.raise_for_status()
print("Generated text (streaming):")
for line in response.iter_lines():
if line:
try:
# 各行はJSONオブジェクトとして返される
json_response = json.loads(line)
# 'response' キーに生成されたテキストが含まれる
print(json_response.get("response"), end="", flush=True)
# 'done' キーが true になったら生成終了
if json_response.get("done"):
break
except json.JSONDecodeError:
print(f"Could not decode JSON from line: {line.decode('utf-8')}")
continue
print("\nEnd of generation.")
except requests.exceptions.RequestException as e:
print(f”Error calling Ollama API: {e}”)
“`
ストリーミング応答を処理する場合、各チャンクがJSONラインとして送られてくるため、response.iter_lines()
を使って1行ずつ読み込み、それぞれをJSONとしてパースする必要があります。
/api/chat
エンドポイント
/api/chat
エンドポイントは、対話(チャット)に特化しており、メッセージのリストを渡して応答を生成させることができます。これにより、過去の会話履歴をモデルに伝えることが容易になり、より自然な対話を実現できます。
リクエスト例 (curl)
bash
curl http://localhost:11434/api/chat -d '{
"model": "llama2",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "Hello!" }
],
"stream": false
}'
リクエストボディの構造:
model
(string, 必須): 使用するモデル名(タグを含む)。messages
(array, 必須): 対話履歴を表すメッセージオブジェクトの配列。各メッセージオブジェクトは以下の構造を持ちます。role
(string, 必須): メッセージの送信者。"system"
,"user"
,"assistant"
のいずれか。content
(string, 必須): メッセージのテキスト内容。
options
(object, オプション):/api/generate
と同様の生成パラメータ。stream
(boolean, オプション): ストリーミング応答を有効にするか (デフォルト:false
)。
messages
配列は、過去のターンを含めて渡します。例えば、ユーザーの発言、アシスタントの応答、ユーザーの次の発言、… といった順番でメッセージを追加していくことで、モデルは以前の会話の文脈を理解できます。
Pythonでの利用例 (requests
ライブラリ)
“`python
import requests
import json
url = “http://localhost:11434/api/chat”
model_name = “mistral” # または使用したいモデル名
対話履歴の例
messages = [
{ “role”: “system”, “content”: “You are a friendly chatbot that loves to tell jokes.” },
{ “role”: “user”, “content”: “Tell me a joke.” }
]
payload = {
“model”: model_name,
“messages”: messages,
“stream”: False # ストリーミングなし
}
try:
response = requests.post(url, json=payload)
response.raise_for_status()
result = response.json()
# chat エンドポイントの応答は messages 形式
assistant_message = result.get("message")
if assistant_message and assistant_message.get("role") == "assistant":
print("Assistant:", assistant_message.get("content"))
except requests.exceptions.RequestException as e:
print(f”Error calling Ollama API: {e}”)
“`
複数ターンの対話をシミュレーションする場合、最初の応答を受け取った後、その応答を "role": "assistant"
のメッセージとして messages
リストに追加し、次のユーザープロンプトを "role": "user"
として追加してから、再度 /api/chat
エンドポイントを呼び出します。
“`python
import requests
import json
url = “http://localhost:11434/api/chat”
model_name = “mistral”
最初のメッセージ
messages = [
{ “role”: “system”, “content”: “You are a friendly chatbot that loves to tell jokes.” },
{ “role”: “user”, “content”: “Tell me a joke.” }
]
print(“User:”, messages[-1][‘content’])
try:
# 1回目の呼び出し
response = requests.post(url, json={“model”: model_name, “messages”: messages, “stream”: False})
response.raise_for_status()
result = response.json()
assistant_message_1 = result.get(“message”)
print(“Assistant:”, assistant_message_1.get(“content”))
messages.append(assistant_message_1) # 応答を履歴に追加
# 2回目の呼び出し(前の会話履歴を含む)
next_user_message = { "role": "user", "content": "That was funny! Tell me another one." }
messages.append(next_user_message) # 次のユーザーメッセージを履歴に追加
print("User:", messages[-1]['content'])
response = requests.post(url, json={"model": model_name, "messages": messages, "stream": False})
response.raise_for_status()
result = response.json()
assistant_message_2 = result.get("message")
print("Assistant:", assistant_message_2.get("content"))
messages.append(assistant_message_2) # 応答を履歴に追加
except requests.exceptions.RequestException as e:
print(f”Error calling Ollama API: {e}”)
“`
このようにAPIを利用することで、Ollamaをバックエンドとして、より複雑なロジックを持つアプリケーションを構築することが可能になります。APIドキュメントはOllamaのGitHubリポジトリなどで公開されており、より詳細なエンドポイントやパラメータについて確認できます。
第六歩:自分だけのモデルを作成・カスタマイズする
Ollamaのもう一つの強力な機能は、既存のモデルをベースにカスタマイズしたり、独自のModelfileを使って新しいモデルを作成したりできることです。これにより、特定の用途に特化したモデルや、独自の振る舞いをするモデルを手軽に作ることができます。
Modelfileとは?
Modelfileは、Ollamaモデルを定義するためのレシピファイルのようなものです。Dockerイメージを定義するDockerfileに似ています。Modelfileには、どのベースモデルを使用するか、パラメータをどのように設定するか、プロンプトのフォーマット(テンプレート)をどうするか、システムメッセージは何か、といった情報が記述されます。
Modelfileはテキストファイルとして作成し、ollama create
コマンドを使って、そのModelfileから新しいモデルをビルドします。
Modelfileの基本構文
Modelfileは、一連の命令と引数で構成されます。主要な命令をいくつか紹介します。
-
FROM <base_model_name>
:- 新しいモデルのベースとなるモデルを指定します。
ollama.com/library
にあるモデル名(例:llama2
,mistral
)や、ローカルに存在するモデル名、またはGGUFファイルのパスを指定できます。 - 例:
FROM llama2:7b
- 例:
FROM ./path/to/my/model.gguf
- 新しいモデルのベースとなるモデルを指定します。
-
PARAMETER <parameter_name> <value>
:- モデルの推論パラメータを設定します。多くのパラメータがあります。
- 例:
PARAMETER temperature 0.8
(生成されるテキストのランダム性を調整)PARAMETER top_k 40
(サンプリング時に考慮する確率の高いトークンの数)PARAMETER top_p 0.9
(サンプリング時に考慮する累積確率の閾値)PARAMETER num_ctx 4096
(コンテキストウィンドウのサイズ)PARAMETER stop "STOP_SEQUENCE"
(生成を停止する文字列)- その他、多数のパラメータがあります。Modelfileドキュメントを参照してください。
-
TEMPLATE """<template_string>"""
:- ユーザーのプロンプトをモデルに渡す前に適用されるテンプレートを定義します。多くのモデルは特定のプロンプトフォーマットを期待します(例:
[INST] プロンプト [/INST]
)。このテンプレートを使って、ユーザーの生プロンプトを期待されるフォーマットに変換します。 - テンプレート文字列内では、以下の変数が使用できます。
{{ .Prompt }}
: ユーザーの生のプロンプト。{{ .System }}
: Modelfileで定義されたシステムメッセージ。{{ .Messages }}
: チャットAPIで使用されるメッセージ履歴(ModelfileのTEMPLATEはgenerate APIでも使用されるため、メッセージ履歴を扱う場合はより複雑なロジックが必要)。
- 例(Llama 2 chatのようなフォーマットの場合):
TEMPLATE """[INST] <<SYS>>{{ .System }}<</SYS>>\n{{ .Prompt }} [/INST]"""
- ユーザーのプロンプトをモデルに渡す前に適用されるテンプレートを定義します。多くのモデルは特定のプロンプトフォーマットを期待します(例:
-
SYSTEM """<system_message_string>"""
:- モデルに与えるシステムメッセージを定義します。これはモデルの全体的な振る舞いやペルソナを設定するために使用されます。
- 例:
SYSTEM """You are a helpful and friendly assistant."""
-
ADAPTER <path_to_lora_adapter>
:- LoRA (Low-Rank Adaptation) などのアダプターモデルをベースモデルに適用します。特定のタスクやデータセットでファインチューニングされたアダプターを使って、モデルの性能を向上させたり、特定のスタイルに合わせたりできます。
- アダプターは通常、既存のベースモデルと組み合わせて使用されます。
- 例:
ADAPTER ./path/to/my/finetuned/adapter.safetensors
これらの命令を組み合わせてModelfileを作成します。
Modelfileの作成例
特定のシステムプロンプトとパラメータを設定したカスタムモデルを作成するModelfileの例を見てみましょう。この例では、mistral
をベースモデルとして、常に短い応答を返すようにシステムプロンプトを設定し、生成のランダム性を少し上げています。
まず、my_short_answer_model.Modelfile
という名前のファイルを作成します。
“`modelfile
FROM mistral:latest
SYSTEM “””
You are a concise assistant. Respond to all queries with the shortest possible answer, typically one sentence.
“””
PARAMETER temperature 0.9
PARAMETER top_k 30
PARAMETER top_p 0.8
“`
FROM mistral:latest
: ベースとして最新のMistralモデルを使用します。SYSTEM "..."
: システムメッセージを設定し、モデルに簡潔に答えるよう指示しています。PARAMETER temperature 0.9
: 温度を少し高くして、応答の多様性を増やしています。PARAMETER top_k 30
,PARAMETER top_p 0.8
: サンプリング戦略を調整しています。
ollama create
コマンド
Modelfileを作成したら、ollama create
コマンドを使ってそのModelfileから新しいモデルをビルドします。
bash
ollama create <new_model_name> -f <Modelfile_path>
<new_model_name>
は自分で決める新しいモデルの名前です。<Modelfile_path>
は作成したModelfileへのパスです。
上記の例のModelfileを使ってモデルを作成する場合:
bash
ollama create my-short-answer-model -f ./my_short_answer_model.Modelfile
このコマンドを実行すると、Ollamaは指定されたModelfileを読み込み、ベースモデルを取得(必要ならダウンロード)し、定義された設定を適用して新しいモデルを作成します。作成されたモデルはローカルのOllamaライブラリに登録されます。
作成が完了すると、ollama list
コマンドで新しいモデルが追加されていることを確認できます。
bash
ollama list
NAME ID SIZE MODIFIED
...
my-short-answer-model:latest 1a2b3c4d5e6f 4.1 GB just now
...
カスタムモデルの実行とテスト
作成したカスタムモデルは、他のモデルと同様に ollama run
コマンドで実行できます。
bash
ollama run my-short-answer-model
対話モードに入ったら、いくつかのプロンプトを与えて、意図したようにモデルが応答するかテストしてみましょう。上記の例では、応答が短くなることを期待できます。
“`
What is the capital of Italy?
Rome.
Tell me about the solar system.
The solar system consists of the sun, planets, moons, asteroids, and comets.
Write a poem.
Nature whispers secrets in the breeze.
“`
このように、Modelfileを使うことで、ベースモデルの能力を活かしつつ、特定の指示に従う、あるいは特定のスタイルのテキストを生成するといった、より制御されたモデルを作成できます。
GGUFファイルからのモデル作成
ModelfileのFROM
命令では、ollama.com/library
のモデルだけでなく、ローカルのGGUFファイルも指定できます。GGUFはLLMのモデルパラメータを格納するためのフォーマットで、様々なモデルがこの形式で公開されています(例: Hugging Faceなど)。
ローカルにダウンロードしたGGUFファイルから直接Ollamaモデルを作成することも可能です。
“`modelfile
FROM /path/to/your/model.gguf
必要に応じてパラメータなどを追加
PARAMETER temperature 0.7
“`
このModelfileを使ってモデルを作成するコマンド:
bash
ollama create my-gguf-model -f ./my_gguf_model.Modelfile
これにより、外部で取得したGGUFファイルをOllamaの管理下に置いて利用できるようになります。
Modelfileとollama create
コマンドをマスターすることで、Ollamaを使ったローカルLLM活用の幅が大きく広がります。特定の業務や個人的なニーズに合わせたカスタムアシスタントを作成することも夢ではありません。
第七歩:より深くOllamaを活用するために
Ollamaの基本的な使い方をマスターしたら、さらに踏み込んだ活用方法や設定について知ることで、より効率的に、あるいは特定のニーズに合わせてOllamaを運用できます。
パフォーマンスチューニングとGPU設定
OllamaでLLMを実行する際のパフォーマンスは、主にハードウェア、特にGPUによって決まります。Ollamaはデフォルトで利用可能なGPUを自動的に検出して使用しようとしますが、場合によっては手動での調整が必要になることがあります。
- GPUの確認: OllamaがGPUを認識しているか確認するには、
ollama run <model_name>
を実行した際の出力や、ログファイルを確認します。GPUが使用されている場合、通常は関連するメッセージが表示されます。 - レイヤーオフロード: VRAMがモデル全体をロードするのに足りない場合、Ollamaはモデルの一部をVRAMに、残りをシステムRAMに配置します(レイヤーオフロード)。VRAMが多いほど、より多くのレイヤーをVRAMに置くことができ、パフォーマンスが向上します。Modelfileの
PARAMETER num_gpu <number>
命令や、環境変数で、明示的にGPUにロードするレイヤー数を指定できる場合もありますが、多くの場合Ollamaの自動判定で最適に近い設定がされます。 - GPUの選択 (Linux): 複数のGPUが搭載されているシステムでは、使用するGPUを選択するための環境変数(例:
CUDA_VISIBLE_DEVICES
for NVIDIA)を設定してからOllamaを起動する必要がある場合があります。 - Windows (WSL 2) でのGPU: Windows上でWSL 2経由でGPUを利用するには、Windows側のGPUドライバーとWSL 2側のドライバー(DirectMLまたはCUDA on WSL)が正しくセットアップされていることが不可欠です。性能が出ない場合は、これらのドライバー設定を見直してください。
最適なパフォーマンスを得るためには、システムのハードウェア構成(特にVRAM容量)に適したサイズのモデルを選択することが重要です。大きなモデルは強力ですが、ハードウェアが追いつかない場合はかえって遅くなることがあります。
プロキシ設定
Ollamaがモデルをダウンロードしたり、外部リソースにアクセスしたりする際にプロキシサーバー経由で接続する必要がある場合は、標準的な環境変数 HTTP_PROXY
および HTTPS_PROXY
を設定することで対応できます。
“`bash
例: HTTPプロキシを設定してモデルをプル
export HTTP_PROXY=”http://your_proxy_server:port”
export HTTPS_PROXY=”http://your_proxy_server:port”
ollama pull mistral
“`
これらの環境変数を設定してから ollama
コマンドを実行することで、プロキシ経由での通信が行われます。
データの保存場所と管理
Ollamaはダウンロードしたモデルファイルやカスタムモデルのデータを特定のディレクトリに保存します。このディレクトリの場所はOSによって異なります。
- macOS:
~/.ollama/models
- Linux:
/usr/share/ollama/.ollama/models
または~/.ollama/models
(インストール方法による) - Windows (WSL 2): WSL 2環境内のLinuxユーザーのホームディレクトリ以下にある
.ollama/models
など。正確なパスはWSL 2のLinux環境によります。
これらのディレクトリには大量のデータが保存される可能性があるため、ディスク容量に注意が必要です。不要なモデルは ollama rm
コマンドで削除して容量を解放しましょう。
また、Ollamaサービスやログファイルも特定の場所に保存されます。問題発生時のデバッグにはログファイルが役立ちます。ログファイルの場所もOSによって異なりますが、Systemdを使用しているLinuxシステムでは journalctl -u ollama
コマンドでログを確認できることが多いです。
Ollamaと他のツール/ライブラリの連携
OllamaはローカルLLMの実行基盤として非常に優れていますが、さらに高度なアプリケーションを構築するには、他のライブラリやフレームワークと連携することが一般的です。
- LangChain / LlamaIndex: これらのライブラリは、LLMを使ったアプリケーション開発のためのフレームワークです。Ollamaとの連携機能を提供しており、Ollamaで実行されているモデルを、これらのフレームワークの一部として簡単に利用できます。例えば、外部ドキュメントを使った質問応答システム(RAG: Retrieval Augmented Generation)を構築する際に、Ollamaモデルを言語モデルとして利用できます。
- 各種プログラミング言語向けライブラリ: Ollama APIをより簡単に呼び出すための非公式クライアントライブラリが様々な言語で開発されています。Python, JavaScript (Node.js), Goなどのライブラリを利用することで、API呼び出しのコード記述を簡略化できます。
- Web UI: Ollamaをバックエンドとして使用するWebインターフェースプロジェクトも存在します。これらを利用すると、よりユーザーフレンドリーなインターフェースでローカルLLMと対話できます。
これらの連携について掘り下げることはこの記事の範囲を超えますが、Ollamaを単体で使うだけでなく、エコシステム全体の中で活用することで、より高度で実用的なアプリケーションを開発できることを覚えておいてください。
第八歩:トラブルシューティングとヘルプ
Ollamaのセットアップや使用中に問題が発生した場合の一般的なトラブルシューティング方法と、ヘルプを得るためのリソースを紹介します。
よくある問題とその解決策
- インストール失敗:
- 権限不足: インストーラーの実行や、Linuxでのインストールスクリプト実行時には、管理者権限やsudoが必要な場合があります。
- 依存関係不足 (Linux): システムにOllamaが必要とするライブラリが不足している可能性があります。公式ドキュメントの依存関係リストを確認してください。
- WSL 2の問題 (Windows): WSL 2が正しくインストール・設定されていない、またはディストリビューションに問題がある可能性があります。
wsl --update
,wsl --shutdown
を試したり、WSL 2の再インストールを検討してください。
command not found: ollama
:- Ollamaが正しくインストールされ、実行パスが通っていない可能性があります。インストールディレクトリを確認し、必要であればPATH環境変数にOllamaバイナリのパスを追加してください。macOSやWindows (WSL) のインストーラーは通常自動で設定します。Linuxでは
/usr/local/bin
にインストールされることが多いです。
- Ollamaが正しくインストールされ、実行パスが通っていない可能性があります。インストールディレクトリを確認し、必要であればPATH環境変数にOllamaバイナリのパスを追加してください。macOSやWindows (WSL) のインストーラーは通常自動で設定します。Linuxでは
ollama list
でモデルが表示されない:- まだどのモデルもダウンロードしていない可能性があります。
ollama run <model_name>
またはollama pull <model_name>
を実行してモデルをダウンロードしてください。
- まだどのモデルもダウンロードしていない可能性があります。
- モデルダウンロード失敗:
- ネットワーク接続: インターネットに接続されているか確認してください。プロキシが必要な環境であれば、適切に設定されているか確認してください (
HTTP_PROXY
,HTTPS_PROXY
)。 - ディスク容量: モデルファイルは数GBになるため、ダウンロード先に十分なディスク空き容量があるか確認してください。
- ファイアウォール/セキュリティソフト: Ollamaの通信がファイアウォールやセキュリティソフトによってブロックされていないか確認してください。
- ネットワーク接続: インターネットに接続されているか確認してください。プロキシが必要な環境であれば、適切に設定されているか確認してください (
ollama run
実行時にエラー、または応答が遅すぎる:- メモリ不足: 実行しようとしているモデルに対してシステムRAMまたはVRAMが不足している可能性があります。
ollama list
でモデルサイズを確認し、お使いのハードウェア要件と照らし合わせてください。より小さいモデルを使用するか、ハードウェアの増設を検討してください。 - GPUの問題: GPUが正しく認識されていない、またはドライバーに問題がある可能性があります。OSのシステム情報や、
ollama run
実行時の出力、ログファイルでGPUに関するメッセージを確認してください。Linuxでは、NVIDIAであればnvidia-smi
、AMDであればrocm-smi
などのコマンドでGPUの状態を確認できます。Windows WSLでは、WSL 2内でnvidia-smi
などが使えるか確認します。 - CPU実行: GPUが利用できない場合、OllamaはCPUで実行されます。大規模モデルのCPU実行は非常に遅くなるため、これが原因である可能性があります。
- 他のプロセスとの競合: 他のアプリケーションが大量のメモリやGPUリソースを消費している可能性があります。タスクマネージャーやシステムモニターでリソース使用状況を確認してください。
- メモリ不足: 実行しようとしているモデルに対してシステムRAMまたはVRAMが不足している可能性があります。
- API接続問題 (
Connection refused
):- Ollamaサービスが実行されていない可能性があります。OSのサービスマネージャー(macOS: メニューバーアイコン, Linux:
systemctl status ollama
, Windows: タスクマネージャーなど)でOllamaサービスの状態を確認し、起動してください。 - ファイアウォールがポート 11434 での接続をブロックしている可能性があります。
- Ollamaサービスがデフォルトの
127.0.0.1
以外のアドレスでリッスンしている可能性があります(設定した場合)。
- Ollamaサービスが実行されていない可能性があります。OSのサービスマネージャー(macOS: メニューバーアイコン, Linux:
ログの確認方法
問題の診断にはOllamaのログファイルが役立ちます。ログファイルの場所はOSやインストール方法によって異なりますが、Systemdを使用しているLinuxシステムでは journalctl
コマンドが便利です。
“`bash
Ollamaサービスのログを確認
journalctl -u ollama
リアルタイムでログを追跡
journalctl -f -u ollama
“`
macOSやWindows (WSL) の場合、ログはGUIアプリケーションのメニューや特定のディレクトリに保存されていることがあります。Ollamaのメニューバーアイコンからログビューアにアクセスできることもあります。
コミュニティと公式リソース
問題が解決しない場合や、より高度な質問がある場合は、以下の公式リソースやコミュニティフォーラムを活用しましょう。
- Ollama 公式ドキュメント: https://ollama.com/ – 最新の情報、詳細な手順、APIドキュメントなどが掲載されています。
- Ollama GitHub リポジトリ: https://github.com/ollama/ollama – ソースコード、Issueトラッカー、ディスカッションフォーラムがあります。バグ報告や機能要望、他のユーザーとの情報交換に役立ちます。
- Ollama Discord サーバー: OllamaコミュニティはDiscordサーバーで活発に活動しています。リアルタイムでの質問や情報交換が可能です。公式ドキュメントやGitHubリポジトリから招待リンクを見つけられます。
これらのリソースを活用することで、多くの問題の解決策が見つかったり、他のユーザーからサポートを得られたりするでしょう。
終章:Ollamaとともに未来へ
この記事では、Ollamaを始めて使うにあたって必要な、インストールから基本的なモデル実行、API利用、カスタムモデル作成までのステップを詳細に解説しました。Ollamaは、かつては一部の専門家しかアクセスできなかったLLMの力を、ローカル環境で、誰でも手軽に利用できるようにする画期的なツールです。
Ollamaを使うことで、以下のような可能性が広がります。
- プライベートなAIアシスタントの構築: 外部に情報を送信することなく、ローカルで動作する高機能なAIアシスタントを作成できます。
- 開発ワークフローの改善: コード生成、ドキュメント要約、テストケース生成など、開発タスクをローカルLLMで効率化できます。
- 新しいアプリケーションの開発: Ollama APIを活用して、LLMを組み込んだ斬新なアプリケーションやサービスを開発できます。
- LLMの学習と研究: 様々なモデルを試したり、Modelfileを使ってモデルの振る舞いを調整したりすることで、LLMについて深く学ぶことができます。
この記事で紹介した内容は、Ollamaでできることのほんの一例に過ぎません。Ollamaモデルライブラリには、画像生成キャプションモデルや埋め込みモデルなど、様々な用途に特化したモデルも存在します。また、Modelfileにはここで紹介しきれなかった多くの設定項目や命令があります。
次のステップ
- 様々なモデルを試す:
ollama.com/library
にアクセスして、興味のある他のモデル(Code Llama, Mistral, Mixtral, Gemmaなど)をダウンロードし、その特徴や性能を比較してみてください。 - APIを使ってアプリケーションを開発する: PythonやNode.jsなど、使い慣れたプログラミング言語を使ってOllama APIを呼び出し、簡単なアプリケーション(例: チャットボットのWeb UI、コマンドラインツール)を作成してみてください。
- Modelfileをさらに探求する: Modelfileドキュメントを読み、異なるパラメータを試したり、プロンプトテンプレートを工夫したりして、自分だけのカスタムモデルを作成してみてください。
- コミュニティに参加する: OllamaのGitHubやDiscordに参加して、最新情報を得たり、他のユーザーと交流したり、質問したりしてみましょう。
Ollamaはまだ比較的新しいプロジェクトであり、活発に開発が進められています。今後も新しい機能が追加され、性能が向上していくことが期待されます。
ローカル環境でLLMを自在に動かすという体験は、単なる便利さを超え、AIの可能性をより身近に感じさせてくれるものです。この記事が、あなたがOllamaの世界へ一歩踏み出すための確かなガイドとなり、ローカルLLM活用の素晴らしい旅の始まりとなることを願っています。
さあ、あなたのコンピューターでOllamaを起動し、AIとの新たな対話を始めましょう!