Slide 1

Slide 1 text

/nnn

Slide 2

Slide 2 text

Who am I? nnn aNo研のM5担当/TikTok担当です。 aNo研というものづくり集団をやっています。 あなたの心が動く、をコンセプトに活動して います。主に、XとTikTokで活動しています。

Slide 3

Slide 3 text

Who am I?

Slide 4

Slide 4 text

M5Stack 2019 StickV(K210) 2021 UnitV2(SSD202D ) UnitV3(AX620A ) 2024 ModuleLLM (AX630C ) M5StickV/UnitVを遊び倒し、後継のUnitV3で搭載されたAXERAのチップに興味を持って、 発売を心待 ちにしていました。いつの間にかUnitV3は消え、 Module LLMが発売されました。 Module LLM 発売前 2024 LLM630ComputeKIT (AX630C ) AXERA Gen1:AX630A → Gen2:AX620A/620U →Gen3:AX650A/AX650N→Gen4:AX630C/AX620Q 2023/1~2024/6 2024/6~2024/10

Slide 5

Slide 5 text

https://qiita.com/advent-calendar/2024/m5stack_module_llm ModuleLLMアドカレを作成して雑に書く。

Slide 6

Slide 6 text

Qiitaから完走賞とクリスマス大抽選キャンペーン1等を頂きました。 ModuleLLMアドカレを作成して雑に書く。 2023年 2024年

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

〇C++: AX620E BSP SDKライブラリ+ aarch64-linux-gnu(arm用のクロスコンパイラ) https://github.com/AXERA-TECH/ax-samples https://github.com/AXERA-TECH/ax620e_bsp_sdk 〇Python: pyaxengine https://github.com/AXERA-TECH/pyaxengine Pulsar2: AxeraのチップのNPUで 機械学習のモデルが動くように、 onnxモデルをaxmodelに変換するツール ・Module-LLMでNPUモデルを使ったアプリを作るには?: ( M5Stack LLM 座談会 #01で@AirpocketさんがAXERAに依頼した結果、リリースされました!感謝!!) 量子化して コンパイルして ONNXモデルを axmodelが完成

Slide 9

Slide 9 text

どれくらい早くなるのか? 252x252 NPU(quentized) 518x518 NPU(quentized) 518x518 CPU 252x252 CPU このモデルは80~180倍速い。 モデル変換することでNPUを使った推論になり、モ デル構成によっては処理速度が圧倒的に早くなり ます。但し、NPU推論は、主に量子化誤差が発生し ます。

Slide 10

Slide 10 text

量子化とは? Float32→INT8量子化をすると、32Bit(2ଷଶ)から8Bit(2଼ =256)の分解能に粗くなることで、量子化誤差が出ます。 量子化の処理を行う中では、量子化誤差を小さくするため、各レイヤーでスケール係数とゼロ点を設定して計算す る範囲を狭める処理が入ります。 スケール係数が大きいと階段状の誤差が出てしまいます。スケール係数が小さいと階段状の誤差は小さくなります が、OutputがRangeを超える飽和が起こりやすくなっていまいます。 スケール係数とゼロ点は、量子化の処理の中でキャリブレーションのデータセットを使って決定します。 誤差 誤 差 OutputのRangeに対して、 大きいスケール係数の場合 OutputのRangeに対して、 適切なスケール係数の場合 誤 差 OutputのRangeに対して、 小さいスケール係数の場合 Range= スケール係数x255 Range= スケール係数x255 Range= スケール係数x255

Slide 11

Slide 11 text

𝑥′ 𝑦′ 𝑧′ 𝑤′ = 𝑚ଵଵ 𝑚ଶଵ 𝑚ଷଵ 𝑚ସଵ 𝑚ଵଶ 𝑚ଶଶ 𝑚ଷଶ 𝑚ସଶ 𝑚ଷଵ 𝑚ଷଶ 𝑚ଷଷ 𝑚ଷସ 𝑚ସଵ 𝑚ସଶ 𝑚ସଷ 𝑚ସସ 𝑥 𝑦 𝑧 1 ②.Pythonでプログラミングします。 ①.ディープじゃないシンプルな 幾何学変換のモデルを作ってみます。 𝑚ଵଵ 𝑚ଶଵ 𝑚ଷଵ 𝑚ସଵ 𝑚ଵଶ 𝑚ଶଶ 𝑚ଷଶ 𝑚ସଶ 𝑚ଷଵ 𝑚ଷଶ 𝑚ଷଷ 𝑚ଷସ 𝑚ସଵ 𝑚ସଶ 𝑚ସଷ 𝑚ସସ 𝑥 𝑦 𝑧 1 𝑥′ 𝑦′ 𝑧′ 𝑤′ ←行列と行列の乗算 ③. Nectronでonnxを開きます。

Slide 12

Slide 12 text

# Pulsar2(docker)を起動 user@ubuntu$ sudo docker run -it --net host -v $PWD:/data pulsar2:3.3 # pulsar2 buildでモデル変換(量子化&コンパイル) root@:/data# pulsar2 build --config matmul_model.json 量子化onnxモデル

Slide 13

Slide 13 text

Float32 Float32 S8 S8 U8 Float32 量子化ONNXをNectronで開くと、 スケール係数とゼロ点が確認できます。 スケール係数とゼロ点は、 キャリブレーションのデータセットを使って、 Pulsar2の量子化処理の中で決定します。 スケール係数 ゼロ点 スケール係数 ゼロ点 量子化 量子化戻し

Slide 14

Slide 14 text

Pythonライブラリpyaxengineを使うと、 onnxruntimeから2行変えるだけでModuleLLMでのNPU推論ができます。

Slide 15

Slide 15 text

ModuleLLM[AX630C(AX620E)]のNPUで動く変換前のONNXオペレータ 注記1) オペレータによって、制約があります。以下参照のこと。 https://pulsar2-docs.readthedocs.io/en/latest/appendix/op_support_list_ax620e.html

Slide 16

Slide 16 text

https://github.com/anoken/Howto_Pulsar2 ソースコード置き場: