0
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?

SD1.5モデルをM5Stack LLM8850で動かす:推論速度9.5秒を実現したデプロイ全記録

Last updated at Posted at 2025-11-27

SD1.5モデルをM5Stack LLM8850で動かす:推論速度9.5秒を実現したデプロイ全記録

0.png

Stable Diffusion 1.5の任意のカスタムモデルを、M5Stack LLM8850アクセラレーションボード上で画像生成まで約9.5秒で実行できるようになりました。本記事では、Civitaiからのモデル選定からAX8850向けの最適化まで、実際に試行したデプロイ手順を詳しく解説します。

環境・使用ハードウェア

  • 開発ボード: M5Stack LLM8850アクセラレーションカード
  • 変換ツール: Pulsar2 4.2
  • 元モデル: Stable Diffusion 1.5ベース(xxmix9realistic v4.0を例として使用)
  • 全コード: https://github.com/yuyun2000/sd15-to-ax8850-deploy

モデル選定の条件

Civitai(https://civitai.com)からSD1.5モデルを選ぶ際、以下3点を満たす必要があります:
1.png

  1. Base Model: SD1.5であること
  2. モデルタイプ: Checkpoint(完全版) - LoRAは今後別途解説予定
  3. ファイルサイズ: 1.99GB程度が最適(多少大きくても動作可能)

例として使用したxxmix9realisticモデルは上記条件を全て満たしています。
2.png

デプロイ手順

1. safetensorモデルでの推論確認

まずPC環境で元モデルの動作を検証します:

python safetensor_infer.py \
    --input_path "./s/xxmix9realistic_v40.safetensors" \
    --output_path "./test_output" \
    --negative_prompt "easynegative,ng_deepnegative_v1_75t,(worst quality:2),(low quality:2),(normal quality:2),lowres,bad anatomy,bad hands,normal quality,((monochrome)),((grayscale)),((watermark))," \
    --prompt "1girl, upper body, (huge Laughing),sweety,sun glare, bokeh, depth of field, blurry background, light particles, strong wind,head tilt,simple background, red background,<lora:film:0.4>"

この段階で元モデルの生成品質を確認しておきます。
3.png

2. ONNX形式への変換

AX8850向けの最適化前に、まずONNX形式へ変換します:

python export_onnx.py \
    --input_path ./s/xxmix9realistic_v40.safetensors \
    --output_path ./out_onnx \
    --isize 480x320 \
    --prompt "1girl, upper body, (huge Laughing),sweety,sun glare, bokeh, depth of field, blurry background, light particles, strong wind,head tilt,simple background, red background,<lora:film:0.4>"

画像サイズに関する注意点:

  • 320x480: 横長画像
  • 480x320: 縦長画像
  • 512x512: 正方形(これより大きいとエラー)
  • VAEとの間で8倍のスケーリングが発生するため、後続処理で同じサイズ指定が必要

Text Encoderを個別エクスポートしない理由:

  1. AX提供のエクスポート環境の問題で変換が不安定
  2. 全モデル共通でCLIPを使用しており、カスタマイズ不要

ONNXモデルでの推論確認はpython dpm_infer.pyで実行可能ですが、次のステップに問題なければスキップ可能です。
4.png

3. 量子化用キャリブレーションデータの準備

python prepare_data.py

重要: モデルごとに適切なキャリブレーションデータが必要です。スクリプト内のサンプル生成ロジックは必要に応じて調整してください。

4. AX8850向けモデル変換

Pulsar2環境に切り替え、以下2つのモデルを変換します。

UNetの変換

pulsar2 build \
    --input out_onnx/unet_sim_cut.onnx \
    --config config_unet_u16.json \
    --output_dir output_unet_ax \
    --output_name unet.axmodel

処理時間: 約68分(環境により1時間前後)

VAE Decoderの変換

pulsar2 build \
    --input out_onnx/vae_decoder_sim.onnx \
    --config config_vae_decoder_u16.json \
    --output_dir output_vae_ax \
    --output_name vae.axmodel

Text Encoderの入手

変換済みモデルは以下から取得可能:
https://huggingface.co/yunyu1258/SD1.5-AX8850-xxmix9realistic/tree/main

このリポジトリには、ボード上で実行可能なPythonスクリプトも含まれています。

実測パフォーマンス

合計推論時間: 約9.5秒(20ステップ)

内訳:

  • Text Embedding: 0.7秒
  • Diffusion(20ステップ): 0.4秒 × 20 = 8秒
  • VAE Decoder: 0.7秒

10ステップへの削減も可能: 実測では画質への影響は軽微でした。用途に応じて調整することで、さらなる高速化が期待できます。

M5Stack LLM8850を選んだ理由

本プロジェクトでM5Stack LLM8850を採用した技術的理由:

  1. AX8850チップの推論性能: U16量子化による高速推論が可能
  2. 開発の容易性: Pulsar2ツールチェーンとの統合が良好
  3. エッジデバイス向け最適化: 省電力でSD1.5クラスのモデルを実行可能

まとめ

Stable Diffusion 1.5のカスタムモデルを、M5Stack LLM8850上で実用的な速度で動作させることができました。変換プロセスは時間がかかるものの、一度完了すれば安定した推論が可能です。

LoRAモデルへの対応や、さらなる高速化手法については、今後のアップデートで解説予定です。

0
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
0
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?