【PR】この記事には広告が含まれています。
Raspberry Piで生成AIを動かす。
これまで何度か試しましたが、短い文章であれば数秒で生成できても、長文になると待ち時間が気になることも。ラズパイで動くこと自体は興味深いものの、実用面では一歩足りない印象がありました。
そんな中で登場したのが、生成AIに特化した拡張ボードRaspberry Pi AI HAT+ 2です。従来のAI HAT+が画像認識などの推論AIを得意としてきたのに対し、本製品はLLM(大規模言語モデル)やVLM(視覚言語モデル)といった生成AIの実行を主目的に設計されています。
今回、Raspberry Pi Ltdさまより製品の提供をいただき、実機を試用する機会を賜りました。本記事では実際に触ってみて分かった処理時間の感覚や使い勝手を中心に、AI HAT+ 2の可能性に迫ります。

AI HAT+ 2 は Raspberry Pi 5 専用の拡張ボード

近年、クラウドに頼らずデバイス単体でAI処理を行うエッジAIが注目されています。通信遅延やプライバシーの問題を避けられる点から、Raspberry PiにはAI処理を担うプラットフォームとしての期待が高まっています。AI HAT+ 2 は、その流れの中で登場した拡張ボードです。

Hailoは、エッジデバイス向けに高性能かつ低消費電力のAIアクセラレータを開発している半導体メーカーです。
従来の AI HAT+ との違い
| 項目 | AI HAT+![]() | AI HAT+ 2![]() |
|---|---|---|
| 搭載チップ | Hailo-8 / Hailo-8L | Hailo-10H |
| 処理性能 | 13 TOPS / 26 TOPS | 40 TOPS |
| 対応機種 | Raspberry Pi 5 | Raspberry Pi 5 |
| 専用オンボードRAM | なし | 8GB 搭載 |
| 価格 | 13 TOPS:$70 26 TOPS:$110 | $130 |
| 販売ページ | 詳細を見る | 詳細を見る |
AI HAT+ 2はRaspberry Pi 5の上部に取り付け、PCIe(PCI Express)で接続して高速にデータ通信を行う拡張ボードです。
AI HAT+ 2は、従来モデルの単なる上位版ではありません。推論AIを高速に処理するための製品から、生成AIを扱うための製品へと役割が分かれたと考えるのが適切です。
従来のAI HAT+ が推論処理でRaspberry Pi本体のメモリを使用するのに対して、AI HAT+ 2は8GBの専用オンボードRAMを搭載しており、AI処理用のメモリが独立しています。そのため、メモリ競合が起きにくく、AI処理そのものが安定して高速に動作します。
Hailo-10H を搭載した AI アクセラレーター

従来の AI HAT+ が採用していた Hailo-8 / 8L は、画像認識などの推論AIを主用途としていました。一方、AI HAT+ 2 のHailo-10H は、より大規模で複雑なAI処理を扱うことを前提に設計されたチップです。AI HAT+ 2 は、このチップの特性を生かすための構成になっています。
AI HAT+ 2の取り付け

今回、Raspberry Pi本体はRaspberry Pi 5 16GBを使用しました。
カメラを使用する場合はこの段階で取り付けておきます。僕はRaspberry Pi Camera Module 3を使用しました。Raspberry Pi Active Cooler(別売り)を装着します。AI HAT+ 2は十分な性能を発揮するため、Active Coolerと一緒に使うことが推奨されています。

付属のネジでスペーサーを取り付け、GPIOピン延長用ヘッダをRaspberry PiのGPIOピンに差し込みます。

AI HAT+ 2本体にチップを冷却するためのヒートシンクを取り付けます。

フラットケーブルをRaspberry Pi側のPCIeポートに入れつつ、GPIOピン延長用ヘッダに差し込みます。

スペーサー部分をネジで固定したら取付完了です。
セットアップ手順

AI HAT+ 2を使う場合、32GBのmicroSDカードでは途中で容量が足りなくなりました。ファイルサイズの大きいモデルを複数ダウンロードしていくため、余裕を持って使うなら64GB以上のmicroSDカードをおすすめします。

