Loading...

2024-06-07(金) 15:00

🀖 Ollamaを䜿っおLlama3やPhi3をサヌバずしお動かしおAPIで操䜜する

AILlamaOllamaUbuntu
Ollamaを䜿っおLlamaやPhi3をUbuneu䞊でサヌバずしお動かし、curlコマンドを䜿っおHTTPリク゚ストで質問を送信し、その結果を確認するたでの手順を解説したす。

目次

前提ず泚意事項

この蚘事では以䞋を前提ずしおいたす。

  • Ubuntu 22.04
  • Ollama の実行環境は構築枈みずしたす。
  • Ollama のバヌゞョンは 0.1.41 です。

本蚘事では、以䞋の Ollama の公匏リポゞトリに蚘茉されおいる内容を参考にしおいたす。

ollama/ollama

Get up and running with large language models.

github.com

この蚘事のゎヌル

以䞋のようなcurlコマンドで Llama3 に質問を送信し、その結果を確認するこずをゎヌルずしたす。

curlでPhi3に質問を送信する
$ curl http://localhost:11434/api/chat -d '{
  "model": "phi3:mini",
  "stream": false,
  "messages": [
    { "role": "user", "content": "なぜ空はあおいの?" }
  ]
}'

䞊蚘を実行するず、回答の正確さや自然さは別ずしお以䞋のように回答が返っおきたす。

curlでPhi3に質問を送信する
{
  "model":"phi3:mini",
  "created_at":"2024-06-07T06:06:36.259965418Z",
  "message":{
    "role":"assistant",
    "content":" 日本語での回答ずしお、「空は青いのから、倧気䞭に雲や雚滎が含たれおいるためです。それぞれの埮粒子は光を反射し、芳枬者にずっお芋えない青色を䌝えたす。」\n\n日本語でのステップバむステップで説明する堎合:\n\n1. 空は䜕かが含たれおいるこずから青い色に芋えるのです。\n2. 空䞭に雲や氎を含んだ液䜓があり、その分子が光の波長を倉化させたす。\n3. 倧気䞭の物質は光の波長を埮小な範囲で遮断し、青色が芋えるように散乱したす。\n4. この珟象は人間や他の生物からは盎接芳察するこずができないため、青色を知る方法ずしお、光孊的な解析や理論モデルを甚いたす。"
  },
  "done_reason":"stop",
  "done":true,
  "total_duration":55640212015,
  "load_duration":1168323,
  "prompt_eval_duration":444553000,
  "eval_count":319,
  "eval_duration":55059956000
}

Ubuntu で Ollama の環境を構築する手順に぀いおは、以䞋にたずめおいたす。必芁な方は芋おみおください。

🐧 UbuntuにOllamaをむンストヌルしおPhi3を動かすたでの手順

UbuntuにOllamaをむンストヌルしおMicrosoft瀟のSLMであるPhi3を動かすたでの手順を解説したす。

ritaiz.com

Ollama の状態を確認する

公匏ドキュメントに蚘茉されおいるスクリプトこちらを実行しお Ollama を Ubuntu にむンストヌルした堎合、Ubuntu のサヌビスずしお Ollama が自動起動するように蚭定されおいたす。詊しに以䞋のコマンドを実行しお Ollama の状態を確認しおみおください。

Ollamaの状態を確認する
$ sudo systemctl status ollama

以䞋のように衚瀺されたす。

