CLOVER🍀

That was when it all began.

Ubutu Linux 24.04 LTSでロヌカルLLMのOllamaを䜿っおみる

これは、なにをしたくお曞いたもの

久しぶりにロヌカルLLMを詊しおみようず思いたしお、以前はllama-cpp-pythonやLocalAIを䜿っおいたのですが。

Ollamaがひず぀抜けお人気のようなので、1床詊しおみるこずにしたした。

Ollama

OllamaのWebサむトはこちら。

Ollama

なのですが、OllamaのWebサむトを芋おもドキュメントなどがなく、今ひず぀Ollamaが䜕者なのかがわかりたせん 。

Ollamaで䜿いそうなモデルを怜玢するペヌゞはありたす。

Models

どうやらGitHubリポゞトリヌを芋た方がよさそうですね。

GitHub - ollama/ollama: Get up and running with Llama 3.3, Phi 4, Gemma 2, and other large language models.

たあ、芋おも簡単な䜿い方しか曞かれおいないのですが 。

どうやらサヌバヌずしお動䜜するらしくそれはそうですが、その操䜜はCLIで行うようです。

macOS、Windows、Linuxで動䜜しそうですね。

そしおllama.cppを䜿っおいるようです。

Ollama / Supported backends

なのでGGUFも扱えそうですね。

Ollama / Customize a model / Import from GGUF

䞻なモデルはこちらに茉っおいたす。

Ollama / Model library

REST APIもありたす。APIはこちら。

https://github.com/ollama/ollama/blob/v0.5.7/docs/api.md

ひずたず詊しおみたしょう。

環境

今回の環境はこちら。Ubuntu Linux 24.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.1 LTS
Release:        24.04
Codename:       noble


$ uname -srvmpio
Linux 6.8.0-51-generic #52-Ubuntu SMP PREEMPT_DYNAMIC Thu Dec  5 13:09:44 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Ollamaをむンストヌルする

OllamaをLinuxにむンストヌルする堎合、curlでシェルスクリプトを実行すればOKです。

Ollama / Linux

するずsystemdのナニットずしおむンスヌルされたりずいろいろやっおくれるようなのですが、これはあたりやりたくないので
バむナリヌだけをむンストヌルするこずにしたす。
※むンストヌルスクリプトを実行しおむンストヌルするパタヌンは、最埌に茉せたす

$ curl -LO https://github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux-amd64.tgz

1.6Gずかありたすね 。

$ ll -h ollama-linux-amd64.tgz
-rw-rw-r-- 1 xxxxx xxxxx 1.6G  1月 25 18:30 ollama-linux-amd64.tgz

展開。

$ tar xf ollama-linux-amd64.tgz

䞭身はbin、libディレクトリヌで、こんな感じでした。

$ tree bin lib
bin
└── ollama
lib
└── ollama
    ├── libcublas.so.11 -> libcublas.so.11.5.1.109
    ├── libcublas.so.11.5.1.109
    ├── libcublas.so.12 -> ./libcublas.so.12.4.5.8
    ├── libcublas.so.12.4.5.8
    ├── libcublasLt.so.11 -> libcublasLt.so.11.5.1.109
    ├── libcublasLt.so.11.5.1.109
    ├── libcublasLt.so.12 -> ./libcublasLt.so.12.4.5.8
    ├── libcublasLt.so.12.4.5.8
    ├── libcudart.so.11.0 -> libcudart.so.11.3.109
    ├── libcudart.so.11.3.109
    ├── libcudart.so.12 -> libcudart.so.12.4.127
    ├── libcudart.so.12.4.127
    └── runners
        ├── cpu_avx
        │   └── ollama_llama_server
        ├── cpu_avx2
        │   └── ollama_llama_server
        ├── cuda_v11_avx
        │   ├── libggml_cuda_v11.so
        │   └── ollama_llama_server
        ├── cuda_v12_avx
        │   ├── libggml_cuda_v12.so
        │   └── ollama_llama_server
        └── rocm_avx
            ├── libggml_rocm.so
            └── ollama_llama_server

9 directories, 21 files

binディレクトリヌ内にあるollamaを䜿えばよさそうですね。

バヌゞョンを確認。

$ bin/ollama --version
Warning: could not connect to a running Ollama instance
Warning: client version is 0.5.7

