💡

Ollama を Raspberry Pi 5 にインストールしておうちに Gemma 2 をお迎えする

2024/12/14に公開

こんにちは。tmassh です。
Google Developers Group Kwansai Advent Calendar 2024 14日目になります。

今日は手元にあった Raspberry Pi 5 に Gemma 2 をインストールしておうち LLM を始めてみようと思います。
LLM モデルをローカルの PC で試すには Ollama が便利です。
すでにセットアップが終わった Raspberry Pi 5 に Ollama のインストールと Gemma 2 モデルの立ち上げをやっていきます。

環境

以下、環境です。

H/W Raspberry Pi 5
RAM 8GB
ROM 64GB
OS Debian GNU/Linux 12 (bookworm)

Ollama のインストール

今回は ssh で Raspberry Pi 5 接続して、CUI でインストールしていきます。
まずは Ollama の install.sh を実行します。

$ curl -fsSL https://ollama.com/install.sh | sh

パスが通っているか確認

$ which ollama
# /usr/local/bin/ollama

インストールできてそうですね。

Gemma 2 を導入してみる

とりあえず一番軽量なモデルをダウンロード。

ollama pull gemma2:2b

ダウンロードできたのでプロンプトを投げてみました。

$ ollama run gemma2:2b "Hello"
Hello! 😊  

How can I help you today? 

なお、プロンプトを入力してから出力がでるまでは大体15秒くらいかかる感じです。

エッジならではを考える

せっかくなので Raspberry Pi 5 にインストールして嬉しいことを考えてみようと思います。
スタンドアロンで動かせるならかなり機微な情報を入れることもできそうですね。
まずは日常会話を与えてみて分析をさせてみました。なお、日常会話はマイクで取得した文字起こしを想定しています。

プロンプトはこちら。txt ファイルにしてコマンド内で展開することで楽できますね。

あなたは一般的な家庭の会話を聞いています。聞いた会話の内容の分析をして、会話に割り込んでください。
分析と次にあなたが発言する内容を json にまとめてください。内容は日本語でお願いします。

会話: ねぇ、今日の夕飯何にする?うーん、そうだね。冷蔵庫にあるもので何か作ろうか。トマトとかきゅうりあるから、冷やし中華とかどう?いいね!それなら私も手伝うよ。ありがとう。あと、デザートにフルーツも切ろうか。うん、いいよ。

```output:json
{
    analysisOfSituation: string,
    yourComment: string
}
```.

実行

$ ollama run gemma2:2b `cat gemma2/prompt1.txt`

出力

```json
{
 "analysisOfConversation": "2人での会話で、今日の夕飯の提案と、デザートの提案が交わされている様子が見受けられます。特に、冷蔵庫にある食材を活用して冷やし中華を作るという提案が出ています。そして、デザートにフルーツも切ろうかという提案が出されています。",
 "yourComment": "冷蔵庫にトマトときゅうりがあるので、冷やし中華がいいですね。私も手伝ってあげましょう" 
}
```  .

返ってきました。「私も手伝うよ!」とスマートスピーカーから聞こえるとちょっと笑っちゃいそうですね。

今度はもう少し修羅場を与えてみます。会話以外は同じです。

会話: なんでいつも片付けないの!何度言ったらわかるの!うるさい!そんなこと言われても、今忙しいんだ!忙しいって、いつもそうやって言い訳するんでしょ!もういい加減にして!だから、あとでやるってば!そんなに急かさないでよ!

出力

```json
{
 "analysisOfConversation": "この会話は、片付けに協力できない様子の1人が、他の人の言い訳を批判している様子。一方、片付けを要求する側は、怒りやFrustration を表しているように思える。",
 "yourComment": "落ち着いて、話し合ってみよう。片付ける時間帯は、お互いに確認して決めていくことを提案する" 
}
```.

**解説:**

* **分析**:  会話の内容から、1人が片付けを怠っていることに対する不満や怒りを表明していることが分かります。一方、他の側が忙しいと言い訳をするという姿勢も感じられます。しかし、この会話の雰囲気は対立しているため、冷静な方法でコミュニケーションを取ることが必
要です。 
* **あなたの発言**:  会話の場を和らげ、話し合いのヒントを与えるように発言しましょう。具体的には、「お互いに時間を調整して片付けの時間帯を決めよう」と提案するなど、具体的な解決策を提示することで、対立した雰囲気を解消し、話し合いを進めることができます。

AI に仲裁される人間...でも、第三者の介入っぽくて一旦冷静になれそうですね。
ところで、json 以外も出てますね。この内容だと上手く取り出せると思いますが。

今度はもう少し高度です。Raspberry Pi 5 が空調と照明をコントロールしていると仮定して、喧嘩している会話にどう返すかみてみます。

プロンプト

あなたは家庭の空調設備と照明設備を管理しています。部屋で一般的な家庭の会話を聞いています。聞いた会話の内容の分析をして、空調と照明を設定してください。
分析情報と空調、照明の設定情報を json にまとめて返してください。内容は日本語でお願いします。

会話: なんでいつも片付けないの!何度言ったらわかるの!うるさい!そんなこと言われても、今忙しいんだ!忙しいって、いつもそうやって言い訳するんでしょ!もういい加減にして!だから、あとでやるってば!そんなに急かさないでよ!

```output:json
{
    analysisOfSituation: string,
    lighting: {
        ratio: number, // 0.0~1.0 が入ります。0.0 が完全に電気が消えている状態です
        color: String // COOL または WARM が入ります
    },
    airConditioner: {
        temperature: number, // 20.0 ~ 29.0, 0.5刻みのセルシウス度
        mode: String, // COOL または WARM が入ります
    }
}
```.

出力

```json
{
 "analysisOfConversation": "会話の内容から、部屋の雰囲気は少し tensión で、話し合いが円滑に進まないことが見て取れます。一方、相手が意欲的で作業を進めている様子は伺えます。",
 "lighting": {
  "ratio": 0.5,
  "color": "WARM"
 },
 "airConditioner": {
  "temperature": 24.0, 
  "mode": "COOL",
  "description": "涼しい温度で、会話が落ち着く状態に。"
 }
}
```.

**解説:**

* **分析**: 会話の内容から、部屋の雰囲気は少し緊張していることが分かります。相手は忙しそうなので、少しだけ、リラックスできるような空気感を作りたいと考えます。
* **照明**:  「WARM」を使用することで、落ち着いた雰囲気を作り、会話が落ち着くように調整しました。
* **空調**: 24.0℃で涼しく設定することで、会話が落ち着く環境を作り、相手が作業を進めることができるよう配慮しました。

おお、これは面白いと思いました。「リアルタイムに会話を聞いて部屋の状態を LLM が変える。」というのが現実的ですね。解説も面白いです。

おわりに

Gemma2 を Raspberry Pi 5 で動かしてみて、いろいろ実験しながら使えそうなユースケースを考えてみました。Gemma2 の返答の精度が非常に高いと感じました。これがボードコンピュータで現実的に動かせる時代になったと高揚する気分です。
最後のは自分でも実装したくなってきたので、もし作ったらまたまとめたいと思います。

Discussion