エッジデバイスでマルチモーダル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で確認してください。