Ollamaを使ってみる その1(Gemma2、Node-RED)

はじめに

 今回はローカル環境でLLMを利用できるOllamaを使ってみました。様々な言語モデルをインストールして、文章を生成することができます。

 これまで音声の文字起こしにWhisper、音声合成にVOICEVOXなどを利用してきました。さらに応答文を生成することができれば、AIとやり取りできるだろうという訳です。

 よく分からないGPUが載っているノートPCで実行しているのですが、もっといい性能のPCが欲しくなってきています...

▼以前の記事はこちら

Whisperを使ってみる(音声認識、OpenAI、Python)

はじめに  今回はOpenAIのWhisperを使ってみました。  OpenAIのサービスはAPIキーを使って有料で利用するイメージがあったのですが、ソースコードはMIT Licenseで公開さ…

PythonでVOICEVOX COREを使ってみる(音声合成)

はじめに  以前の記事でGoogle Cloud Platformの音声合成・音声認識を試したのですが、利用回数が多いとお金がかかります。やっぱり無料で実行したいということで、今回…

関連情報

▼Ollamaのページはこちら

https://ollama.com

▼Modelsのところに、利用できるモデルの一覧がありました。

https://ollama.com/library

 以前大阪24時間AIハッカソンで一緒に出場していた方から、Gemma2の2Bモデルが良いと聞きました。今回はそのモデルを試しています。少し時間が経つと、さらに良いモデルがどんどん出てきそうですね。

▼Gemma2はGoogleが開発しているモデルのようです。

https://huggingface.co/google/gemma-2-2b

▼大阪24時間AIハッカソンのときの記事はこちら

ちょっと振り返り:いろいろ参加しました(MFK2024、大阪24時間AIハッカソン、IoTLTなど)

はじめに  今回は最近参加していたイベントについてです。以前書いたのは三月頃でしたが、その後もいろいろありました。  まだまだ忙しい日々が続きそうです。 ▼これま…

▼OllamaのGitHubのリポジトリはこちら

https://github.com/ollama/ollama

▼ollama-jsという、JavaScriptで利用できるライブラリがありました。npmでインストールできるみたいですね。

https://github.com/ollama/ollama-js

Ollamaのダウンロード

  私はWindows 10で実行しています。

▼こちらからお使いの環境にあったものをダウンロードしてください。

https://ollama.com/download

▼Windows版はPreviewのようです。

https://ollama.com/download

▼Linuxはコマンドでインストールできるようです。

https://ollama.com/download

▼インストール後、Ollamaが実行されている状態になりました。

▼タスクバーのOllamaを終了しないと、起動したままになるようです。

Gemma2を利用してみる

モデルをダウンロードする

 今回はGemma2の2Bモデルを利用します。

▼Ollamaのgemma2のページはこちら。他のモデルも選択できます。

https://ollama.com/library/gemma2:2b

▼View moreで2Bのinstructやtextなどの他のモデルが表示されていました。

https://ollama.com/library/gemma2:2b

▼コマンドプロンプトでインストールしました。

ollama run gemma2:2b

▼インストール後、メッセージを送信できるようになっていました。

 この状態で、別のコマンドプロンプトで以下のコマンドを実行すると、インストール済みのモデルが表示されました。

ollama list

 コマンドプロンプト上でやり取りをしてみました。

▼挨拶をして特徴を聞いてみました。2021年の情報でトレーニングしているみたいですね。

▼文字化けしているので気になったのですが、ブラウザで実行できる場合は解消できるかもしれません。

Gemma2のモデルの違いについて聞いてみる

 Gemma2の中でもtextやinstructなどの様々なモデルがあったのですが、調べてもその違いがよく分からなかったので聞いてみました。

 textとinstructだと、文書の理解に適しているか、人間の指令に適しているかの違いがあるようです。

▼私はロボットと一緒に使いたいので、instructモデルが適していそうです。

 fp16と通常の2Bだと、16ビット浮動小数点か32ビット小数点かの違いがあるようです。

▼メモリ消費や計算時間に違いがあるので、使う場面によって使い分けできそうです。

 他にも2b-instruct-q6_Kのようにqが付くものがあったのですが、その違いはよく分かりませんでした。

▼新しいモデルだから知らないという可能性もありそうですが、Gemma2にも分からないようです。

コードの生成を試してみる

 Node-REDのノードを開発していたときに、既定のブラウザでURLにアクセスしてLicense Agreementなどのページを開きたいということで調べていました。せっかくなのでGemma2とChat GPTに聞いてみました。

 Gemma2だとエラーが出て、そのエラーを貼り付けて修正してもらっても実行できませんでした。

▼それっぽい回答は返ってきます。

 エラー文を見る限り、spawnの使い方を間違えているようでした。

▼Chat GPTに聞いてみても、spawnの使い方を間違えているとのことでした。

 Chat GPTにもプログラムの作成をお願いしました。

▼こちらではopenというモジュールを使った例が提示されました。

 提示されたプログラムをjsファイルとして実行したところエラーが出ました。これはReadmeを読むと分かるのですが、openがCommonJSをサポートしていないため、モジュールのインポート方法が異なるからです。

▼openのページはこちら

https://www.npmjs.com/package/open

▼エラー文を貼り付けたところ、プログラムをmjsファイルとして保存すると実行できました。

 できるだけ正確なプログラムを生成するときは、Chat GPTに聞いた方が早そうです。ちょっとした質問をローカルで聞くときにGemma2を使うようにしようかなと思っています。

Node-REDのノードで実行してみる

 Ollama用のNode-REDのノードがあったので試してみました。

▼ollama-jsを利用しているようですね。

https://flows.nodered.org/node/node-red-contrib-ollama

 サンプルフローをインポートして、Chatノードだけ実行してみました。

▼フローはこちら

▼ノードの中では、表示する名前だけ指定できるようになっています。

▼このまま実行すると、モデル名が不明というエラーが出ていました。

 injectノードでモデルやメッセージを設定していました。

▼modelの値がtestになっていたので、gemma2:2Bにしました。

▼実行できました。injectノードで実行してから数秒でレスポンスが返ってきました。

 msg.payloadから応答文だけ取り出してみました。

▼フローはこちら。changeノードを追加しました。

▼msg.payload.message.contentの値を、msg.payloadに代入しています。

▼実行毎に回答が変わっていました。

最後に

 Gemma2のテキスト生成が、私のノートパソコンでも結構早くてびっくりしました。ずっと前にローカルで実行できるAIを試したときは遅かった記憶があります。

 日本語で答えるように指示しておかないと英語で回答されることがあったため、明示的に指示を与えておいた方が良さそうです。

 ollamaノードはノード内でモデルを選択したいところですね。msg.payloadにはできれば質問文だけ送信したいところです。

 Node-REDでも利用できたので、他のノードと組み合わせて使ってみようと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です