はじめに
M5Stack LLM ModuleはM5Stack Core向けのエッジLLMモジュールです。
M5Stack上からUIFlow2やArduinoIDEでUART越しにAPIをたたくとKWSやASRやLLMやTTSで答えてくれます。この価格帯のボードとしては相当高性能かつめちゃ簡単に使えるエッジLLMボードなので超おすすめ(今は売り切れ2ndロット待ち)商品です。
さらにはエッジAI用のSBCとしてもとても有能なので、便利なLinuxボードとしての使う際のTipsをまとめます。
必要な機材は以下の通りです。ほかにも随時USBケーブルやUSBカメラなども使用します。
M5Stack LLM Module
今回使用するエッジAIボードです。
M5Stakc Core
Basic、Core2、CoreS3のいずれでもOKです。主に電源供給用に使用します。
Debug Board
EtherポートとUSBシリアル通信ポートを備えたデバグボードです。Lniuxボードとして遊ぶならこれがあった方が100倍便利です。
LLM Moduleにアクセス
PCはWindowsを想定しています。
デバッグボードがある場合
デバグボードがある場合は以下の手順でアクセスできます。
①LLM Moduleとdebug boardをFPCケーブルで接続する。
②debug boardのType C USBポートとPCを接続する。
③PC側でデバイスマネージャを開き、接続したCOMポートを確認する(CH340と表示されているポート)
うまく表示されていない場合、PC側にドライバがインストールされていない可能性があるためインストールする。
④Tera Termなどのターミナルソフトを使って、ターゲットのCOMポートを開く。
通信速度は115200bps
⑤LLM ModuleのType C USBポートとPCやモバイルバッテリーなどを接続し、電源を供給する。
デバッグボードがない場合
①PCでSDK Platform-Toolsをダウンロードして任意のフォルダに解凍する。
②LLM Module とPCをUSBケーブルで接続する。
③PCでコンソールを開いて Platform-Toolsを解凍したフォルダに移動する。
④以下のコマンドでデバイスが認識できているか確認する。ケーブルやPCのUSBの仕様によっては接続できないので、いろいろ変えて試してみる。
adb devices
⑤以下のコマンドでログインする。
adb shell
⑥必要なファイルはpushで送信
adb push data.json /opt
⑦pullでダウンロード
adb pull /opt/data.json .
起動音を消す
@nnn112358 さんより報告。
/usr/local/m5stack/startup-script.shの該当行をコメントアウトする。
https://github.com/nnn112358/M5_LLM_Module_Report/blob/main/README.md
eMMCにファームをフラッシュ
フラッシュするには、AXDLフラッシュツールを使います。
公式ドキュメントの通り進めたらOKです。
以下は手順のまとめ
※バージョンアップなどでリンク切れする可能性が高いので公式ドキュメントも確認してください。
①ファームウェアをダウンロード
②AXDL Flash Toolをダウンロードして解凍
③ドライバをダウンロードして解凍
④ドライバ解凍先フォルダからIMAGE FLASH\AXDL_Driver_V1.20.46.1\Driver_V1.20.46.1\DriversForWin10\DriverSetup.exeを実行してインストール
④フラッシュツールの解凍先からIMAGE FLASH\AXDL_Flash_Tool_V1.24.13.1\AXDL_V1.24.13.1\Bin\AXDL.exeを実行
⑤フラッシュツールの左上のアイコンを押して、ダウンロードしたファームを読み込む
⑥Type C USBケーブルをPCに刺し、Module LLMには刺さないで待機
⑦フラッシュツールの▷アイコンを押して、書き込み待機状態にする。
⑧Module LLMのType C USBの隣ボタンを押しながら、Type C USB挿入すると自動的に書き込み開始。
10分弱程度で書き込み終了。
固定IP
@mongonta555 さんより報告。
https://x.com/mongonta555/status/1855511008305107175
ネットワーク接続
開発の上でネットワーク接続は必須なので、Etherで接続。
①debug board上のコネクタにLANケーブルを挿す
②USBシリアル、もしくはadbツールを使ってシステムにアクセス
③必要ならIPアドレスを固定して再起動
④ip a コマンドでeth0のIPアドレスを確認
⑤PCから調べたIPアドレスへSSHするなどしてネットワーク接続を確認
※usre:root / pass:123456
OpenCVインストール
Computer Vision系やるならOpenCVは必須なので入れます。
apt update
sudo apt install libgl1
pip install opencv-python
USBカメラ接続
@devemin さんより報告。
https://x.com/devemin/status/1855615695100506150
LLM ModuleのUSBポートにHubなどを通してUSBカメラを接続すると/dev/video0として認識される。
python でサンプルキャプチャするコード
※OpenCV使用
import cv2 # Import OpenCV library
# Camera device ID (usually, USB cameras use ID 0 or 1)
camera_id = 0
# Open the camera
cap = cv2.VideoCapture(camera_id)
# Check if the camera opened successfully
if not cap.isOpened():
print("Camera not found.") # If the camera is not found
exit() # Exit the program
# Camera settings: Resolution (width and height)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) # Set width to 1920 pixels
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) # Set height to 1080 pixels
# Camera settings: Frame rate (FPS)
cap.set(cv2.CAP_PROP_FPS, 30) # Set frame rate to 30 FPS
# Camera settings: Exposure, Brightness, and Contrast
cap.set(cv2.CAP_PROP_EXPOSURE, -6) # Set exposure (negative values decrease exposure)
cap.set(cv2.CAP_PROP_BRIGHTNESS, 0.5) # Set brightness (0.0 to 1.0, where 0 is dark and 1 is bright)
cap.set(cv2.CAP_PROP_CONTRAST, 0.5) # Set contrast (0.0 to 1.0, where 0 is low contrast and 1 is high contrast)
# Verify the applied settings
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
exposure = cap.get(cv2.CAP_PROP_EXPOSURE)
brightness = cap.get(cv2.CAP_PROP_BRIGHTNESS)
contrast = cap.get(cv2.CAP_PROP_CONTRAST)
print(f"Resolution: {width}x{height}")
print(f"Frame rate: {fps} FPS")
print(f"Exposure: {exposure}")
print(f"Brightness: {brightness}")
print(f"Contrast: {contrast}")
# Capture one frame
ret, frame = cap.read()
# If the frame is successfully captured
if ret:
# Save the captured image to a file
cv2.imwrite('captured_image.jpg', frame)
print('Image saved: captured_image.jpg') # Success message for image saving
else:
print("Failed to capture image.") # Failure message for image capture
# Release the camera
cap.release()
# Close any OpenCV windows (if any are used for display)
cv2.destroyAllWindows()
Wi-Fiドングル
USBドングルでWi-Fi接続しようとしたけどカーネルソースが無くてムリ
入れておきたいツール
tree
apt install tree
vim
vscodeでリモートログインするなら不要ですけど。
行番号表示など軽く設定しておくと便利。
sudo apt install vim
vim ~/.vimrc
追記する
set number
syntax enable
set expandtab
set tabstop=4
set shiftwidth=4
Tips
rootのpass
は、123456
カーネルヘッダ公開されました
https://x.com/HanxiaoM/status/1856581063021105413
ダウンロード
JimmyのHiの音声は
/opt/m5stack/data/audio配下の2つのWAVファイル
https://x.com/mongonta555/status/1855533752417493017
参考リンク
M5Stack Store販売ページ
M5Stack docments公式ドキュメント、リンク
Palsar2 Toolchain:step by step でAX_modelへの変換 など
OS Image update:LLM ModuleのOS Image Flash方法
ax-samples:vision model
ax-llm:LLMを触りたい
AXERA model zoo実行用バイナリもあるので試せる。動かせる。
@nnn112358 さんのレポート!
https://github.com/nnn112358/M5_LLM_Module_Report/tree/main
@nananauno さんのまとめ
https://zenn.dev/nananauno/scraps/259405f6aeaa90
参考アカウント
https://x.com/qqc1989 AXERA社中の人(DEV)らしき
https://x.com/kawagutt AXERA社中の人(JA)
https://x.com/hirotakaster LLM Module tester/contributer
https://x.com/HanxiaoM M5Stack社中の人(DEV)
https://x.com/M5Stack M5StackのBoss!
https://x.com/nnn112358 StickVのころからお世話になってます
https://x.com/ksasao StickVのころからお世話になってます
https://x.com/devemin ModuleLLMでROS動かす人
https://x.com/mongonta555 ModuleLLMにスタックチャンを宿らせる人
投稿者の人気記事
-
airpocket
さんが
2024/11/11
に
編集
をしました。
(メッセージ: 初版)
-
airpocket
さんが
2024/11/11
に
編集
をしました。
-
airpocket
さんが
2024/11/11
に
編集
をしました。
-
airpocket
さんが
2024/11/11
に
編集
をしました。
-
airpocket
さんが
2024/11/13
に
編集
をしました。
-
airpocket
さんが
2024/11/13
に
編集
をしました。
-
airpocket
さんが
前の金曜日の15:38
に
編集
をしました。
-
airpocket
さんが
前の金曜日の20:25
に
編集
をしました。
-
airpocket
さんが
前の金曜日の20:26
に
編集
をしました。
-
airpocket
さんが
前の金曜日の20:35
に
編集
をしました。
ログインしてコメントを投稿する