Raspberry Pi OS Trixie を新しくインストールした状態から作業を進めます。別の用途で使っていた環境では、過去の設定などが影響し、AI HAT+ 2 がうまく動作しないことがあるようです。
準備ができたら、Hailo関連のソフトをインストールするための設定を行います。

以下のコマンドは途中で分けず、最初から最後までの行を一度に実行します。aptが参照するソフト配布先の一覧にHailo用のパッケージ配布先が追加されます。
sudo tee /etc/apt/sources.list.d/hailo.sources <<EOF
Types: deb
URIs: https://hailo:chahy5Zo@extranet.raspberrypi.org/hailo
Suites: trixie
Components: main
Signed-By: /usr/share/keyrings/raspberrypi-archive-keyring.pgp
EOF
ここで使っているEOFは、「ここまでを書き込む」という区切りを示す目印です。 <<EOF から始まり、最後に書かれた EOFまでの内容が保存されます。
次に、Raspberry Piに登録した内容を反映し、システムを最新の状態に更新します。
sudo apt update
Raspberry Pi ではaptという管理システムを使ってソフトを管理しています。
必要な更新をまとめて適用します。
sudo apt full-upgrade -yRaspberry Piを再起動し、更新内容を反映させます。
sudo rebootDockerのインストール
ブラウザから生成AIを操作するためのWebUI(Webベースの操作画面)を使うには、Dockerのインストールが必須です。WebUIの土台となる Dockerを、Hailoを入れる前に準備しておきます。

Dockerは必要なソフトや設定をまとめて用意し、Raspberry Pi OSの違いに影響されずにプログラムを実行するための仕組みです。
チェックポイント
Raspberry Pi OS TrixieではPython 3.13 が使われていますが、WebUIはこのバージョンに対応していません。そのため、Python環境に依存しないDockerを使ってWebUIを動かします。
まず、環境の競合を防ぐため、すでに入っている Docker 関連パッケージを削除します。
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)Dockerを正しくインストールするため、公式リポジトリを追加します。HTTPS通信に必要な証明書と、データ取得用のツール(curl)をインストールします。
sudo apt install ca-certificates curlリポジトリの署名キーを保存するためのディレクトリを作成します。
sudo install -m 0755 -d /etc/apt/keyringsDockerの公式署名キーをダウンロードして保存します。
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc保存した署名キーをシステムから読み取れるように設定します。
sudo chmod a+r /etc/apt/keyrings/docker.ascDocker の配布先を apt に登録します。
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOFパッケージ一覧を更新します。
sudo apt updateDocker 本体と関連ツールをインストールします。
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginDocker を起動します。
sudo systemctl start dockerDocker が正しく動作するかを確認します。
sudo docker run hello-world「Hello from Docker!」を含むメッセージが表示されれば、Dockerのセットアップは完了です。

Hailo-10Hドライバとランタイムの導入
Hailo-10HをOSから利用できるようにします。ドライバを自動で再構築する仕組み(DKMS)を導入します。
sudo apt install dkmsHailo-10H を使用するためのドライバとランタイム一式をインストールします。
sudo apt install -y hailo-h10-all
この処理は7分かかりました。
再起動します。
sudo rebootHailo Gen-AI Model Zooのインストール
Hailoが提供するGen-AI Model Zooを導入します。Gen-AI Model ZooはCLIやREST APIから利用できる、事前学習済みの生成AIモデルを集めたライブラリです。
この手順は内容が更新される可能性があるため、公式の手順に従ってインストールします。2026年1月11日時点では以下のコマンドを1行づつ実行してインストールしました。
sudo apt install -y libssl-dev
git clone https://github.com/hailo-ai/hailo_model_zoo_genai.git
cd /home/pi/hailo_model_zoo_genai
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
cp ./src/apps/server/hailo-ollama ~/.local/bin/
mkdir -p ~/.config/hailo-ollama/
cp ../config/hailo-ollama.json ~/.config/hailo-ollama/
mkdir -p ~/.local/share/hailo-ollama
cp -r ../models/ ~/.local/share/hailo-ollama
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrchailo-ollamaサーバーの起動
LLMのリクエストを受け付けるサーバーを起動します。hailo-ollamaは、Hailo-10H上でLLMやVLMを動かすためのサーバープログラムです。
hailo-ollamaチェックポイント
私の場合、ここでhailo-ollamaを実行した際にコマンドが見つからないと表示されました。hailo-ollama 本体を ~/.local/bin に配置していましたが、そのパスが反映されていなかったため、コマンドとして認識されなかったためです。
解決方法として、「echo ‘export PATH=”$HOME/.local/bin:$PATH”‘ >> ~/.bashrc」を実行して、 PATH を追加したあと、「source ~/.bashrc」を実行して設定を読み込み直すことで、hailo-ollama を実行できるようになりました。

