Power10サーバーで ollama と granite3.1-dense:8b を稼働し VSCode extension の watsonx Code Assistant を動かす

### はじめに



watsonx Code Assistant をモデル指定で稼働する以下の記事を参照させていただき、

https://qiita.com/yanagih/items/9c96172f2dc9da1672ed


以前検証した以下の記事の内容を合わせて、

https://qiita.com/c_u/items/74449ff21bbc691d3160


 watsonx code assistant を IBM Power RHEL9.4 サーバーで ollama + granite3.1-dense:8b での稼働を確認しました。


<br>

LLM のモデルは、2024/12 リリースの IBM Granite 3.1 "granite3.1-dense:8b" を使用します。

https://www.ibm.com/new/announcements/ibm-granite-3-1-powerful-performance-long-context-and-more

https://ollama.com/library/granite3.1-dense

---


### 環境

* HW: IBM Power S1022
　 LPAR リソース：CPU 3 core, Memory 32 GB で検証
　　今回はインターネット接続環境を使用しています。


* RHEL 9.4 server (ppc64le)


* ollama : 次のコンテナ・イメージを使用 -> [quay.io/mgiessing/ollama](https://quay.io/repository/mgiessing/ollama?tab=tags)


* LLM model : granite3.1-dense:8b ->  https://ollama.com/library/granite3.1-dense

--

* Local PC (Mac) + VSCode + watsonx Code Assistant(拡張機能)

<br>

以下のようなイメージで、Local PC の VSCode + watsonx Code Assistant から Power10 RHELサーバー(LPAR) の ollama + granite と接続しています。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/6b8fea28-1f08-54b9-ce22-6e9fa479d5e4.png" width=80%>


---
  

### Power10 上の RHEL の ollama 環境設定

* ollama コンテナを pull

```
# podman run -d --privileged -v ollama:/root/.ollama -p 6443:11434 --name ollama quay.io/mgiessing/ollama:v0.3.14
Trying to pull quay.io/mgiessing/ollama:v0.3.14...
Getting image source signatures
Copying blob a26f98920ed2 done   |
Copying blob a181ccbec46a done   |
Copying blob c1b3fd6d67e8 done   |
Copying blob ee70963c9454 done   |
Copying config 175cf51aaf done   |
Writing manifest to image destination
2f52c47bcd37e5f0de03c627fed614da5aea8ab0aecf0ec9bc0c270af3751d87
```

__Tips__ : PowerVS 外部接続では 6443 ポートが任意使用可能であるため、ホスト側のポートを 6443 で指定しています。

PowerVS : ネットワーク・セキュリティー
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-network-security&locale=ja
> ポート 6443 も、多様な用途のために開いています。

<br>

* コンテナ稼働確認

```
# podman ps
CONTAINER ID  IMAGE                             COMMAND     CREATED         STATUS         PORTS                    NAMES
2f52c47bcd37  quay.io/mgiessing/ollama:v0.3.14  serve       14 seconds ago  Up 14 seconds  0.0.0.0:6443->11434/tcp  ollama
```

* ollama コンテナにログイン

```
# podman exec -it ollama /bin/bash
[root@2f52c47bcd37 /]#
```

* model の確認

```
[root@2f52c47bcd37 /]# ollama list
NAME    ID    SIZE    MODIFIED
```

-> まだ何のモデルもpull していない状態です。

* model の pull と 実行

```
# ollama run granite3.1-dense:8b
pulling manifest
pulling 0a922eb99317... 100% ▕████████████████████████████████████▏ 4.9 GB
pulling f7b956e70ca3... 100% ▕████████████████████████████████████▏   69 B
pulling f76a906816c4... 100% ▕████████████████████████████████████▏ 1.4 KB
pulling 492069a62c25... 100% ▕████████████████████████████████████▏  11 KB
pulling e026ee8ed889... 100% ▕████████████████████████████████████▏  491 B
verifying sha256 digest
writing manifest
success
>>> Send a message (/? for help)
```

プロンプトが表示され、ollama 上で granite3.1-dense:8b が稼働するようになりました。

<br>

ここで ollama とモデルが稼働したので、外からアクセスできるかを確認します。

Webブラウザで "http://(ollama稼働のサーバーIPアドレス):6443" にアクセスします。

<br>

![ollama_ui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/c1d43f05-d66a-b5a6-408f-bc6ea5035505.png)

接続できると、"ollama is running" の表示が確認できます。
外部接続の可能も確認できました。


---

### VSCode の watsonx Code Assistant で ollama API ホストの設定

VSCode 上で watsonx Code Assistant の 拡張機能設定を行います。


参照させていただいた手順(再掲)：

https://qiita.com/yanagih/items/9c96172f2dc9da1672ed



VSCode の設定画面を開きます
　-> 左下の歯車マークで設定を選択
 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/4add66f6-7b47-4ba0-c11b-88b40044ae1f.png" width=50%>



watson を検索
　-> watsonx Code Assistant で以下の箇所を設定します


　・Wca: Backend Provider  (ollama)
　・Wca > Local: Api Host　(作成した ollama サーバーのIPアドレス:6443ポートを指定)
　・Wca > Local: Chat Model　(granite3.1-dense:8b)
　・Wca > Local: Code Gen Model　(granite3.1-dense:8b)
 

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/edb47c97-80e6-315d-f595-ae41f2aa6447.png)


---

### 稼働確認

* 赤枠部分の watsonx Code Assistant の Chat セッションを開きます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/784f10a8-9412-30f2-584d-b98fbcb5d430.png" width=40%>

質問します。

"ファイルを開く python コードを教えて" と聞いてみました。

少し時間はかかりましたが、(数十秒~1分?) 答えが返って来ました。
回答を書き始めたら速い印象です。

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/3959d529-d43a-ee0d-864b-a4a098f6361b.png)

同じような回答ですが、追加で答えてくれました。(つまりユーザーの1 回の質問で WCA/ollama/granite側から2 回の回答がありました)

![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/9f0a069a-6d1b-7111-34f8-0994977ea7f3.png)


<br>

今回はインターネット接続環境で作成しましたが、Power環境は一般的にはClosed 環境が多いので、インターネット非接続のPower環境内にLLM 稼働サーバー作成できるように今後、手順を確認予定です。


---

### おわりに

* Power 上で簡単に ollama 環境を構築して、LLM を稼働することができています。

* CPU、メモリーリソースがどの程度必要なのかは、(時間があれば）調査できればと思います。

* 最近は ollama 互換の UI やサービスが増えてきているようなので、Local の ollama サーバーでLLMモデルを稼働させておけば他のサービスとの接続にも使用できそうです。


<br>

以上です。