CUBE SUGAR CONTAINER

技術系のこと書きます。

Mac: Ollama でローカル LLM を動かす

Ollama 1 はローカル LLM を動かすためのソフトウェアのひとつ。 一般的なラップトップやデスクトップマシンで動かすようなユースケースが主に想定されているように思う。 LLM の機能を不特定多数に提供するというよりは、マシンを操作しているユーザ自身が使用するイメージだろう。 似たようなユースケースで用いられるソフトウェアには、他にも LM Studio 2 などがある。 今回は、そんな Ollama を Mac から使う方法についてメモしておく。

使った環境は次のとおり。

$ sw_vers
ProductName:        macOS
ProductVersion:     15.5
BuildVersion:       24F74
$ uname -srm                
Darwin 24.5.0 arm64
$ sysctl machdep.cpu.brand_string
machdep.cpu.brand_string: Apple M2 Pro
$ ollama --version
ollama version is 0.9.0

もくじ

下準備

まず、Ollama は Homebrew を使ってインストールできる。

$ brew install --formula ollama

サーバを起動する

Ollama を利用するには、何をするにもまずはサーバのインスタンスを立ち上げる必要がある。

そのためには、Homebrew でインストールした場合には Ollama をサービスとして起動すれば良い。

$ brew services start ollama

あるいは、フォアグラウンドで実行したいときは単に ollama serve コマンドを叩いても良い。

$ ollama serve

設定を変更する

Ollama は、OLLAMA_ から始まる名前のシェル変数・環境変数を使って動作を変更できる。

たとえば、Homebrew のサービスからサーバを起動する場合には launchctl setenv で設定を変更する。 以下ではグローバルなコンテキスト長を 32768 トークンに変更している。

$ launchctl setenv OLLAMA_CONTEXT_LENGTH 32768

あるいは ollama serve コマンドで起動しているときは、単純にセッション変数として指定すれば良い。

$ OLLAMA_CONTEXT_LENGTH=32768 ollama serve

モデルをダウンロードする

続いてモデルをダウンロードするには ollama pull コマンドを使う。

以下では例として Gemma3 の 1B モデルを指定している。

$ ollama pull gemma3:1b
pulling manifest 
pulling 7cd4618c1faf: 100% ▕██████████████████▏ 815 MB                         
pulling e0a42594d802: 100% ▕██████████████████▏  358 B                         
pulling dd084c7d92a3: 100% ▕██████████████████▏ 8.4 KB                         
pulling 3116c5225075: 100% ▕██████████████████▏   77 B                         
pulling 120007c81bf8: 100% ▕██████████████████▏  492 B                         
verifying sha256 digest 
writing manifest 
success

Ollama が公式が提供しているモデルについては以下の Web ページで検索できる。

ollama.com

ダウンロードしたモデルは ollama ls コマンドで確認できる。

$ ollama ls           
NAME         ID              SIZE      MODIFIED    
gemma3:1b    8648f39daa8f    815 MB    6 hours ago

モデルの情報を得る

モデルの詳しい情報は ollama show コマンドで確認できる。

$ ollama show gemma3:1b
  Model
    architecture        gemma3     
    parameters          999.89M    
    context length      32768      
    embedding length    1152       
    quantization        Q4_K_M     

  Capabilities
    completion    

  Parameters
    stop           "<end_of_turn>"    
    temperature    1                  
    top_k          64                 
    top_p          0.95               

  License
    Gemma Terms of Use                  
    Last modified: February 21, 2024    
    ...                                 

ターミナルでモデルと対話する

ollama run コマンドを使うと、ターミナルを使ってモデルと対話できる。

$ ollama run gemma3:1b
>>> こんにちは!
こんにちは!何かお手伝いできることはありますか?😊 

どんなことでも構いません。例えば:

*   質問に答える
*   文章を作成する
*   アイデアを出す
*   情報検索をする

など、お気軽にお申し付けください。

なお、ollama ps コマンドを使うと、現在どのモデルがメモリ上で動作しているか確認できる。

$ ollama ps                     
NAME         ID              SIZE      PROCESSOR    UNTIL              
gemma3:1b    8648f39daa8f    2.2 GB    100% GPU     4 minutes from now

OpenAI-like な WebAPI を利用する

Ollama は OpenAI-like な Web API を提供している。 この Web API を通してモデルの機能を利用できる。

たとえば completions の API を curl(1) で叩いてみよう。 API はループバックアドレスの 11434 ポートで提供されている。

$ curl -s http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gemma3:1b",
  "messages": [
    { "role": "user", "content": "ご機嫌いかがですか?" }
  ]
}' | jq .

すると JSON で結果が得られる。

$ curl -s http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gemma3:1b",
  "messages": [
    { "role": "user", "content": "ご機嫌いかがですか?" }
  ]
}' | jq .
{
  "id": "chatcmpl-578",
  "object": "chat.completion",
  "created": 1749812263,
  "model": "gemma3:1b",
  "system_fingerprint": "fp_ollama",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "元気です、ありがとう! 😊 あなたはいかがですか? \n\n何かお手伝いできることはありますか?\n"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 16,
    "completion_tokens": 24,
    "total_tokens": 40
  }
}

すべての API のドキュメントは以下の Web ページで確認できる。

github.com

そして、API を通して様々なツールと連携できる。 連携できるツールは以下のページにまとめられている。

github.com

必要に応じて、先ほど叩いた API のエンドポイントをツールに設定することで連携が可能になる。

不要になったモデルを削除する

LLM のファイルはサイズが大きいので、不要になったときは消したくなることもある。

そんなときは ollama rm コマンドを使って削除できる。

$ ollama rm gemma3:1b 
deleted 'gemma3:1b'

いじょう。