新しいターミナルを開き、次を実行します。使用可能な LLMモデルの一覧が表示されます。
curl --silent http://localhost:8000/hailo/v1/list上記で表示された使用可能なモデルを以下にまとめました。
| モデル名 | 特徴 | 用途 | 開発元 |
| DeepSeek-R1:1.5B | 大規模モデルの思考パターンを小型に凝縮したモデル | 推論・汎用生成 | DeepSeek |
| Llama3.2:1b | シンプルで軽量、基本的な文章生成向け | 一般生成・会話 | Meta |
| qwen2.5-coder:1.5b | コード生成や解析に強い専門モデル | コード生成 | Alibaba Cloud |
| qwen2.5:1.5b | Qwen2.5の基本版、小〜中規模の生成タスク向け | 汎用言語生成・会話 | Alibaba Cloud |
| qwen2:1.5b | Qwenシリーズの前世代で、バランスの取れた生成能力 | 一般生成・会話 | Alibaba Cloud |
私が実際に使ってみたところ、qwen2:1.5bモデルが日本語のやり取りにおいて最も安定しており、回答精度が高いと感じました。他のモデルでは、日本語で質問しても英語で返ってきたり、不自然な日本語になったりすることが多いです。
LLMを動かしてみる
Qwen2 1.5Bモデルをダウンロードします。モデル名は先ほど表示された一覧にあるものへ変更できます。
curl --silent http://localhost:8000/api/pull \
-H 'Content-Type: application/json' \
-d '{ "model": "qwen2:1.5b", "stream" : true }'
ダウンロードは10分程度かかります。
以下のコマンドを実行すると、LLMに直接質問できます。
curl --silent http://localhost:8000/api/chat \
-H 'Content-Type: application/json' \
-d '{"model": "qwen2:1.5b", "messages": [{"role": "user", "content": "Translate to French: The cat is on the table."}]}'エラーが出ずに結果が返ってくれば、LLMの実行は成功です。
WebUI(ChatGPT風UI)で動かす
WebUIのDockerイメージを取得します。以下のコマンドでChatGPTのような画面を表示するためのプログラム一式をインターネットから取得します。
sudo docker pull ghcr.io/open-webui/open-webui:main
このダウンロードも10分以上かかります。
WebUIコンテナを起動します。
sudo docker run -d \
-e OLLAMA_BASE_URL=http://127.0.0.1:8000 \
-v open-webui:/app/backend/data \
--name open-webui \
--network=host \
--restart always \
ghcr.io/open-webui/open-webui:mainチェックポイント
このコマンドを実行する前に、別のターミナルでhailo-ollamaが起動していることを確認してください。
初回起動は数分かかります。次のコマンドで起動状況を確認できます。
sudo docker logs open-webui -f起動完了したら、Raspberry Piのブラウザで次のURLを開きます。
http://127.0.0.1:8080
ChatGPTのような画面が表示されます。

「はじめる」をクリックします。

WebUIの初回起動時には、ローカルで使用するユーザー情報の登録が必要です。これは外部サービスへのサインインではなく、Raspberry Pi上でWebUIを管理するための設定です。

登録した情報はRaspberry Pi本体内に保存され、以後はそのユーザーでログインします。
ログインすると、ChatGPTで馴染みのある画面が登場しました。

「あなたは誰ですか」の質問に回答してくれました。回答完了までの時間は7秒でした。

