June 1, 2024

OllamaでローカルLLMを試す

Ollamaとは?

Ollamaはローカル環境で大規模言語モデル(LLM)を簡単に実行できるツール。
自分のPCやサーバーでLLama 3Phi 3Gemmaなどのオープンソースモデルを試して遊ぶことができる。
GUIは無いので、CUIに慣れている人向け。

試した環境

  • Apple Macbook Air
    • CPU: Apple M2
    • GPU: Apple M2
    • Mem: 16 GB
    • OS: Sonoma 14.5
  • HP Victus 16
    • CPU: AMD Ryzen 7 5800H with Radeon Graphics 3.20 GHz
    • GPU: NVIDIA GeForce RTX 3060 Laptop GPU
    • Mem: 16 GB
    • OS: Windows 11 Home 23H2

インストール手順

macOSでもWindowsでも、公式サイトからダウンロードしてインストーラを実行するだけ。

または、Windowsならwingetコマンドで、

PS C:\Users\nissy> winget install ollama

macOSでHomebrewをインストールしているならbrewコマンドでインストール可能。

nissy@MacBook-Air ~ % brew install --cask ollama

Launchpadに追加しなくていいとか、Ollamaを起動したらシステムトレイに表示されなくていいなら--caskは不要。

nissy@MacBook-Air ~ % brew install ollama

簡単な使い方

Windows版もmacOS版もCUI操作なので、どちらの場合でもターミナルからコマンド実行する。
以降、macOSとWindowsのプロンプトが混ざっているけど、どちらも同じコマンドなので気にしないでほしい。

ヘルプはこんな感じ。

nissy@MacBook-Air ~ % ollama -h
Large language model runner

Usage:
  ollama [flags]
  ollama [command]

Available Commands:
  serve       Start ollama
  create      Create a model from a Modelfile
  show        Show information for a model
  run         Run a model
  pull        Pull a model from a registry
  push        Push a model to a registry
  list        List models
  ps          List running models
  cp          Copy a model
  rm          Remove a model
  help        Help about any command

Flags:
  -h, --help      help for ollama
  -v, --version   Show version information

Use "ollama [command] --help" for more information about a command.

OllamaはDockerみたいな感じで、そのままコマンドを実行するとDockerデーモンが動いていない時みたいに、こんな風に怒られる。

nissy@MacBook-Air ~ % ollama list
Error: could not connect to ollama app, is it running?

--caskを付けずにインストールしたmacOS版のみ怒られる。
 --cask付きやWindows版等、LaunchpadやスタートメニューにOllamaが登録されるインストールをした場合は、裏で自動的にollama serveが実行され127.0.0.1:11434でリッスンを開始してくれるので、怒られずに応答がある。

なので、別のターミナルでollamaを起動する。

nissy@MacBook-Air ~ % ollama serve

さっきはErrorになったコマンドも怒られなくなる。

nissy@MacBook-Air ~ % ollama list
NAME    ID      SIZE    MODIFIED

serveを実行したターミナルではそのままOllamaのログが表示され続けるので、別ターミナルで実行する。

言語モデルのダウンロード

Ollamaで使える言語モデルの一覧は公式サイトにある。
例えばgemmaをダウンロードするにはこんな感じ。

PS C:\Users\nissy> ollama pull gemma
pulling manifest
pulling ef311de6af9d... 100% ▕████████████████████████████████████████████████████████▏ 5.0 GB
pulling 097a36493f71... 100% ▕████████████████████████████████████████████████████████▏ 8.4 KB
pulling 109037bec39c... 100% ▕████████████████████████████████████████████████████████▏  136 B
pulling 65bb16cf5983... 100% ▕████████████████████████████████████████████████████████▏  109 B
pulling 0c2a5137eb3c... 100% ▕████████████████████████████████████████████████████████▏  483 B
verifying sha256 digest
writing manifest
removing any unused layers
success
PS C:\Users\nissy> ollama list
NAME            ID              SIZE    MODIFIED
gemma:latest    a72c7f4d0a15    5.0 GB  2 minutes ago

