1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stack Module LLM Advent Calendar 2024

Day 21

Module-LLMのNPU用モデルへ変換する(MobilenetV2編)

Last updated at Posted at 2024-12-20

目的

 Module-LLMのNPUでMobileNetv2のモデルを実行する手順を説明します。
 Module-LLMのNPUでMobileNetv2のモデルを高速に実行するには、INT8形式に量子化してモデルサイズを縮小する必要があります。
 Pulsar2というツールを使用してモデルを量子化します。手順は以下の通りです:

MobileNetv2モデルのONNX出力

Pythonパッケージ管理ツール(pip)のインストールで,Pytorchとonnxをインストールします。

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install onnx onnx-simplifier
python mobilenetv2_export_onnx.py
mobilenetv2_export_onnx.py
import torch
model = torch.hub.load('pytorch/vision:v0.10.0', 'mobilenet_v2', pretrained=True)
model.eval()  # モデルを評価モードに設定

# テスト用の入力データを作成(1枚の画像を想定)
x = torch.randn(1, 3, 224, 224)  # バッチサイズ1、RGB3チャンネル、224x224ピクセル

# ONNXファイルにエクスポート
torch.onnx.export(model,               # エクスポートするモデル
                 x,                    # モデルの入力として使用するダミーデータ
                 "mobilenetv2.onnx",   # 出力ファイル名
                 export_params=True,    # モデルパラメータをエクスポートする
                 verbose=True,          # 詳細な出力を表示
                 opset_version=11)      # ONNXのバージョン指定

必要に応じて、onnx-simplifierを使用してモデルを最適化します。
mobilenetv2の場合、すでに最適化されているため、この手順は必須ではありません。

# モデルの最適化
python -m onnxsim mobilenetv2.onnx mobilenetv2-sim.onnx

以上の手順により、PyTorchモデルをONNX形式に変換し、必要に応じて最適化することができました。

Pulsar2のインストール

こちらを参照して、Pulsar2をインストールします。

quick_start_exampleのダウンロード

モデルのコンパイルとシミュレーション実行に必要なオリジナルモデル、データ、画像、シミュレーションツールを、次のリンクからダウンロードできるファイルの中に、quick_start_exampleフォルダ内に用意しています。
サンプルファイルをダウンロードをクリックし、ダウンロードしたファイルを解凍してdockerの/dataパスにコピーします。

quick_start_example.zip

root@xxx:~/data# ls
config  dataset  model  output  pulsar2-run-helper

# model: オリジナルのONNXモデルを格納します(事前にonnxsimを使用して最適化済み)
# dataset: オフライン量子化キャリブレーション(PTQ Calibration)に必要なデータセットの圧縮ファイルを格納します(tar、tar.gz、gzなどの一般的な圧縮形式に対応)
# config: 実行に必要な設定ファイルconfig.jsonを格納します
# output: 結果出力を格納します
# pulsar2-run-helper: X86環境でのaxmodelのシミュレーション実行をサポートする

modelフォルダの下に、mobilenetv2-sim.onnxをコピーします。

MobileNetv2モデルのAXモデルへの変換

Pulsar2がインストールされている、Dockerを起動します。

$ sudo docker run -it --net host --rm -v $PWD:/data pulsar2:temp-58aa62e4

Pulsar2のbuildコマンドで、onnxモデルをModule-LLM(ax630c)のNPUに対応するaxモデルへ変換することができます。

# pulsar2 build --input model/mobilenetv2-sim.onnx --output_dir output --config config/mobilenet_v2_build_config.json.json --target_hardware AX620E
# cp output/compiled.axmodel model/mobilenetv2-sim.axmodel

mobilenet_v2_build_config.jsonは、pulsar2でモデル変換を行うための設定ファイルを記載しているものです。今回の設定は以下のようになっています。

mobilenet_v2_build_config.json
{
  "model_type": "ONNX",
  "npu_mode": "NPU1",
  "quant": {
    "input_configs": [
      {
        "tensor_name": "input",
        "calibration_dataset": "./dataset/imagenet-32-images.tar",
        "calibration_size": 32,
        "calibration_mean": [103.939, 116.779, 123.68],
        "calibration_std": [58.0, 58.0, 58.0]
      }
    ],
    "calibration_method": "MinMax",
    "precision_analysis": false
  },
  "input_processors": [
    {
      "tensor_name": "input",
      "tensor_format": "BGR",
      "src_format": "BGR",
      "src_dtype": "U8",
      "src_layout": "NHWC",
      "csc_mode": "NoCSC"
    }
  ],
  "compiler": {
    "check": 0
  }
}

モデルが生成できていることを確認します。

$ ls model/*.axmodel
mobilenetv2-sim.axmodel

参考リンク

@nnn112358/M5_LLM_Module_Report
https://github.com/nnn112358/M5_LLM_Module_Report

pulsar2-docs
https://pulsar2-docs.readthedocs.io/en/latest/index.html
https://axera-pi-zero-docs-cn.readthedocs.io/zh-cn/latest/doc_guide_algorithm.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?