ブログに掲載するスクリーンショットでは、明るい画面のままだと文字やUIが見にくいため、ダークモードに切り替えました。
「Qwen2 1.5B」以外のモデルを使用したい場合は、以下の手順でダウンロードします。
qwen2.5:1.5bをWebUIで使えるようにする手順
①ターミナルを開き、hailo-ollamaを実行。
②別のターミナルで、次を実行。curl --silent http://localhost:8000/api/pull -H 'Content-Type: application/json' -d '{ "model": "qwen2.5:1.5b", "stream": true }'
③sudo docker start open-webuiを実行
④ブラウザでhttp://127.0.0.1:8080にアクセスし、モデル一覧からqwen2.5:1.5bを選択

Raspberry Piの再起動後など、次回以降は以下の手順でWebUIを立ち上げます。
再起動後の実行手順
①再起動後はターミナルを2つ開き、1つ目でhailo-ollamaを実行してLLMサーバーを起動。
②もう1つのターミナルでsudo docker start open-webuiを実行。
③ブラウザでhttp://127.0.0.1:8080にアクセスすればWebUIを利用できます。
PythonからLLMを動かす
ローカルLLMは、Pythonから制御することで電子工作やアプリに組み込みやすくなります。ここでは、PythonからローカルLLMを動かすための基本的な流れを説明します。
PythonからローカルLLMを使う前に、ターミナルからhailo-ollamaを実行しておく必要があります。

以下のコードはPythonからローカルLLMを呼び出し、回答を生成途中から受け取りつつ最終結果もまとめて取得するためのコードです。
import requests
import json
import time
# ローカルで起動しているLLMのAPIエンドポイント
url = "http://localhost:8000/api/chat"
# ユーザーの質問
question = "おすすめの気分転換の方法を教えてください。"
payload = {
# 使用するLLMモデルを指定
"model": "qwen2:1.5b",
# "model": "qwen2.5:1.5b",
# "model": "llama3.2:1b",
# "model": "deepseek_r1:1.5b",
# LLMに送る会話内容を指定
"messages": [
{"role": "user", "content": question}
]
}
# 質問内容を表示
print(f"質問: {question}\n")
# 思考開始時刻を記録
think_start_time = time.time()
print("思考開始\n")
# LLM APIにPOSTリクエストを送信(ストリーミング)
res = requests.post(url, json=payload, stream=True)
answer_started = False # 回答開始検知フラグ
final_answer = "" # 回答全文を格納する変数
for line in res.iter_lines():
if not line:
continue
data = json.loads(line.decode("utf-8"))
content = data.get("message", {}).get("content", "")
# 回答が初めて返ってきた瞬間
if content and not answer_started:
print("回答開始\n")
answer_started = True
# 回答内容を逐次表示しつつ、変数に蓄積
if content:
print(content, end="", flush=True)
final_answer += content
# 回答終了を検知
if data.get("done"):
elapsed = time.time() - think_start_time
print(f"\n\n処理時間: {elapsed:.2f}秒")
break
13~16行目で使用するLLMモデルを変更できますが、Raspberry Piにダウンロードしたモデルのみ利用できます。
ローカルLLMに質問を送信し、返ってくる文章をその場で表示しながら、同時に後続処理用として1つの変数に保存する構成になっています。

VLMで画像を説明してもらう
VLMを使うと、画像をもとに状況や特徴を言葉で表現させることができます。保存した写真だけでなくカメラ映像もそのまま渡せるため、精度次第ではリアルタイムの状況に応じた判断や提案にも使えそうです。実際に試しながら、回答の精度や処理にかかる時間を確認していきます。
Hailoデバイスが認識されていることを確認する。
hailortcli scan以下のようにデバイスアドレスが表示されれば、Hailoデバイスは正しく認識されています。