Ollamaとチャットしてみる

ollama runでチャットを開始できる。
Dockerと同じように、モデルがpull済みならそのまま実行できるし、

nissy@MacBook-Air ~ % ollama run gemma
>>> Send a message (/? for help)

pull済みでなければダウンロードしてくれる。

PS C:\Users\nissy> ollama run llama3
pulling manifest
pulling 6a0746a1ec1a... 100% ▕████████████████████████████████████████████████████████▏ 4.7 GB
pulling 4fa551d4f938... 100% ▕████████████████████████████████████████████████████████▏  12 KB
pulling 8ab4849b038c... 100% ▕████████████████████████████████████████████████████████▏  254 B
pulling 577073ffcc6c... 100% ▕████████████████████████████████████████████████████████▏  110 B
pulling 3f8eb4da87fa... 100% ▕████████████████████████████████████████████████████████▏  485 B
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> Send a message (/? for help)

ollama runにモデル名を指定してLLama3とチャットしてみる。
終了するときは/bye

nissy@MacBook-Air ~ % ollama run llama3
>>> あなたの名前を教えてください。
😊 My name is LLaMA, which stands for "Large Language Model Application". I'm a computer program designed to
understand and generate human-like language. I don't have a personal name in the classical sense, but you can call
me LLaMA if you like! 🤖

>>> 日本語で回答してください。あなたの名前は?
😊 私の名前はLLaMAです。Large Language Model Applicationの略称で、コンピューター プログラムとして作成された人間の
うに言語を理解し、生成するためのシステムです。私にはクラシック的な名前はありませんが、好きならLLaMAと呼ぶことがで
ます! 🤖

>>> /?
Available Commands:
  /set            Set session variables
  /show           Show model information
  /load <model>   Load a session or model
  /save <model>   Save your current session
  /clear          Clear session context
  /bye            Exit
  /?, /help       Help for a command
  /? shortcuts    Help for keyboard shortcuts

Use """ to begin a multi-line message.

>>> /bye
nissy@MacBook-Air ~ %

リッスンアドレスを変更する

Ollamaはそのまま起動すると127.0.0.1:11434でリッスンする。

nissy@MacBook-Air ~ % netstat -an | grep 11434
tcp4       0      0  127.0.0.1.11434        *.*                    LISTEN

LAN内の別PCからOllamaのAPIを叩きたい場合はOLLAMA_HOSTで指定すればlocalhost以外でリッスンできる。
※ 192.168.100.100は自分のPCのIPアドレスに置き換える

nissy@MacBook-Air ~ % OLLAMA_HOST=192.168.100.100:11434 ollama serve
nissy@MacBook-Air ~ % netstat -an | grep 11434
tcp4       0      0  192.168.100.100.11434    *.*                  LISTEN

WindowsのPowerShellで環境変数を指定しつつコマンド実行するならこんな感じ。

PS C:\Users\nissy> $env:OLLAMA_HOST="192.168.100.201:11434"; ollama serve

Windowsはgrepが無いので、代わりにfindstrWhere-Objectを使う。

PS C:\Users\nissy> netstat -an | findstr 11434
  TCP         192.168.100.201:11434    0.0.0.0:0              LISTENING
PS C:\Users\nissy> netstat -an | Where-Object { $_ -match "11434" }
  TCP         192.168.100.201:11434    0.0.0.0:0              LISTENING

macOSからWindowsのOllamaを叩くと返事があった。

nissy@MacBook-Air ~ % curl 192.168.100.201:11434
Ollama is running%

この先の遊び方

Open InterpreterDifyと組み合わせるとより面白いけど、それは別の記事にしてみる。
Ollamaの公式サイトでは用意されていないFugaku-LLMELYZAを試してみるのも面白そう。

© 2020 nissy-lab.com