最新 LLM を超簡単に試しちゃおう！ ollama を使ってみた 

<!-- タイトル： ollama を使ってみた -->

## はじめに

こんにちは、ひよこです！
今回は、ローカル環境で大規模言語モデル（LLM）を動作させるためのツール **ollama** の最新情報をまとめました。ollama は最新の LLM 群（Llama 3、Llama 3.2、DeepSeek-R1、Phi 4、Mistral など）に対応しており、各種モデルをダウンロード後、ローカル環境でそのまま実行できます。最新バージョンでは、並列処理機能や REST API 統合が強化され、研究・プロトタイピングのみならず、モバイル環境など多様なユースケースに柔軟に対応できるようになりました。話題の LLM の性能をちょっと試したいといった用途には最適です！

>🐣 次の記事で ollama を使おうと思っていたので、ついでに入門書いちゃいました

## **ollama とは？**

**ollama** は、ローカル環境で LLM のモデルを管理・実行するためのソフトウェアです。GPU がなくても CPU だけで動作するモデルが多数用意されており、特に以下の点で優れています。

- **並列処理機能**：複数のチャットセッションやエージェントを同時に実行可能
- **REST API 統合**：外部ツールやアプリケーションとの連携が容易
- **豊富なモデル対応**：Llama 系をはじめ、DeepSeek-R1、Phi 4、Mistral など、用途に合わせたモデルが選択可能
- **ローカル実行可能**：最初のモデルダウンロード以外はネットワーク接続が不要

## **インストール方法**

1. 公式サイトからインストーラをダウンロード：[Ollama Download](https://ollama.com/download)
2. インストール後、ターミナルで以下のコマンドを実行し、バージョン情報が表示されれば完了です。

```bash
ollama --version
ollama version 0.5.12
```
現在の最新バージョンは **0.5.12** です。

## **モデルのダウンロードと実行**

### **1. モデルのダウンロード**

たとえば、Meta 社の最新モデル **Llama 3** をダウンロードする場合、次のコマンドを実行します。

```bash
ollama pull llama3
```

ダウンロードが完了すると、モデルはデフォルトで以下のディレクトリに保存されます。

```bash
C:\Users\[ユーザ名]\.ollama
```

環境変数 `OLLAMA_MODELS` を変更することで、保存先をカスタマイズできます。

>🐣 Linux なら ~/.ollama 以下です

### **2. モデルの実行**

ダウンロード済みのモデルを実行するには、次のコマンドを使用します。

```bash
ollama run llama3
```

実行後、対話型プロンプトが表示され、モデルとのやり取りが可能になります。
対話を終了する場合は、`/bye` を入力してください。

すぐに試したい場合、`pull` を省略してはじめから `run` を実行することも可能です。

>🐣 モデルがまだダウンロードされていない場合はダウンロード後に対話が開始します！

```bash
ollama run llama3.2:1b
```

モデルによっては複数のパラメータサイズが存在します。たとえば `llama3.2` には `1B` と `3B` のバージョンがあります。デフォルトのサイズを確認するには、次のコマンドを実行します。

```bash
ollama show llama3.2
```
>🐣 予想外にモデルサイズが大きい場合もあるのでご注意を！

また、その LLM ファミリーでダウンロード済みモデルの確認は、次のコマンドを実行します。

```bash
ollama list llama3.2
```

## **使用可能なモデルの例**

| Model              | Parameters | Size   | コマンド例 |
|--------------------|------------|--------|------------------|
| Llama 3           | 8B         | 4.2GB  | `ollama run llama3` |
| Llama 3.2         | 3B         | 2.0GB  | `ollama run llama3.2` |
| Llama 3.2         | 1B         | 1.3GB  | `ollama run llama3.2:1b` |
| Llama 3.2 Vision  | 11B        | 7.9GB  | `ollama run llama3.2-vision` |
| Phi 4             | 14B        | 9.1GB  | `ollama run phi4` |
| DeepSeek-R1       | 6.7B       | 4.2GB  | `ollama run deepseek-r1` |
| DeepSeek-R1 Turbo | 13B        | 8.4GB  | `ollama run deepseek-r1-turbo` |
| Gemma 2           | 2B         | 1.6GB  | `ollama run gemma2:2b` |
| Mistral           | 7B         | 4.1GB  | `ollama run mistral` |
| Moondream 2       | 1.4B       | 829MB  | `ollama run moondream` |

利用可能なモデルは、公式サイトのモデル一覧ページで確認できます。
[Ollama Models](https://ollama.com/library)

> 🐣 Let's note i7 メモリ32G では qwen2.5-coder(7B) はぎりぎり動きました。

## **REST API の利用**

`ollama` は HTTP API を提供しており、以下のようにリクエストを送信できます。

1. `ollama serve` コマンドでサーバーを起動
```bash
ollama serve
```

2. 別のターミナルで API を呼び出し
```bash
curl -X POST http://localhost:11434/api/generate -d '{"model": "llama3", "prompt": "こんにちは"}'
```

これを実行すると llama3 によって生成されたテキストがストリーミング形式で返ってきます。
返答だけを見たい場合は、例えば次のような Python プログラムで実行可能です。

```python
import requests
import json

# ollama API へリクエストを送信
response = requests.post(
    "http://localhost:11434/api/generate",
    json={
        "model": "llama3", 
        "prompt": "こんにちは"
    },
    stream=True  # ストリーミングレスポンスを受け取る
)

# 生成されたテキストを格納する変数
generated_text = ""
# ストリーミングレスポンスを処理
for line in response.iter_lines():
    if line:
        # バイト列を文字列にデコード
        line_str = line.decode('utf-8')
        # JSON 形式の文字列をパース
        data = json.loads(line_str)
        # 返答テキストの部分を取得して追加
        if "response" in data:
            generated_text += data["response"]
            # リアルタイム表示する場合は以下を使用
            print(data["response"], end="", flush=True)
```

>🐣 Javascript でちょこちょこっと書けばブラウザ上で動く ChatBot が簡単に作れそうですね

## **おわりに**
`ollama` を使えば、最新の LLM をローカル環境で簡単に実行できます。並列処理や REST API の統合により、開発や研究の幅が広がるため、ぜひ試してみてください！