hailo-apps リポジトリを取得します。
git clone https://github.com/hailo-ai/hailo-apps.githailo-appsディレクトリに移動
cd hailo-appsvenvという名前のPython仮想環境を作成します。
python3 -m venv venv --system-site-packages仮想環境を有効化します。
source venv/bin/activatehailo-appsが定義しているGenAI用の追加依存関係をまとめてインストールします。
pip install -e ".[gen-ai]"
PyAudio のビルドでエラーが出たので、PortAudio をOS側にインストールしました。
sudo apt update
sudo apt install -y portaudio19-devもう一度 pip install を実行
pip install -e ".[gen-ai]"これで PyAudioも含めて最後まで通りました。
モデルのダウンロードや保存時に権限エラーが発生したので、事前にディレクトリを作成し、所有者をpiに変更します。まず、/usr/local/hailoディレクトリを作成します。
sudo mkdir -p /usr/local/hailo以下を実行して、/usr/local/hailo以下のファイルとディレクトリの所有者をユーザーpiとグループpiに変更します。
sudo chown -R pi:pi /usr/local/hailo保存した画像を説明させる
simple_vlm_chat を実行します。初回実行時はVLMモデル(Qwen2-VL-2B-Instruct for hailo10h)のダウンロードが行われるため、時間がかかります。
python -m hailo_apps.python.gen_ai_apps.simple_vlm_chat.simple_vlm_chatこのコマンドは、リポジトリ内の doc/images/barcode-example.png という画像を使って、HailoのVision Language Modelを試すデモを実行します。

この画像に対して “How many people in the image?”(この画像には何人の人が写っていますか?) という質問を行います。
「There is one person in the image.(この画像には1人の人物が写っています)」
と回答されました。

VLMモデルには Alibaba Cloud開発のQwen2-VL-2B-Instructが使われており、これが Hailo-10H 向けに最適化された形で提供されています。
「/home/pi/hailo-apps/hailo_apps/python/gen_ai_apps/simple_vlm_chat/simple_vlm_chat.py」のコードの一部を変更することで、渡す画像や質問の変更ができます。

質問を日本語に変えてみました。ざっくりとした回答ですが、赤い帽子と白いマスクが認識されており、悪くない結果です。

カメラの映像を説明させる

以下を実行すると、Raspberry Piカメラの映像についてVLMに質問できます。
python -m hailo_apps.python.gen_ai_apps.vlm_chat.vlm_chat --input rpiRaspberry Piカメラが起動し、ライブ映像が画面に表示されます。

Enterキーを押すと、その時点の映像が静止画として取得されます。静止した画像に対してターミナル上で質問を入力すると、VLMが画像を解析して回答を返します。

応答が始まるまでにかかる時間は約2秒で、その速さに驚きました。「日本語で答えてください」を質問に含めると日本語で回答が返ってきます。
Raspberry Pi再起動後の実行手順
「cd hailo-apps」でディレクトリに移動
「source venv/bin/activate」でPythonの仮想環境を有効化
「python -m hailo_apps.python.gen_ai_apps.vlm_chat.vlm_chat –input rpi」でvlm_chatを実行
今回使用したVLMでは、日本語で質問した場合に誤った物体名を返すことがあり、ミカンの映像を「にんにく」と回答する例が見られました。一方、同じ画像に対して英語で質問すると、「orange」と正しく認識され、英語で回答させた方が精度が高いようです。
まとめ

Raspberry Pi AI HAT+ 2を使ってみると、Raspberry Pi上でもLLMの回答が数秒で返ってくることがわかり、エッジAIとしての可能性にワクワクしました。カメラを使った生成AIでは、さまざまなシチュエーションや質問を次々に試してみたくなるような楽しさがあります。API利用料金を気にせず実行できるため、プロンプトや処理の調整を気軽に繰り返せる点も大きな利点です。
一方で、日本語の回答精度が安定しない場面があり、現時点では用途を選びながら使う必要があると感じました。ただ、この点はAI HAT+ 2自体の問題ではなく、モデルやソフトウェアの進化によって改善される余地があり、今後に期待したい部分です。
また、音声アシスタントや音声認識にも対応しているようなので、今後はそのあたりも試していきます。生成AIを単体で使うだけでなく、電子工作やセンサー、カメラと組み合わせることで、Raspberry Piならではの使い方に広げられそうです。ただ、AI HAT+ 2はRaspberry PiのGPIOピンをふさいでしまうため、電子パーツを接続しにくいという課題もあります。実際にいろいろ試してみて、面白い形になったものがあれば、この記事に追記していきます。


