| NXP プロセッサー実機検証ガイド 6 | NXP プロセッサー実機検証ガイド 8...準備中 | ||
| NXP プロセッサー 実機検証ガイドまとめ | NXP プロセッサー 初心者ガイドまとめ |
はじめに
i.MX95 を搭載した ADLINK社 SMARC LEC-IMX95 を使用して、オフラインで動作する Edge LLM のシステムを構築してみました。
その手順をまとめましたのでぜひお試しください!
また、LLM システムには NXP 社 eIQ GenAI Flow を使用しました。
参考: i.MX 95: LLM_RAG実装ハンズオン-eIQ Gen AI Flow-(日本語ブログ)
参考:eIQ GenAI Flow Demonstrator
参考:Building and Test instructions for LLM Demo Yocto Image
<今回使用した主な製品>
-
LEC-IMX95
ISP と最大 2 TOPS で動作する NPU を搭載した NXP i.MX95 プロセッサをベースにした、SMARC モジュールです
-
I-Pi SMARC Plus
M.2 拡張付き SMARC 2.1 リファレンスキャリアボードです - THS-siMX95
LEC-IMX95 のヒートシンクです
その他に今回用意したもの:
- Yocto Project 環境を構築するためのホストマシン
- HDMI ケーブル/モニター
- USB マウス・キーボード
- シリアルコンソールケーブル
- イヤホンマイク (3.5mmジャック)
- Windows 10 PC (MicroSD への OS イメージの書き込み用、U-boot Prompt のホストとして使用)
- MicroSD カード (32GB以上を推奨)
-
USB メモリ (eiq-genai-flowパッケージ のコピー用)
1.Yocto ビルドのホストマシン環境のセットアップ
1.1 ホストの推奨ハードウェアです。
- CPU:Intel Core-i7 プロセッサー (8コア以上)
- RAM:8GB 以上
- ストレージ:500GB以上
- OS:Ubuntu 20.04 LTS 64 bit version
- 高速ネットワーク接続
1.2 必須のホストパッケージをインストールします。
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm zstd liblz4-tool curl git python-is-python3
$ sudo apt-get install git-lfs
1.3 「Google リポジトリ」パッケージをホストにインストールします。
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=${PATH}:~/bin
$ export LC_ALL="en_US.UTF-8"
1.4 ソースをビルドする前に、以下のコマンドを実行して git が正しく設定されていることを確認します。
$ git config --global user.name "Your Name"
$ git config --global user.email "Your Email"
$ git config --list
2. git からのソースのフェッチ
ワーキングディレクトリを作成します。 下記では 「imx95-yocto-bsp」を作成しています。
$ mkdir imx95-yocto-bsp
$ cd imx95-yocto-bsp
必要なメタレイヤーをダウンロードします。
Yocto イメージをビルドするには、最新のブランチとマニフェストファイルを使用することをお勧めします。
ここで、利用可能なブランチとマニフェスト ファイルを見つけることができます。
scarthgap branch
$ repo init -u https://github.com/ADLINK/adlink-manifest -b lec-imx-yocto-scarthgap -m adlink-lec-imx95-yocto-scarthgap-LLM_1v0.xml $ repo sync $ NEUTRON_EIQ_DEMO=1 MACHINE=lec-imx95 DISTRO=fsl-imx-xwayland source adlink-imx-setup-release.sh -b <build_dir>
イメージのビルド
imx-image-full-eiq-genai-flow-dep を使用します。
$ bitbake imx-image-full-eiq-genai-flow-dep
<build_dir>/tmp/deploy/image/lec-imx95/ ディレクトリに imx-image-full-eiq-genai-flow-dep-lec-imx95*.wic というイメージが生成されます。
3.MicroSD カードへ Yocto イメージの書き込み ( Win32 Disk Imager を使用 )
今回 Windows 10 PC で Win32 Disk Imager というツールを使用し MicroSDカードへの書き込みを行います。
Win32 Disk Imager を起動します。
"Image File" で前のステップで生成した imx-image-full-eiq-genai-flow-dep-lec-imx95*.wic を指定します。
( 下記では imx-image-full-eiq-genai-flow-dep-lec-imx95.rootfs-20250806053940.wic を指定しています。)
"Device" で MicroSD カードを指定します。
"Write" ボタンをクリックします。
下記のようなポップアップが出てきますが、"Yes" をクリックします。
MicroSD カードへの書き込み状況を Progress で確認できます。
無事、書き込みが完了しました。
"Exit" ボタンを押して Win32 Disk Imager を終了します。
4.MicroSD カードからの LEC-IMX95 のブート
THS-siMX95(ヒートシンク)、LEC-IMX95 (SMARC モジュール) と I-Pi SMARC Plus (SMARC キャリアボード)を写真のように組み上げます。
一番上が ヒートシンク、一番下がキャリアボード、その間に SMARC モジュールを挟む形です
以下の設定/接続を実施します。
・イメージ書き込み済みのMicroSDカードのスロットへの挿入
・ブートデバイスをMicroSDカードに設定
以下の写真のようにDIP SWを"0110"に設定ください
・HDMIケーブルでモニターと接続
・USBマウス/キーボードの接続
・イヤホンマイクの接続
最後に電源アダプターを接続し起動します。
事前準備がうまくいけば以下のようにADLINK社のロゴの入った yocto の画面がHDMIモニターに表示されます。
5.eiq-genai-flow パッケージのコピー
Windows 10 PC にて、ここからeiq-genai-flowパッケージをダウンロードし、解凍して USB メモリにコピーします。
そのUSBメモリを上記 SMARC に接続します。
USBメモリ内の eiq-genai-flowパッケージを LEC-i.MX95 ホームディレクトリ(「/home」)にコピーします。
6.LLM デモの事前準備 (シリアルコンソール使用)
デモを実行する前に、Uboot プロンプトでの dtb ファイルの設定が必要です。
下記記事を参考に Host PC から SMARC へシリアルコンソールで接続します。
https://www.ipi.wiki/pages/imx95-docs?page=index.html#index.html
参考:ipiwiki:Reading The Data From Serial Port
SMARC を起動します。
Host PC のコンソール画面に、"Hit any key to stop autoboot:" が出力されている間に
何かしらのキー入力を行うと U-Boot のプロンプトが表示されます。
(この間にキー入力がなければ自動的に起動します。その場合は root でログインして、reboot して再度チャレンジしてください。)
下記コマンドを実行します。
print fdtfile で dtb ファイルが正しく設定されていることも確認しています。
setenv fdtfile "lec-imx95-neutron.dtb"
saveenv
print fdtfile
bootこの手順により、新しい dtb の設定は保存されますので、次回の SMARC 起動時にも適用されます。
7.LLM デモ実行
SMARC を起動します。
デモのスクリプトあるディレクトリに移動します。
# cd /home/eiq_genai_flow7.1 デフォルト デモ(プロンプト:テキスト入力、レスポンス:テキスト出力+音声出力)
次のコマンドでデモを実行します。
# ./eiq_genai_flow
Please type yorur question: が出力されたら、プロンプトを入力後に Enter キーを押すと、レスポンスが返ってきます。
下記のように、ターミナルでテキスト出力され、合わせてイヤホンマイクから音声出力もされます。
7.2 neutron デモ(NPU使用、プロンプト:テキスト入力、レスポンス:テキスト出力+スピーカー出力)
コマンドオプション --user-neutron の追加で NPU を使用します。(NPU でサポートしていないオペレーションは CPU で実行されます。)
次のコマンドでデモを実行します。
# ./eiq_genai_flow --use-neutronPlease type yorur question: が出力されたら、プロンプトを入力後に Enter キーを押すと、レスポンスが返ってきます。
下記のように、ターミナルでテキスト出力され、合わせてイヤホンマイクから音声出力もされます。
7-3. RAG デモ(糖尿病患者の医療に関するRAGデータベースを使用、プロンプト:テキスト入力、レスポンス:テキスト出力+音声出力)
コマンドオプション -user-rag の追加で RAG データベースを使用します。
次のコマンドでデモを実行します。
# ./eiq_genai_flow --use-ragPlease type yorur question: が出力されたら、プロンプトを入力後に Enter キーを押すと、レスポンスが返ってきます。
下記のように、ターミナルでテキスト出力され、合わせてイヤホンマイクから音声出力もされます。
7-4. vasr デモ(プロンプト:音声入力、レスポンス:テキスト出力+音声出力)
コマンドオプション -i vasr の追加で、音声入力のプロンプトに対応します。
次のコマンドでデモを実行します。
# ./eiq_genai_flow -i vasrSpeak the wakeword to start というメッセージが表示されたら、イヤホンマイクで "HEY NXP" を話しかけたあと、続けて質問します。
下記のように、ターミナルでテキスト出力され、合わせてイヤホンマイクから音声出力もされます。
まとめ
今回、デフォルト、NPU、RAG、音声入力のデモを実施しました。独自のRAGも構築可能ですので是非お試しください。
参考: [入門]i.MX 95: LLM_RAG実装ハンズオン-eIQ Gen AI Flow-(日本語ブログ)
| NXP プロセッサー実機検証ガイド 6 | NXP プロセッサー実機検証ガイド 8...準備中 | ||
| NXP プロセッサー 実機検証ガイドまとめ | NXP プロセッサー 初心者ガイドまとめ |