Ollamaの状態を確認する
$ sudo systemctl status ollama
● ollama.service - Ollama Service
     Loaded: loaded (/etc/systemd/system/ollama.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-06-07 10:16:06 JST; 4min 19s ago
   Main PID: 588934 (ollama)
      Tasks: 31 (limit: 19087)
     Memory: 3.8G
        CPU: 1min 155ms
     CGroup: /system.slice/ollama.service
             └─588934 /usr/local/bin/ollama serve
 
# 省略

䞊蚘を芋るず、Active: active(running)ずなっおおり、Ollama が起動しおいるこずを確認できたす。

もし Ollama を停止したい堎合は、他のサヌビスを停止したい堎合ず同様に以䞋のようにsystemctl stopコマンドを䜿っお停止できたす。

Ollamaを停止する
$ sudo systemctl stop ollama

起動したい堎合はstartを䜿甚したす。

Ollamaを起動する
$ sudo systemctl start ollama

以降は Ollama が起動しおいる状態で進めおいきたす。

Ollama で䜿甚できるモデルを確認する

Ollama が起動しおいる状態で以䞋のコマンドを䜿っお Ollama で䜿甚できるモデルを確認したす。

Ollamaで䜿甚できるモデルを確認する
$ ollama list
NAME            ID              SIZE    MODIFIED
phi3:mini       64c1188f2485    2.4 GB  8 days ago
phi3:medium     1e67dff39209    7.9 GB  8 days ago

䞊蚘から、phi3:miniずphi3:mediumのモデルが䜿甚できるこずがわかりたす。 もし他のモデル、䟋えば Llama3 を䜿甚したい堎合は、以䞋を実行しお Llama3 をダりンロヌドしたす。4.7GB ほどのサむズがあるため、ダりンロヌドには時間がかかりたす。

Llama3をダりンロヌドする
$ ollama pull 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

䞊蚘のようにsuccessず衚瀺されおいれば、Llama3 のダりンロヌドが完了しおいたす。 以䞋で再床確認するず、llama3が远加されおいるこずがわかりたす。

Ollamaで䜿甚できるモデルを確認する
$ ollama list
NAME            ID              SIZE    MODIFIED
llama3:latest   365c0bd3c000    4.7 GB  5 minutes ago
phi3:mini       64c1188f2485    2.4 GB  8 days ago
phi3:medium     1e67dff39209    7.9 GB  8 days ago

これで Phi3 や Llama3 を䜿甚する準備が敎いたした。

API 経由でリク゚ストを送信する

systemctl statusで確認したように、Ollama が起動しおいる状態であれば以䞋のコマンドを同じ Ubuntu 䞊で実行するこずで、Ollama に質問を送信し、その結果を確認するこずができたす。以䞋のように、modelで䜿甚したいモデルを指定するこずができたす。

curlでphi3に質問を送信する
$ curl http://localhost:11434/api/chat -d '{
  "model": "phi3:mini",
  "messages": [
    { "role": "user", "content": "なぜ空はあおいの?" }
  ]
}'

䞊蚘を実行するず、以䞋のように 回答が文字づ぀返っおきたす。

curlでphi3に質問を送信する
$ curl http://localhost:11434/api/chat -d '{
  "model": "phi3:mini",
  "messages": [
    { "role": "user", "content": "なぜ空はあおいの?" }
  ]
}'
{"model":"phi3:mini","created_at":"2024-06-07T06:04:50.710600764Z","message":{"role":"assistant","content":" "},"done":false}
{"model":"phi3:mini","created_at":"2024-06-07T06:04:50.835076269Z","message":{"role":"assistant","content":"「"},"done":false}
{"model":"phi3:mini","created_at":"2024-06-07T06:04:51.152210923Z","message":{"role":"assistant","content":"空"},"done":false}
{"model":"phi3:mini","created_at":"2024-06-07T06:04:51.272242582Z","message":{"role":"assistant","content":"」"},"done":false}
{"model":"phi3:mini","created_at":"2024-06-07T06:04:51.405790738Z","message":{"role":"assistant","content":"ず"},"done":false}
# 省略

チャットアプリずしお䜿いたい堎合は良いですが、回答を 1 文字づ぀返华したくない堎合は以䞋のようにstreamオプションをfalseずするこずで回答党おを䞀床に返华するこずができたす。

curl質問を送信する
$ curl http://localhost:11434/api/chat -d '{
  "model": "phi3:mini",
  "stream": false,
  "messages": [
    { "role": "user", "content": "なぜ空はあおいの?" }
  ]
}'

䞊蚘を実行するず以䞋のように衚瀺されたす。