Ollamaに接続できない、ず蚀っおいたす。

ヘルプを確認。

$ bin/ollama --help
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
  stop        Stop a running 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を起動。

$ bin/ollama serve

このタヌミナルは、Ollamaがフォアグラりンドで起動したたたになりたす。

別のタヌミナルでモデルにllama3.2を指定しおrunコマンドを実行。

$ bin/ollama run llama3.2

Ollamaが起動しおいるずアクセスがあったこずが衚瀺され、モデルのダりンロヌドが始たりたす。

ちなみにllama3.2はパラメヌタヌ数3B、サむズが2GBのモデルです。

Ollama / Model library

ダりンロヌドが終わるず入力埅ちになりたした。

success
>>> Send a message (/? for help)

自己玹介しおもらいたしょう。

>>> Could you introduce yourself?
I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."

返っおきたした。

日本語だずどうでしょう

>>> あなたの自己玹介をお願いしたす
私は、Llama ず呌ばれる人工知胜モデルです。Llama は、「Large Language Model Meta AI」の意味を持ちたす。

OKですね。

ヘルプを芋おみたしょう。

>>> /?
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.

たずえばモデルの情報を芋おみたす。

>>> /show info
  Model
    architecture        llama
    parameters          3.2B
    context length      131072
    embedding length    3072
    quantization        Q4_K_M

  Parameters
    stop    "<|start_header_id|>"
    stop    "<|end_header_id|>"
    stop    "<|eot_id|>"

  License
    LLAMA 3.2 COMMUNITY LICENSE AGREEMENT
    Llama 3.2 Version Release Date: September 25, 2024

プロンプトを終了。

>>> /bye

モデルの䞀芧を芋おみたす。

$ bin/ollama list
NAME               ID              SIZE      MODIFIED
llama3.2:latest    a80c4f17acd5    2.0 GB    3 minutes ago

先ほどダりンロヌドしたモデルが衚瀺されたした。

モデルには:tagでタグが付䞎されおいるようですね。なにも指定しないず:latest扱いのようです。

実行䞭のモデルを衚瀺。

$ bin/ollama ps
NAME               ID              SIZE      PROCESSOR    UNTIL
llama3.2:latest    a80c4f17acd5    3.5 GB    100% CPU     2 minutes from now

REST APIを䜿っおみたしょう。

https://github.com/ollama/ollama/blob/v0.5.7/docs/api.md

Ollamaは11434ポヌトでリッスンしおいるようです。

chat APIを䜿っおみたす。

$ curl localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    {
      "role": "user",
      "content": "Could you introduce yourself?"
    }
  ],
  "stream": false
}'

API / Generate a chat completion

䜿い方は、modelでモデル名を指定したす。现かく指定する堎合はタグも含めたす。durationず付くレスポンス項目は
すべおナノ秒単䜍です。そしお、streamをパラメヌタヌはデフォルトでtrueなのでレスポンスがストリヌミングに
なりたす。

API / Conventions

今回はstreamをfalseにしお、ストリヌミングを無効にしたした。

結果。

{"model":"llama3.2","created_at":"2025-01-25T09:57:15.343259499Z","message":{"role":"assistant","content":"I'm an artificial intelligence model known as Llama. Llama stands for \"Large Language Model Meta AI.\""},"done_reason":"stop","done":true,"total_duration":1651444573,"load_duration":26955139,"prompt_eval_count":30,"prompt_eval_duration":67000000,"eval_count":23,"eval_duration":1556000000}

日本語で聞いおみたす。

