Jiwon Min Developer

Ollama: 自分のマシンで言語モデルを実行する

クラウドベースのAIサービスは強力ですが、いくつかの欠点があります。コスト、データプライバシー、インターネットへの依存性がその代表です。機密データを扱ったり、オフライン環境でAI機能が必要だったり、あるいは単に実験コストを管理したい場合に、セルフホスティングが代替案となり得ます。しかし、言語モデルを自分で設定するプロセスは複雑で、多くの時間を要します。

Ollamaは、このような問題を解決する優れたオープンソースプロジェクトです。複雑な設定なしに、いくつかのコマンドだけで個人のコンピュータで強力な言語モデルを動かすことができます。特定のモデルをダウンロードし、実行し、HTTPエンドポイントを通じて他のサービスと連携するプロセスを極めて単純化します。これにより、開発者はモデル自体の活用方法により集中できるようになります。

Ollama: 自分のマシンで言語モデルを実行する

© AI生成画像


Ollamaとは何か?

Ollamaは、言語モデルを実行するためのサーバーとして機能します。内部的には、llama.cpp のような最適化された推論エンジンを活用してモデルをメモリにロードし、ユーザーのリクエストを処理します。開発者はOllamaが提供するシンプルなCLIやRESTfulエンドポイントを通じてモデルと対話します。

その核心的な価値は「シンプルさ」です。モデルのダウンロード、重み管理、GPU割り当てといった面倒な作業を抽象化し、ターミナルで ollama run <model_name> の一行ですべてを開始できます。

基本的なインストールと実行

Ollamaのインストールは、お使いのオペレーティングシステムに応じて簡単なスクリプトを実行するだけで完了します。

macOS & Linux

# スクリプトをダウンロードして実行します。
curl -fsSL https://ollama.com/install.sh | sh

インストールが完了すれば、好きなモデルをすぐに実行できます。以下はMetaのLlama 3 8Bモデルを実行する例です。

# 初回実行時にモデルが自動的にダウンロードされます。
ollama run llama3:8b

# プロンプトが表示されたら質問を入力します。
>>> Tell me a joke about programming.

ollama list コマンドで、現在マシンにインストールされているモデルの一覧を確認できます。

HTTPサーバーによる対話

Ollamaの真の強力さは、内蔵されたHTTPサーバーにあります。ollama run コマンドを実行すると、バックグラウンドでサーバーが起動します。このサーバーは /api/generate エンドポイントを通じて、モデルの推論機能を外部に公開します。

以下はcurlを使ってLlama 3モデルにリクエストを送る例です。

curl http://localhost:11434/api/generate -d '{
  "model": "llama3:8b",
  "prompt": "Why is the sky blue?",
  "stream": false
}'

stream: false オプションは、応答を一度に受け取ることを意味します。このオプションを true に設定すると、ChatGPTのように単語トークンが生成されるたびにストリーミング形式で応答を受け取ることができます。この機能は、リアルタイムのチャットインターフェースを実装する際に非常に便利です。

Modelfileによるカスタマイズ

Ollamaは Modelfile という設定ファイルを通じて、既存のモデルをカスタマイズする機能を提供します。これはDockerfileと似た構文を持っています。システムプロンプトを変更したり、特定のパラメータを調整したりして、独自のモデルを作成できます。

例として、常にJSON形式でのみ応答するモデルを作成してみましょう。

JsonLlama.modelfile

# ベースモデルを指定
FROM llama3:8b

# モデルの基本動作を定義するシステムメッセージ
SYSTEM """
You are a helpful expert JSON generator.
You will only respond with valid JSON.
Do not add any other text outside of the JSON response.
"""

この Modelfile をビルドして、json-llama という名前の新しいモデルを生成します。

ollama create json-llama -f ./JsonLlama.modelfile

これで ollama run json-llama を実行すれば、ここで定義したシステムプロンプトが適用されたモデルと対話できます。

実務上の考慮事項とトレードオフ

ハードウェアの制約

自身のデバイスで言語モデルを運用する際の最大の制約は、ハードウェア、特にVRAMです。モデルのパラメータサイズに比例して、VRAMの要求量が決まります。

  • 8Bモデル (Llama 3, Mistral): 最低8GBのVRAMを推奨
  • 13Bモデル: 最低16GBのVRAMを推奨
  • 70Bモデル: 48GB以上のVRAMが必要で、一般的な個人用デバイスでの実行は困難です。

VRAMが不足すると、モデルの一部がシステムRAMにオフロードされ、推論速度が急激に低下します。

モデル選択の重要性

すべてのタスクに最大のモデルが必要なわけではありません。タスクの複雑さに合わせて適切なサイズのモデルを選択することが重要です。簡単なテキスト分類や要約作業は、7Bや8Bのモデルでも十分に良い性能を発揮します。一方、複雑な論理的推論や専門的な文章作成には、より大きなモデルが有利になることがあります。

Ollamaライブラリで、さまざまなモデルとその特徴を確認できます。

よくある失敗シナリオ:VRAM不足

新しいモデルを実行しようとする際に最もよく遭遇する失敗は、VRAM不足による異常な速度低下です。ターミナルの応答が極端に遅くなったり、GPUファンが最大で回転しているにもかかわらず結果が出力されなかったりします。この場合、より小さなモデルに変更するか、現在実行中の他のプロセスを終了してVRAMを確保する必要があります。

結論

Ollamaは、セルフホスティング言語モデルの参入障壁を大幅に引き下げました。開発者はインフラ設定の負担から解放され、迅速にプロトタイプを作成したり、パーソナライズされたAI機能を自身のワークフローに統合したりできます。もちろん、ハードウェアの制約やモデル選択というトレードオフは存在しますが、コストとプライバシーの面でクラウドサービスの優れた代替案となります。AIベースの機能を探求するすべての開発者にとって、Ollamaは不可欠なツールの一つとなるでしょう。

参考資料