ollamaを使ってローカルでLLMを動かしてみた

# 概要

https://github.com/ollama/ollama

LLMをローカルで動かすコマンドをさくっと試してみました。

こちらの記事で知りました。

https://zenn.dev/optimisuke/articles/70b696c96cae34#langchain-%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F

# インストール

```
$ pacman -Syu ollama
```

ollamaをインストールします。400MBくらい。
Archlinuxではpacmanでインストールできます。

その他のインストールは[公式](https://github.com/ollama/ollama?tab=readme-ov-file#ollama)から


# 実行

```
$ ollama serve
```

ollamaサーバーを立ち上げます。
これを立ち上げていないとollamaサブコマンドが使えません。

dockerでいうなら`service docker start`のことです。


```
$ ollama run llama2
```

モデルをrunします。
対話的に問いかけて回答がきます。

モデルファイルがローカルになければモデルをpullします。
dockerでいうなら`docker run`したときにイメージがローカルになければpullしてくるみたいなことです。

llama2のイメージは4GBなのでpullに時間かかる。


| Model|Parameters|Size|Download|
|------|----------|------|------|
| Llama 2   | 7B    | 3.8GB |   ollama run llama2|
| Mistral   | 7B    | 4.1GB |   ollama run mistral|
| Dolphin Phi   | 2.7B|1.6GB |  ollama run dolphin-phi|
| Phi-2 | 2.7B  | 1.7GB |   ollama run phi|
| Neural Chat   | 7B | 4.1GB |  ollama run neural-chat|
| Starling  | 7B    | 4.1GB |   ollama run starling-lm|
| Code Llama    | 7B    | 3.8GB |   ollama run codellama|
| Llama 2 Uncensored    | 7B|   3.8GB | ollama run llama2-uncensored|
| Llama 2 | 13B| 7.3GB | ollama run llama2:13b|
| Llama 2 | 70B| 39GB |  ollama run llama2:70b|
| Orca Mini | 3B|1.9GB |    ollama run orca-mini|
| Vicuna    | 7B|3.8GB |    ollama run vicuna|
| LLaVA | 7B    | 4.5GB |   ollama run llava |
| Gemma | 2B    | 1.4GB |   ollama run gemma:2b |
| Gemma | 7B    | 4.8GB |   ollama run gemma:7b |
[^1]

[^1]: https://github.com/ollama/ollama?tab=readme-ov-file#model-library

https://twitter.com/i/status/1776397762789253445

日本語は使えるけど不得意。Poeから使えるLlama2と同じで、難しい問いには日本語で問いかけても英語で返してくる


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113494/30c9bc69-07d5-41ef-ade5-e0bd37b48c3b.png)




https://x.com/U1and0/status/1776412437174190411

msg="no GPU detected" ですって。



# Ollama DockerでGPUを使う

手順はdockerhubのollamaから確認。

[DockerHub ollama/ollama](https://hub.docker.com/r/ollama/ollama)


### Nvidia GPU

 [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation)　をインストールするためにppa追加

### Install with Apt

1. Configure the repository

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
    | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
    | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update

```

1. NVIDIA Container Toolkit packages　をインストールする

```bash
sudo apt-get install -y nvidia-container-toolkit

```

## dockerを再起動

`sudo systemctl restart docker`

## dockerコンテナ起動

```bash
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

```

docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: initialization error: nvml error: driver not loaded: unknown.
ERRO[0000] error waiting for container: context canceled

エラー。あれ？

Nvidiaドライバーインストールされていなかった。(`nvidia-smi`が使えないことで確認。)


## 実行

```shell-session
$ docker run -t --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
$ docker exec -it ollama ollama run llama2
```

これだけとか簡単すぎない？？
(ただしNvidiaドライバーの手順を除く。)


GPUを使えるようになったらLlama2の出力が体感３倍以上早くなり、ファンの音もCPUだけの状態よりかなり穏やかになりました！


# 環境
- OS: Ubuntu22.04 on Docker Archlinux
- GPU: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti]
- CPU: Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz
- ﾒﾓﾘ: 32GB

# ドライバーインストールに役立ったページ
Nvidiaのドライバーインストールにいい思い出が一つもない。いつも(物理的に)目の前が真っ暗状態になるからすごく気が重いけど、せっかく早起きして時間を作れたからやってみた。

[Ubuntuの更新ついでにNVIDIAのドライバを更新しようとしたらハマった話](https://takayama-rado.com/articles/update_nvidia_0.html)

[# UbuntuにNvidiaドライバーがインストールできなくなった件](https://zenn.dev/tatexh/articles/6fdc626dbf5cbf)

[Ubuntu20.04にNVIDIA GPUドライバを導入する際の罠](https://zenn.dev/kanade147359/articles/f7ad30e056544e)

[UbuntuにNVIDIA driverをインストール/再インストールする方法 - Qiita](https://qiita.com/yto1292/items/463e054943f3076f36cc)

nvidiaドライバーインストール初めて一発でうまく行った。

aptでパッケージのアップグレード、recommendedで推奨されている550ドライバをインストール、nouvieuをblacklistに追加して、`sudo systemctl set-default multi-user` してCUIでデフォルトログインするように設定してから`sudo reboot`した。うん、いつもとかわらん手順のようだが何故かうまく行った。運が良かったかな。

```shell-session
$ nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce GTX 1050 Ti     Off |   00000000:01:00.0  On |                  N/A |
| 30%   36C    P0             N/A /   75W |     715MiB /   4096MiB |      1%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A      4271      G   /usr/lib/xorg/Xorg                            397MiB |
|    0   N/A  N/A      4912      G   /usr/bin/gnome-shell                           45MiB |
|    0   N/A  N/A     11323      G   ...,262144 --variations-seed-version=1        166MiB |
|    0   N/A  N/A     13138      C   /bin/ollama                                    44MiB |
+-----------------------------------------------------------------------------------------+

$ uname -r
5.17.0-1016-oem
$ dkms status
nvidia/550.54.15, 5.17.0-1016-oem, x86_64: installed
virtualbox/6.1.50, 5.15.0-101-generic, x86_64: installed
virtualbox/6.1.50, 5.17.0-1016-oem, x86_64: installed
```

# 感想・まとめ
- server立ち上げないとサブコマンドが使えないことにつまづきました。[redditに助けられました](https://www.reddit.com/r/ollama/comments/196rbo7/cant_get_ollama_to_run_in_ubuntu/)。ありがたい。
- ローカルでLLM動かすのめっちゃ簡単。先人達のおかげ。ありがたい。
- 「AIが今後伸びそうだから新調PCのメモリは大きめにしよ」と判断した3年前の俺GJ!16GB食われる13Bモデルが使える！

急いで書いたので雑記事ｻｰｾﾝ
メモだからいいか。