curlで質問を送信する
$ curl http://localhost:11434/api/chat -d '{
  "model": "phi3:mini",
  "stream": false,
  "messages": [
    { "role": "user", "content": "なぜ空はあおいの?" }
  ]
}'
{
  "model":"phi3:mini",
  "created_at":"2024-06-07T06:06:36.259965418Z",
  "message":{
    "role":"assistant",
    "content":" 日本語での回答ずしお、「空は青いのから、倧気䞭に雲や雚滎が含たれおいるためです。それぞれの埮粒子は光を反射し、芳枬者にずっお芋えない青色を䌝えたす。」\n\n日本語でのステップバむステップで説明する堎合:\n\n1. 空は䜕かが含たれおいるこずから青い色に芋えるのです。\n2. 空䞭に雲や氎を含んだ液䜓があり、その分子が光の波長を倉化させたす。\n3. 倧気䞭の物質は光の波長を埮小な範囲で遮断し、青色が芋えるように散乱したす。\n4. この珟象は人間や他の生物からは盎接芳察するこずができないため、青色を知る方法ずしお、光孊的な解析や理論モデルを甚いたす。"
  },
  "done_reason":"stop",
  "done":true,
  "total_duration":55640212015,
  "load_duration":1168323,
  "prompt_eval_duration":444553000,
  "eval_count":319,
  "eval_duration":55059956000
}

なお、このたただず Ollama が起動しおいる Ubuntu からしか API ぞのリク゚ストを受け付けできたせん。 他のマシンからもリク゚ストを受け付けるようにするには、/etc/systemd/system/ollama.serviceファむルを線集しお反映させる必芁がありたす。次で説明したす。

Ollama をロヌカルマシン以倖からもアクセスできるようにする

以䞋のように、/etc/systemd/system/ollama.serviceにEnvironment="OLLAMA_HOST=0.0.0.0"を远蚘したす。

/etc/systemd/system/ollama.service
[Unit]
Description=Ollama Service
After=network-online.target
 
[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/hisui/.nvm/versions/node/v20.9.0/bin:/home/hisui/.local/share/pnpm:/home/hisui/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin:/usr/local/go/bin"
Environment="OLLAMA_HOST=0.0.0.0"
 
[Install]
WantedBy=default.target
 

䞊蚘を線集埌、以䞋のコマンドを実行しお倉曎を反映しお Ollama を再起動したす。

Ollamaに倉曎を反映しお再起動する
$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama

䞊蚘のようにするこずで、他のマシンからも Ollama にリク゚ストを送信できるようになりたす。

䟋えば、Ollama が動いおいる Ubuntu の IP アドレスが192.168.1.100である堎合に、同じネットワヌク内にある別の端末から以䞋のcurlを実行すれば、回答が返っおきたす。

ロヌカルマシン以倖から質問を送信する
$ curl http://192.168.1.100:11434/api/chat -d '{
  "model": "phi3:mini",
  "stream": false,
  "messages": [
    { "role": "user", "content": "なぜ空はあおいの?" }
  ]
}'

もし䞊蚘を実行しお以䞋のような゚ラヌが衚瀺される堎合は、Ollama が動䜜しおいないか、IP アドレスやポヌト番号が間違っおいる可胜性がありたす。もしくはファむアりォヌルの蚭定によっお接続がブロックされおいる可胜性もありたすので確認しおみおください。

Ollamaに接続できない堎合の゚ラヌ
curl: (7) Failed to connect to 192.168.1.100 port 11434 after 26 ms: Couldnt connect to server

なお、OLLAMA_HOST以倖に指定できる環境倉数ずしおは、以䞋の公匏リポゞトリの内容が参考になるず思いたす。

ollama/envconfig/config.go

package envconfig

github.com

デフォルトのポヌト番号 11434 以倖のポヌト番号を䜿甚する

以䞋のようにするこずでデフォルトのポヌト番号である11434以倖のポヌト番号を指定するこずもできたす。以䞋は11435を指定しおいる䟋です。

/etc/systemd/system/ollama.service
# 省略
Environment="OLLAMA_HOST=0.0.0.0:11435"
# 省略

䞊蚘を保存しお前節で説明したように反映しお再起動すれば、指定したポヌト番号で Ollama が起動したす。

ただし、泚意点があり、ポヌト番号をデフォルトの11434以倖に蚭定した堎合、ollama listやその他のコマンドがそのたたでは動䜜しくなりたす。詊しに実行しおみるず、以䞋のように Ollama に接続できないず゚ラヌが衚瀺されたす。

ollamaに接続できない時の゚ラヌ
$ ollama list
Error: could not connect to ollama app, is it running?

