Ollama x Open WebUI で、新しくサポートされた「IBM Granite 3.0 モデル」を動かすまで

# 概要
2024年10月21日に、Ollamaに、従来の「Granite Code」に加えて、テキスト生成に対応する「IBM Granite 3.0 モデル」が加わりましたので、さっそくOllamaで確認してみました。
上記については、Ollamaの[ブログ記事](https://ollama.com/blog/ibm-granite)をご覧ください。

# Ollama環境のセットアップ
基本的には、以前書いた「[Ollama x Open WebUI で、IBMが作ったLLM「Granite Code」を動かすまでの備忘録](https://qiita.com/kolinz/items/2a89fad1bfbb5bcd944d)」と同じですので、環境の用意の際に参考にしてください。

# LLM「IBM Granite 3.0 モデル」の動作確認
IBM Cloud Virtual Serverで仮想サーバーを用意しましょう。Ollamaをインストール後、次のコマンドを実行します。
```
ollama run granite3-dense
```
こちらは、RAG(検索拡張生成)に使うことができる２つあるモデルのうちの１つで、軽量な2B（20億）パラメータの「granite3-dense」です。もう１つ8B（80億）パラメータの「granite3-dense:8b」があります。

コマンドを実行した結果、次のように表示されます。
```
>>> Send a message (/? for help)
```
実際に質問してみましょう。
```
IBMは、AIとクラウドコンピューティングを提供していますか？
```
質問を入力し、Enterキーを押すと、返信が生成されます。
```
はい、IBMはAIとクラウドコンピューティングの両方を提供しています。

AIは、人工知能（AI）および機械学習（ML）に関する分野です。IBMはAI技術を使用
して、さまざまな業界で自動化、分析、予測などのタスクをサポートします。IBM
Watsonは、AIとクラウドコンピューティングの両方を使用して、ビジネスクエリやト
ランスフォメーションに使用できるユーザーフレンドリーなプラットフォームです。


クラウドコンピューティングは、データセンターを所有するか持ちるかどうかに関わ
らず、インフラストラクチャ、アプリケーション、データをオンデマンドで提供する
サービスの一種です。IBM Cloudは、AIとクラウドコンピューティングの両方を使用
して、ビジネスに必要なすべてのリソースを提供します。IBM Cloud Pak for Dataは
、AIとクラウドコンピューティングを統合したデータとアプリケーション開発プラッ
トフォームです。

IBMは、AIとクラウドコンピューティングの両方を使用して、ビジネスに革新し、パ
フォーマンスを向上させるために、業界で信頼されています。
```
割といい感じの答えです。これは、インサイドセールス（デジタルセールス）やカスタマーサクセスのお仕事をしている方々にとっては、LLMを補助にすることで、より効率的にお客様と向き合う時間が増えそうです。

RAGを使う必要がなければ、さらに軽い「granite3-moe」や「granite3-moe:3b」も使えます。こちらも日本語で質問すると、返答が生成されます。
「granite3-moe」や「granite3-moe:3b」はとても軽量なので、スマートフォンやIoTデバイスに組み込んで使う前提と思われます。
今回のモデルは、いずれもライセンスが、Apache 2.0 ライセンスとのことなので、商用にも使えるので助かりますね。

次は、Open WebUIを使って、Webブラウザ上から、「IBM Granite 3.0 モデル」と会話できるようにしましょう。

# Open WebUI の起動
「[Ollama x Open WebUI で、IBMが作ったLLM「Granite Code」を動かすまでの備忘録](https://qiita.com/kolinz/items/2a89fad1bfbb5bcd944d)」を参考に、Nginxのインストールと、OllamaをAPI利用するためのリバースプロキシ設定ファイルを作成しておきます。

## curlを使ったOllamaのAPI接続および動作確認
次のコマンドを実行します。
```
curl http://仮想サーバーのパブリックIPアドレス/api/generate -d '{ "model": "granite3-dense", "prompt": "新潟県の県庁所在地はどこですか？日本語で答えてください。", "stream": false }'
```
http://仮想サーバーのパブリックIPアドレス/api/generate に接続し、LLM名を指定、プロンプトを指定することで結果を得ることができます。
動作確認なので、IPアドレスを使っています。本番運用では独自ドメインを使いましょう。

## Open WebUI の起動
次のコマンドを実行します。OLLAMA_BASE_URLに、先ほどインストールしたnginxを指定します。
```
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=http://仮想サーバーのパブリックIPアドレス -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
```
実行後、Webブラウザで、VMの3000番ポートにアクセスします。
動作確認なので、IPアドレスを使っています。本番運用では独自ドメインを使いましょう。

以下が表示されれば、正常に動作していることを示します。Open WebUIが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/1ddd7c1e-e0d2-2101-fb60-f4e024f0e67f.png)

# Open WebUI に管理者ユーザーを登録
最初の作業として、管理者ユーザーを登録します。「Sing up」をクリックします。
「Name」「Email」「Password」の各項目を入れ、「Create Account」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/f50d2aa8-1a61-3d3d-ec06-acb76e578f22.png)

「What’s New in Open WebUI」が表示されるので、一読した後に「Okay, Let's Go!」をクリックします。

# モデルを選ぶ
画面左上の「Select a model」をクリックし、「granite3-dense:latest」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/ae8324ba-81c3-1550-c261-7e48fdf06f70.png)

モデルが選ばれた状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/d05c8fb1-e73b-fa01-52f0-3910377d196d.png)

なお、画面を日本語化するには、赤枠の部分をクリックすることで隠されていたメニューが表示されるので、自分のユーザー名をクリックするとで、設定画面にアクセスができます。設定画面で日本語画面に切り替えることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/8ae50f12-b968-cffd-8284-d34c11ffe2c5.png)

# 日本語で質問してみる
「How can I help you today?」と表示されている欄が質問を入力するところですので、日本語で質問していみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/4db8652a-707d-74ec-a25e-535080b106f2.png)
先ほどと同じ質問にします。
```
IBMは、AIとクラウドコンピューティングを提供していますか？
```
次のように返信が生成されました。日本語に加えて、英語でも生成されました。IBM tambiénという謎の言葉が入っているので、日本語で回答してくださいと追記して、もう一度質問してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/780c26e5-a237-34bd-42a4-1c4f1b66aa00.png)

```
IBMは、AIとクラウドコンピューティングを提供していますか？日本語で回答してください。
```
次のように返信が生成されました。おそらく、Watson AIは、watsonx.ai かもしれませんが、わずか2Bモデルでいいかんじの内容が返ってきています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/aef3764d-5ac7-aeb2-1de6-4fed359a0e62.png)

このあたり、RAGの技術を使って調整すれば、期待ができそうです。

# まとめ
本記事では、LLM実行ツールの「Ollama」と「Ollama」のUIである「Open WebUI」、IBMが提供するLLMの「IBM Granite 3.0 モデル」の「granite3-dense」を使い、Webブラウザ上で使える生成AIサービスとして動かすまでを確認しました。
わずか2Bの小さなモデルであるにも関わらず、今後に期待できそうな結果となり、オープンソースの生成AIアプリ開発プラットフォームの「Dify」と連携させるなどすれば、RAGベースの生成AIアプリが作れるので楽しみです。