サイト内検索

※本記事は2025年8月時点の情報をもとに記載しております

はじめに

生成AIをエッジデバイスで実現可能にするHailo-10Hを組み込んで、Qwenを使ってチャットできる組み込み機器を作ってみました。

使用機器

Hailo社 AIアクセラレーター Hailo-10H

Hailo-10HのStarter Kitの内容物

Hailo社のAIアクセラレーターの新製品としてHailo-10Hが発売となりました。主にCNNモデル向けのHailo-8との違いとして、DRAMを抱えることによる大きなモデルへの対応、Transformerモデルに必要な機能の追加等などにより、生成AIのモデルにも対応できるようになりました。ただし、パラメーター数が10B程度までの対応となる見込みです。

今回はHailo-10Hのメモリー8GB版を使用しています。

 
現時点ではユーザーが自由にモデルを追加できるようにはなっておらず、Hailo社で準備したモデルのみ動かすことができます(LoRAによるファインチューニングは可能です)。対応モデルは以下に記載されています。

https://hailo.ai/products/hailo-software/model-explorer/generative-ai/

 

右の写真はHailo-10HのStarter Kitの内容物の写真をとってみました。

ADLINK社 産業用ファンレス組み込みPC MXE-310

今回はHailo-10Hを実装するHostPCとして、BOX型PCのADLINK社MXE-310を使用しました。Intel® Core™シリーズが載っておりながらファンレスで小型(180x130x70mm)なIPCとなっております。CPUやメモリーは選べますが今回は以下の仕様になっております。

CPU: I3-1315UE
Memory: 32GB

 

右の写真は実際に使ったMXE-310の外観写真です。

Hailo-10Hの実装

MXE-310の背面を開けると拡張用のM.2コネクターがありますので、そこにHailo-10Hを挿しています。右の写真はHailo-10Hを挿したところになります。

背面とHailo-10Hはヒートスプレッダーでつながっており筐体に熱を逃がす構造になっています。

Hailo-10Hセットアップ

今回はMXE-310のUbuntu22.04上でHailo-10Hの環境を構築します。

Hailo社がollama APIの形式と互換性のあるAPIを提供しており、そちらを使うため今回は以下のリンクに沿って準備していきます。

https://github.com/hailo-ai/hailo_model_zoo_genai

 

詳細は割愛しますが、流れを簡単に説明しますと

①HailoRTのインストール

HailoRTのUser Guideに沿って必要なパッケージをインストールしてからdebパッケージをインストールします。User GuideとdebパッケージはHailoのDeveloper Zoneからダウンロードします。Developer Zoneのリンクは以下となりますがHailo Webへの登録が必要になりますので、登録を済ませてください。

https://hailo.ai/developer-zone/

HailoRTのインストール後は再起動が必要です。

<使ったコマンド>

$ sudo apt update
$ sudo apt install build-essential
$ sudo apt install bison
$ sudo apt install flex
$ sudo apt install libelf-dev
$ sudo apt install dkms
$ sudo apt install curl
$ sudo apt install cmake
$ sudo apt install pip
$ sudo apt install virtualenv
$ sudo apt install systemd

$ sudo dpkg --install hailort_5.0.0_amd64.deb hailort-pcie-driver_5.0.0_all.deb

 

②Hailo Model Zoo GenAIのインストール

debパッケージが準備されているのでそれをインストールします(debパッケージはDeveloper Zoneよりダウンロードできます)。

<使ったコマンド>

$ sudo dpkg -i hailo_gen_ai_model_zoo_5.0.0_amd64.deb

 

これでインストール完了です。

最後にhailortcli scanコマンドで以下のように認識できていれば問題ないかと思います。

ollama APIの動作確認

まず、Hailoのollamaを起動させます。

$ hailo-ollama

上記コマンドを実行すると以下のようにhailo-ollamaが起動します。

以降は別のターミナルウインドウでcurlコマンドでhailo-ollamaにアクセスします。

・対応モデルの表示

$ curl --silent http://localhost:8000/hailo/v1/list

 ※2025年8月時点での対応モデル:{"models":["deepseek_r1_distill_qwen:1.5b","qwen2.5-coder:1.5b","qwen2.5:1.5b","qwen2:1.5b"]}

 ※2025年8月時点ではhailo-ollamaはVLMモデルには対応しておらず、LLMモデルのみの対応となっております

・モデルのダウンロード

$ curl --silent http://localhost:8000/api/pull -H 'Content-Type: application/json' -d '{ "model": "qwen2:1.5b", "stream" : true }'

 

ここから先は対応モデルの中からqwen2:1.5bを使用していきます。

(このモデルが日本語対応が一番良いように感じました)

 

実際に質問を投げてみます。

$ curl --silent http://localhost:8000/api/generate -H 'Content-Type: application/json' -d '{"model": "qwen2:1.5b", "prompt": "Why is the sky blue?", "stream":false}'

$ curl --silent http://localhost:8000/api/chat -H 'Content-Type: application/json' -d '{"model": "qwen2:1.5b", "messages": [{"role": "user", "content": "Why is the sky blue?"}]}'