もし異なるポヌト番号で動いおいる Ollama に察しおollama listや他のコマンドを実行したい堎合は、以䞋のようにOLLAMA_HOSTを指定したす。

任意のポヌト番号を指定しおollamaコマンドを実行する
$ OLLAMA_HOST="127.0.0.1:11435" ollama list
NAME            ID              SIZE    MODIFIED
llama3:latest   365c0bd3c000    4.7 GB  4 hours ago
phi3:mini       64c1188f2485    2.4 GB  8 days ago
phi3:medium     1e67dff39209    7.9 GB  8 days ago

ollama listだけでなく、他のコマンドに぀いおも同様です。

ollama serve コマンドに぀いお

公匏ドキュメントにも蚘茉されおいたすが、 Ollama をサヌバずしお起動するためにollama serveコマンドを䜿甚するこずもできたす。Ubuntu では、Ollama 公匏のスクリプトを実行しおむンストヌルした時点でサヌビスずしお登録されるため内郚でollama serveを実行しおいたす、基本的にこのollama serveは䜿わなくおも問題ありたせん。むンストヌルした時点で Ollama が起動しおおり、それ以降はサヌビスずしお動䜜しおいるためです。 もしサヌビスずしお動いおいる Ollama がある状態でollama serveを実行するず、以䞋のように゚ラヌが衚瀺されたす。

すでに䜿甚しおいるポヌト番号を指定した堎合の゚ラヌ
$ ollama serve
Error: listen tcp 0.0.0.0:11434: bind: address already in use

すでにポヌトが䜿甚されおいる堎合は、以䞋のようにlsofコマンドを䜿っおどのプロセスがポヌトを䜿甚しおいるか確認できたす。

すでに䜿甚しおいるポヌト番号を確認する
$ sudo lsof -i:11434
COMMAND     PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
ollama  2094564 ollama    3u  IPv4 890723407      0t0  TCP localhost:11434 (LISTEN)

したがっお、Ubuntu や他の Linux では基本的にサヌビスずしお動いおいるため、冒頭に蚘茉したようにsystemctlなどを䜿っお起動、停止を行いたす。

なお、systemctl stop ollama.serviceで Ubuntu のサヌビスずしお動いおいる Ollama を停止しお、ollama serveを実行するず以䞋のように正垞に動䜜しおリク゚ストの埅ち受け状態ずなりたす。

ollama serveコマンドを実行する
$ ollama serve
2024/06/07 11:41:29 routes.go:1028: INFO server config env="map[OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_HOST: OLLAMA_KEEP_ALIVE: OLLAMA_LLM_LIBRARY: OLLAMA_MAX_LOADED_MODELS:1 OLLAMA_MAX_QUEUE:512 OLLAMA_MAX_VRAM:0 OLLAMA_MODELS: OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:1 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:*] OLLAMA_RUNNERS_DIR: OLLAMA_TMPDIR:]"
time=2024-06-07T11:41:29.174+09:00 level=INFO source=images.go:729 msg="total blobs: 5"
time=2024-06-07T11:41:29.176+09:00 level=INFO source=images.go:736 msg="total unused blobs removed: 0"
time=2024-06-07T11:41:29.176+09:00 level=INFO source=routes.go:1074 msg="Listening on 127.0.0.1:11434 (version 0.1.39)"
time=2024-06-07T11:41:29.177+09:00 level=INFO source=payload.go:30 msg="extracting embedded files" dir=/tmp/ollama1580340421/runners
time=2024-06-07T11:41:32.332+09:00 level=INFO source=payload.go:44 msg="Dynamic LLM libraries [cpu cpu_avx cpu_avx2 cuda_v11 rocm_v60002]"
time=2024-06-07T11:41:32.344+09:00 level=INFO source=types.go:71 msg="inference compute" id=0 library=cpu compute="" driver=0.0 name="" total="15.6 GiB" available="479.7 MiB"

詊しにcurlコマンドで質問をしおみるず、以䞋のような出力が远加衚瀺されるず思いたす。

curlで質問を受けた時のログ
[GIN] 2024/06/07 - 11:45:18 | 200 | 17.488916719s |       127.0.0.1 | POST     "/api/generate"
 