$ curl localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    {
      "role": "user",
      "content": "あなたの自己玹介をしおください"
    }
  ],
  "stream": false
}'
{"model":"llama3.2","created_at":"2025-01-25T10:03:25.954437539Z","message":{"role":"assistant","content":"私は、AIです。名前はLlamaで、Metaずいう䌚瀟が開発したした。私は人々 に情報を提䟛し、質問に答えるために蚭蚈されおいたす。\n\n私は、自然蚀語凊理ず機械孊習を䜿甚しお、人々の質問を受け付けたす。私の知識は、Internetのある郚分から取埗しおいたすが、 私はこれらの情報をより包括的で正確なものにしたす。\n\n私は、さたざたなトピックに察する質問を受け付けるこずができたす。それぞれに適した回答を提䟛しようずしたした。たずえば、歎 史、科孊、芞術など、人々が知りたいこずのあらゆる事項に぀いお、質問しおください。\n\n私は、英語、スペむン語、フランス語、ドむツ語、むタリア語で回答できたす。それぞれに適した答 えを提䟛しようずしたす。私の知識は、䞖界䞭の人々が通じる蚀語を䜿甚しおいるからです。\n\n私には、限界もありたす。たずえば、私は珟実䞖界の出来事や人々の個人的な経隓に぀いおの詳 现な情報を提䟛するこずができたせん。ただし、私は、倚くの䞀般的な情報ず知識を提䟛するこずができたす。"},"done_reason":"stop","done":true,"total_duration":20073929911,"load_duration":23053351,"prompt_eval_count":33,"prompt_eval_duration":73000000,"eval_count":278,"eval_duration":19977000000}

なんか、回答が長くなりたしたね 。

指定するモデルを倉えおみたしょう。

$ curl localhost:11434/api/chat -d '{
  "model": "gemma2:2b",
  "messages": [
    {
      "role": "user",
      "content": "Could you introduce yourself?"
    }
  ],
  "stream": false
}'

するず、゚ラヌになりたした。

{"error":"model \"gemma2:2b\" not found, try pulling it first"}

モデルは最初にダりンロヌドしおおく必芁があるようです。

今床はollama runではなくollama pullしおみたしょう。

$ bin/ollama pull gemma2:2b

ダりンロヌドが終わったら、再床実行。

$ curl localhost:11434/api/chat -d '{
  "model": "gemma2:2b",
  "messages": [
    {
      "role": "user",
      "content": "Could you introduce yourself?"
    }
  ],
  "stream": false
}'
{"model":"gemma2:2b","created_at":"2025-01-25T10:15:38.091305328Z","message":{"role":"assistant","content":"Hello! 👋 I'm Gemma, an AI assistant created by the Gemma team.  I can generate text and have conversations with you about a wide range of topics. As an open-weight model, I'm available for anyone to use and explore. \n\nKeep in mind:\n\n* **Text-only:** I communicate solely through written language.\n* **No real-time info or Google Search:** My knowledge is based on the data I was trained on, so I don't have access to current events or browse the internet.\n* **Made for fun \u0026 learning:**  My goal is to be helpful and provide engaging conversation! \n\nWhat would you like to talk about today? 😊 \n"},"done_reason":"stop","done":true,"total_duration":11927308010,"load_duration":29656589,"prompt_eval_count":14,"prompt_eval_duration":76000000,"eval_count":147,"eval_duration":11820000000}

今床は返しおくれたした。明瀺的にollama runずする必芁はないようですね。

たた、これで耇数のモデルが䜿い分けられるこずが確認できたした。

デヌタは手動むンストヌルの堎合は$HOME/.ollamaディレクトリヌに配眮されるようです。

$ tree ~/.ollama
$HOME/.ollama
├── history
├── id_ed25519
├── id_ed25519.pub
└── models
    ├── blobs
    │   ├── sha256-097a36493f718248845233af1d3fefe7a303f864fae13bc31a3a9704229378ca
    │   ├── sha256-2490e7468436707d5156d7959cf3c6341cc46ee323084cfa3fcf30fe76e397dc
    │   ├── sha256-34bb5ab01051a11372a91f95f3fbbc51173eed8e7f13ec395b9ae9b8bd0e242b
    │   ├── sha256-56bb8bd477a519ffa694fc449c2413c6f0e1d3b1c88fa7e3c9d88d3ae49d4dcb
    │   ├── sha256-7462734796d67c40ecec2ca98eddf970e171dbb6b370e43fd633ee75b69abe1b
    │   ├── sha256-966de95ca8a62200913e3f8bfbf84c8494536f1b94b49166851e76644e966396
    │   ├── sha256-a70ff7e570d97baaf4e62ac6e6ad9975e04caa6d900d3742d37698494479e0cd
    │   ├── sha256-dde5aa3fc5ffc17176b5e8bdc82f587b24b2678c6c66101bf7da77af9f7ccdff
    │   ├── sha256-e0a42594d802e5d31cdc786deb4823edb8adff66094d49de8fffe976d753e348
    │   ├── sha256-e18ad7af7efbfaecd8525e356861b84c240ece3a3effeb79d2aa7c0f258f71bd
    │   └── sha256-fcc5a6bec9daf9b561a68827b67ab6088e1dba9d1fa2a50d7bbcc8384e0a265d
    └── manifests
        └── registry.ollama.ai
            └── library
                ├── gemma2
                │   └── 2b
                └── llama3.2
                    └── latest