それぞれ以下のような回答の形式になります。

curlコマンドで実際にQwenモデルとやりとりができることが確認できました。

レスポンスはクラウドのLLMに質問を投げるのと変わらないぐらいだったので、計算リソースの少ない組み込み機器で実現できているのはなかなかすごいと思います。ただし、インターネットを介さない組み込み機器での処理だとさらなるレスポンス向上は求められる気もするのでそこはもう少しチューニングなりが必要なように感じました。

 

次に、curlコマンドでのやりとりは一般ユーザーにはハードルがありますので、誰でも使えるチャットボックスでやり取りできるようにPythonで作ってみたいと思います。

チャットボックスの作成と動作確認

ブラウザー上でチャットができる仕組みを生成AIの力を借りて作ってみましたので紹介します。

実際のPythonコードとhtmlコードを貼り付けておりますが、あくまでサンプルであり動作保証されたものではありませんのであらかじめご承知おきください。

 

まずはPythonコードです。

app.pyというファイル名とします。

from flask import Flask, render_template, request, jsonify
import requests
import json
app = Flask(__name__)
# メインページを表示するルート
@app.route('/')
def index():
    return render_template('index.html')
# チャットメッセージを処理するルート
@app.route('/chat', methods=['POST'])
def chat():
    user_message = request.form['message']
    # Ollama API へリクエストを送信
    response = requests.post(
        "http://localhost:8000/api/generate",
        json={
            "model": "qwen2:1.5b", 
            "prompt": user_message,
            "stream": False
        },
        stream=True
    )
    generated_text = ""
    # ストリーミングレスポンスを処理
    for line in response.iter_lines():
        if line:
            line_str = line.decode('utf-8')
            data = json.loads(line_str)
            if "response" in data:
                generated_text += data["response"]
    return jsonify({'response': generated_text})
if __name__ == '__main__':
    app.run(debug=True)

次にhtmlのコードです。

index.htmlというファイル名とします。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>チャットアプリ</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        body { font-family: Arial, sans-serif; }
        #chat { border: 1px solid #ccc; height: 300px; overflow-y: scroll; padding: 10px; }
        #user-input { margin-top: 10px; }
        #message { width: 100%; height: 50px; } /* 幅を100%、高さを50pxに設定 */
        button { height: 50px; } /* ボタンの高さを調整 */
    </style>
</head>
<body>
    <h1>Hailo-10H チャット</h1>
    <div id="chat"></div>
    <div id="user-input">
        <textarea id="message" placeholder="メッセージを入力"></textarea> <!-- inputからtextareaに変更 -->
        <button id="send">送信</button>
    </div>
    <script>
        $('#send').click(function() {
            let message = $('#message').val();
            $('#chat').append('<div>あなた: ' + message + '</div>');
            $('#message').val('');
            $.post('/chat', { message: message }, function(data) {
                $('#chat').append('<div>Hailo-10H: ' + data.response + '</div>');
                $('#chat').scrollTop($('#chat')[0].scrollHeight);
            });
        });
        $('#message').keypress(function(e) {
            if (e.which == 13 && !e.shiftKey) { // Shift + Enter で改行、防止
                $('#send').click();
                e.preventDefault(); // Enterキーでフォーム送信を防ぐ
            }
        });
    </script>
</body>
</html>

app.pyと同じフォルダーに「templates」フォルダーを作りその中にindex.htmlを保存します。

以下のフォルダー構成になります。

haillo-ollamaが起動した状態でapp.pyを実行します。

$ python3 app.py

上記のように実行されますので、次にブラウザー上で「http://127.0.0.1:5000」へアクセスします。

そうすると以下のチャットボックスが表示されます。

上記の「メッセージを入力」のボックスに質問を投げてみます。

今回は日本語で「夏の暑さへの対策を教えてください」という質問を投げてみました。

以上のような回答となりました。

日本語自体や内容も若干物足りないものになっており、日本語に対してはファインチューニングなどモデルの改善が必要なように思いました。また、回答が出そろってから一気に表示されるようになっており回答が得られるまでにそれなりの時間がかかります。アプリケーションの組み方にももう一工夫が必要かもしれません。

 

とはいえ組み込み機器上だけでLLMが処理できる、という事実は今後の可能性を感じるものでした。

まとめ

今回はMXE-310+Hailo-10Hという組み込み環境上でチャットができるシステムを構築しました。実際に動かしてもらえれば分かりますが、若干レスポンスが悪かったり、日本語精度にも多少の不満が残ります。

とはいえ、モデルも日々進化しておりますし、Hailo-10Hの使いこなしテクニックも進歩していくでしょうから、今後は改善も期待できるかと思われます。

実際に手元で試してみたい方は以下の問い合わせフォームよりお問い合わせください。

お問い合わせ

本記事に関してご質問がありましたら以下より問い合わせください。

Hailo メーカー情報Topへ

Hailo メーカー情報Topページへ戻りたい方は、以下をクリックください。