ラズパイ5とOllamaで構築するJanus-Pro-7B:エッジでのマルチモーダルAI環境構築ガイド

エッジデバイスでマルチモーダルAIを実現する意義

シングルボードコンピュータであるRaspberry Pi 5上で、画像認識、テキスト生成、そして画像生成までをこなすマルチモーダルAIを動かすことは、もはや夢ではありません。従来、このような高度な処理はクラウドサーバーに依存してきましたが、遅延(レイテンシ)の低減やプライバシー保護の観点から、ローカルデバイスでの実行、いわゆる「エッジAI」への注目が高まっています。

本記事では、DeepSeekによって開発された統合マルチモーダルモデル「Janus-Pro-7B」を、Raspberry Pi 5にデプロイする手順を解説します。Ollamaという強力なツールを活用することで、複雑な依存関係に悩まされることなく、軽量かつ効率的なAI環境を構築できます。

ハードウェアおよびソフトウェアの要件

円滑にモデルを動作させるために、以下の環境を推奨します。

1. 必要なハードウェア

  • Raspberry Pi 5 (8GBモデル): 7B(70億)パラメータのモデルをロードするには、8GBのメモリが不可欠です。
  • 高速なmicroSDカード(32GB以上): モデルファイル自体が大きいため、書き込み速度の速いカードを推奨します。
  • 冷却システム: 推論処理中はCPU負荷が高まるため、アクティブクーラーやヒートシンクが必須です。
  • 安定した電源: 27W USB-C電源アダプタなど、公式推奨の電源を使用してください。

2. ソフトウェア環境の構築

OSは「Raspberry Pi OS (64-bit)」を使用してください。セットアップ後、以下のコマンドでシステムを最新の状態に更新し、必要なツールをインストールします。

sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl python3-pip

Ollamaの導入とセットアップ

Ollamaは、Llama 3やJanus-Proといった大規模言語モデル(LLM)をローカル環境で簡単に実行するためのフレームワークです。

インストール手順

以下のスクリプトを実行するだけで、インストールが完了します。

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

インストール後、サービスが正常に稼働しているか確認します。

ollama --version

Janus-Pro-7Bのデプロイ

準備が整ったら、Janus-Pro-7Bモデルをダウンロードして実行します。

モデルのプルと実行

以下のコマンドでモデルをローカルに取得します。

ollama pull janus-pro:7b

ダウンロード完了後、対話型インターフェースを起動します。

ollama run janus-pro:7b

最初の起動時にはメモリへのロードが行われるため、数分かかる場合があります。プロンプトが表示されたら、テキストを入力して動作を確認してください。

Python APIを活用したマルチモーダル処理

Janus-Proの真価は画像理解にあります。Pythonを使用して、画像を解析させる簡単なスクリプトを作成してみましょう。

import requests
import base64

def process_vision_task(img_path, query_text):
    # 画像をBase64形式に変換
    with open(img_path, "rb") as f:
        encoded_img = base64.b64encode(f.read()).decode('utf-8')

    api_url = "http://localhost:11434/api/chat"
    
    # リクエストデータの構築
    data_payload = {
        "model": "janus-pro:7b",
        "messages": [
            {
                "role": "user",
                "content": query_text,
                "images": [encoded_img]
            }
        ],
        "stream": False
    }

    try:
        res = requests.post(api_url, json=data_payload)
        res.raise_for_status()
        return res.json()['message']['content']
    except Exception as error:
        return f"エラーが発生しました: {error}"

if __name__ == "__main__":
    image_file = "sample_image.jpg" # 解析したい画像パス
    prompt = "この画像の中に何が写っているか詳しく説明してください。"
    
    description = process_vision_task(image_file, prompt)
    print(f"AIの回答:\n{description}")

パフォーマンスの最適化テクニック

Raspberry Pi 5は高性能ですが、7Bモデルを動かすにはリソース管理が重要です。

1. zswapの有効化とスワップ設定

メモリ不足によるクラッシュを防ぐため、スワップ領域を調整します。

sudo dphys-swapfile swapoff
sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=2048/' /etc/dphys-swapfile
sudo dphys-swapfile setup
sudo dphys-swapfile swapon

2. バックグラウンドプロセスの制限

推論速度を向上させるため、デスクトップ環境(GUI)を使用していない場合は、CLIモードで実行することでメモリを節約できます。

3. 生成パラメータの調整

API経由で利用する場合、num_predict(出力トークン数)を制限したり、temperature(ランダム性)を調整することで、レスポンスの体感速度を改善できます。

トラブルシューティング

  • モデルのロードが止まる: 空きメモリが不足している可能性があります。htopコマンドでメモリ使用状況を確認してください。
  • レスポンスが非常に遅い: CPU温度が上昇してサーマルスロットリングが発生している可能性があります。冷却状態を確認してください。
  • API接続エラー: Ollamaサービスがバックグラウンドで動いているか、systemctl status ollamaで確認してください。

タグ: RaspberryPi5 Ollama Janus-Pro EdgeAI MultimodalAI

8月4日 07:58 投稿