Ollamaをwslにインストールして使う。ついでにwebブラウザでOllamaを表示させる

## はじめに
ChatGPTの発表以来、AIに関する技術の進歩がすごいですね。
試行錯誤するには、各プロバイダーから提供されているLLMを利用したり、サービスを利用する必要があるわけですが、検証だけでも費用が生じます。
個人で検証するには大変な作業です。趣味や学習のために大量のLLM使用をしていたのでは身が持ちません。こうした中で、無料で使えるLLMが登場しているわけですが、それらをうまく使えるツールがあります。

## Ollamaをインストールする
Ollamaは以下のGithubで入手できます

https://github.com/ollama/ollama

当初はWindows版をインストールしていたのですが、モデルをインストールするたびに容量が増えていって、Cドライブが枯渇しそうになりました。
そこでWSL(Ubuntu)を別ドライブに構築して、そっちでOllamaを使用するように変更しました。
ということで、WSLを利用してOllamaをインストールします。

### インストール手順
https://github.com/ollama/ollama/blob/main/docs/linux.md

ここに記されている通りにWSL内でコマンドを実行していきます。

```bash
curl -fsSL https://ollama.com/install.sh | sh
```
基本的にこれだけでOllamaのインストールは完了です。
起動するために以下のコマンドを実行します
```bash
sudo systemctl start ollama
```
次はOllamaをサービスとして常時起動しておくようにします

```bash
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama
```
/etc/systemd/system/ollama.service を作成します。viやnanoを利用するのがよいでしょう。
```text
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
```
作成したOllamaサービスをリロードし、常時起動とします。
```bash
sudo systemctl daemon-reload
sudo systemctl enable ollama
```
NVidiaのCUDAを使用する場合は以下からインストールします。
ここで留意ですが、CUDAの最新版をインストールすると、pythonのtorchなどがまだ対応していないことがありますので、一つ前をインストールしたほうが良いかもしれません。自分がインストールしたときは、CUDA12.6が最新でしたが、pythonの各パッケージが12.4までしか対応していない状況でした。

https://developer.nvidia.com/cuda-downloads

CUDAのインストールをしたら、以下のコマンドで有効になっているか確認しましょう
```bash
nvidia-smi
```
自分の環境では以下のように表示されました。GeForce RTX 3060をしてしているのが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/1e1ed7af-80da-3673-e40c-b9843c4dd7c4.png)

### モデルを使用する
https://ollama.com/library

ここに使用できるモデルがリストアップされています。
代表的なものとしてllama3.1を使ってみます
ダウンロードだけしたい場合は以下を実行します

```bash
ollama pull llama3.1
```
以下はモデルのダウンロードと起動が同時に行われます。
```bash
ollama run llama3.1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/066627bc-425f-acba-f946-5799768b9b93.png)

メッセージを試しに書いてみました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/f60f8bd5-ec10-6c0c-1cb3-b343aded1f9d.png)
英語の時と日本語で違いはあるようですね。回答の文章量が違います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/f78a5185-d176-602e-ab69-f5837edff487.png)

これでOllamaのWSLへのセットアップは完了ですが、これだけだと毎回コマンドプロンプトを使用することになるので、WebでOllamaを使用できるようにします。

## Docker: Open-WebUIを使用する
docker-composeファイルを作成します
```yaml
services:
  # for ollama webui
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    volumes:
      - ./volumes/open-webui:/app/backend/data
    ports:
      - 8980:8080
    environment: # https://docs.openwebui.com/getting-started/env-configuration#default_models
      - OLLAMA_BASE_URLS=http://host.docker.internal:11434 
      - ENV=dev
      - WEBUI_AUTH=False
      - WEBUI_URL=http://127.0.0.1:8980
    extra_hosts:
      - host.docker.internal:host-gateway
    restart: unless-stopped
```

Ollama(host.docker.internal:11434)と接続して、localhost:8980で表示できるようにします。
```shell
docker-compose up -d
```
これでlocalhost:8980をwebブラウザで表示してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/7771f4cd-0f43-1871-273f-a2e7e591866b.png)
チャット画面になって使いやすくなりました。
モデル選択をすると、Ollamaでpullしたモデルが表示されます。

## OllamaのAPI
localhost:8980/docs にアクセスすると、OpenAPIのSwagger画面を表示させることができます。
OllamaをWebブラウザで使用する以外に、APIアクセスすることで直接利用することができるみたいです。FastAPIで実装してるみたいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/842d1655-da69-de58-a5b5-d5f9c3376fea.png)


## さいごに
　AIと聞くと、なんでもできる万能なアンドロイドみたいなイメージがわきますが、実際のところは、まだまだその領域には達していません。
「現在のAI技術は革新的なモデルが出ているものの、それを使いこなすテクニックが確立していないため、日進月歩で研究が進んでいる途中」だということです。試行錯誤です。
　ところが現在はLLMと呼ばれるAI-Modelが次々と発表され、その性能が評価されますが、実際に重要なのは、「それをどのように活用するか」という点です。
　AI-Modelをカスタイズする手法としてRAGやファインチューニングといった手法が登場しました。
　どんな質問をすればAIが適切な答えを返すかという観点から、プロンプトが工夫されています。プロンプトエンジニアという職業も少しずつ登場しています。
　さらには、各モデルを組み合わせたり、やりとりさせたり、ワークフローに組み込んだりと、様々なテクニックが出てきました。
　まさに日進月歩です。AIは新しいからこそ、誰もがまだまだ新人という時期です。誰にでもチャンスがあります。ぜひみなさんトライしてください。