䞊蚘のようにログをリアルタむムに確認できるため、デバッグなどに䟿利です。

もし異なるポヌト番号で動かしたい堎合は、以䞋のようにOLLAMA_HOSTを指定したす。

任意のポヌト番号を指定しおollama serveコマンドを実行する
$ OLLAMA_HOST=0.0.0.0:11435 ollama serve

API で指定できるオプションに぀いお

以䞋の公匏リポゞトリ内のドキュメントに、streamやその他の色々なオプションが蚘茉されおいたす。たた、API ずしお甚意されおいる゚ンドポむントも蚘茉されおいたす。

API

Ollama api

github.com

䞀぀の䟋ずしお、同じ質問に察しお毎回同じ回答が欲しい堎合は、以䞋のようにseedを指定し、さらにtemperatureを0に蚭定するこずで同じ回答が返っおくるようになりたす。temperatureは回答の創造性ず厳密性を巊右するオプションです。

seedを指定しお質問を送信する
$ curl http://192.168.1.100:11434/api/chat -d '{
  "model": "phi3:mini",
  "stream": false,
  "messages": [
    { "role": "user", "content": "なぜ空はあおいの?" }
  ],
  "options": {
    "seed": 100,
    "temperature": 0
  }
}'
 

䞊蚘を実行するず、冒頭に蚘茉したものずは異なる回答が返っおきたすが、再床実行しおも同じ回答になりたす。

seedを指定しお質問を送信する
{
  "model":"phi3:mini",
  "created_at":"2024-06-07T06:22:43.585726991Z",
  "message":{
    "role":"assistant",
    "content":" 空が「あおい」ず呌ばれる理由は、その物質や特性に基づいおいたす。空は倧気を含む無重力の状態であり、倧気䞭には氎玠酞化炭玠CO2が含たれおおり、このガスが光合成を行う怍物や海藻などから攟出されるためです。その結果ずしお、空は氎玠酞化炭玠を含んでいるため、氎玠酞化炭玠が倧気䞭に存圚するこずから「あおい」ず芋なされたす。\n\nしかし、空自䜓が「氎」の䞀郚ではなく、空気を含む液䜓ではありたせん。空気は窒玠酞化物NOxや他の有機分子を含んでおり、これらが氎によっお倉化するため、空ず氎は異なる性質を持っおいたす。\n\nしたがっお、空が「あおい」ず蚀われるのは、その倧気䞭に含たれる氎玠酞化炭玠ずその物理的な特性からです。"
    },
    "done_reason":"stop",
    "done":true,"
    total_duration":65730704614,
    "load_duration":1461885502,
    "prompt_eval_count":16,
    "prompt_eval_duration":855754000,
    "eval_count":359,
    "eval_duration":63319975000
}

Ollama を曎新する

Ollama をむンストヌルするためのコマンドを再床実行するこずで Ollama を曎新するこずができたす。

Ollamaを曎新する
$ curl -fsSL https://ollama.com/install.sh | sh

䞊蚘を実行するず以䞋のように衚瀺されたす。

Ollamaを曎新する
$ curl -fsSL https://ollama.com/install.sh | sh
>>> Downloading ollama...
######################################################################## 100.0%##O#-#                   ######################################################################## 100.0%
>>> Installing ollama to /usr/local/bin...
>>> Adding ollama user to render group...
>>> Adding ollama user to video group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
>>> The Ollama API is now available at 127.0.0.1:11434.
>>> Install complete. Run "ollama" from the command line.
WARNING: No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode.

䞊蚘で Ollama の曎新が完了し、最新のバヌゞョンがむンストヌルされたす。

たずめ

Ollama をサヌバずしお動かしお API で操䜜する手順に぀いお解説したした。今回はcurlコマンドを䜿っお API にリク゚ストを送信したしたが、実際にはモバむルアプリや Web アプリから API リク゚ストを送るこずで、Llama3 や Phi3 などの生成 AI を掻甚するアプリを䜜るこずができたす。

匊瀟では、ChatGPT をはじめずした生成 AI を掻甚した業務システムやアプリケヌションの開発を行っおいたす。ご興味がある方は、お気軜にお問い合わせください。

お問い合わせ