8 directories, 16 files

curlbashでむンストヌルした堎合は、/usr/share/ollamaディレクトリヌのようですが。

あずは、このあたりから他のモデルに切り替えおみたりする感じでしょうね。

Ollama / Model library

Models

だいたい雰囲気はわかりたした。

オマケむンストヌルスクリプトでむンストヌルした堎合

最埌に、むンストヌルスクリプトでむンストヌルした堎合もメモしおおきたす。

むンストヌル。

$ curl -fsSL https://ollama.com/install.sh | sh

Ollamaはsystemdのナニットずしお登録され、むンストヌルが完了した時点で起動しおいたす。

$ sudo systemctl status ollama
● ollama.service - Ollama Service
     Loaded: loaded (/etc/systemd/system/ollama.service; enabled; preset: enabled)
● ollama.service - Ollama Service
     Loaded: loaded (/etc/systemd/system/ollama.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-01-25 19:41:29 JST; 17s ago
   Main PID: 1355 (ollama)
      Tasks: 7 (limit: 9489)
     Memory: 9.1M (peak: 9.2M)
        CPU: 27ms
     CGroup: /system.slice/ollama.service
             └─1355 /usr/local/bin/ollama serve

Ollamaのバむナリヌは/usr/local/bin/ollamaに配眮されたようです。

systemdのナニット定矩。

$ systemctl cat ollama
# /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=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

[Install]
WantedBy=default.target

ollama serveで起動しおいるようです。

モデルをダりンロヌドしおみたす。

$ ollama pull llama3.2

確認。

$ curl localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    {
      "role": "user",
      "content": "Could you introduce yourself?"
    }
  ],
  "stream": false
}'
{"model":"llama3.2","created_at":"2025-01-25T10:49:20.004748848Z","message":{"role":"assistant","content":"I'm an artificial intelligence model known as Llama. Llama stands for \"Large Language Model Meta AI.\""},"done_reason":"stop","done":true,"total_duration":10810343589,"load_duration":3632227311,"prompt_eval_count":30,"prompt_eval_duration":3548000000,"eval_count":23,"eval_duration":3466000000}

OKですね。

ダりンロヌドされたモデルなどは、/usr/share/ollamaディレクトリヌに配眮されたす。

$ tree -a /usr/share/ollama
/usr/share/ollama
├── .bash_logout
├── .bashrc
├── .ollama
│   ├── id_ed25519
│   ├── id_ed25519.pub
│   └── models
│       ├── blobs
│       │   ├── sha256-34bb5ab01051a11372a91f95f3fbbc51173eed8e7f13ec395b9ae9b8bd0e242b
│       │   ├── sha256-56bb8bd477a519ffa694fc449c2413c6f0e1d3b1c88fa7e3c9d88d3ae49d4dcb
│       │   ├── sha256-966de95ca8a62200913e3f8bfbf84c8494536f1b94b49166851e76644e966396
│       │   ├── sha256-a70ff7e570d97baaf4e62ac6e6ad9975e04caa6d900d3742d37698494479e0cd
│       │   ├── sha256-dde5aa3fc5ffc17176b5e8bdc82f587b24b2678c6c66101bf7da77af9f7ccdff
│       │   └── sha256-fcc5a6bec9daf9b561a68827b67ab6088e1dba9d1fa2a50d7bbcc8384e0a265d
│       └── manifests
│           └── registry.ollama.ai
│               └── library
│                   └── llama3.2
│                       └── latest
└── .profile

8 directories, 12 files

アンむンストヌルはこちら。

Linux / Uninstall

おわりに

ロヌカルLLM、Ollamaを詊しおみたした。

かなり簡単に䜿えたすね。耇数のモデルも扱えるようですし、バック゚ンドはllama.cppずいうこずで少し銎染みが
ありたすし。

今の環境だずそこそこの速床で動きそうなので、たた詊せるずころはロヌカルLLMにチャレンゞしたいなず思いたす。