maple-diffusion - MPSGraph を使用した iOS / macOS での安定した拡散推論

(Stable Diffusion inference on iOS / macOS using MPSGraph)

Created at: 2022-10-10 01:42:52
Language: Swift
License: MIT

🍁メープル拡散

メープルディフュージョンは、MPSGraphフレームワーク(Pythonではなく)を使用して、SwiftのmacOS / iOSデバイス上で安定した拡散モデルをローカルに実行します。

メープルディフュージョンは、最近のiPhoneで1〜2分で合理的な画像を生成できるはずです(私はiPhone 13 Proで〜2.3秒/ステップを回避します)。

iOSの4GBメモリ制限を超えることなく使用可能なパフォーマンスを達成するために、メープルディフュージョンはFP16(NHWC)テンソル、MPSGraphからの演算子融合、およびデバイスストレージへのモデルを本当に哀れな程度にスワップすることを内部的に依存しています。

macOSでは、メープルディフュージョンはわずかに多くのメモリ(〜6GB)を使用して、<1s /ステップに達します。

メープル拡散を使用したプロジェクト

デバイス要件

メープルディフュージョンは、Apple Silicon Mac (M1、M2 など) で実行する必要があります。インテルのMacはFloat16などをサポートしていないようです。

メープルディフュージョンは、十分なRAMを搭載したiOSデバイス上で実行する必要があります(≥6144MB RAMは間違いなく動作します;4096MBは動作しますが、私はそれに賭けません。最近のiPadは箱から出してすぐに動作するはずです。最近のiPhoneは、(4GBのRAMのロックを解除する)機能を動作させることができれば動作するはずです。

Increase Memory Limit

メープルディフュージョンは現在、Xcode 14iOS 16を期待しています。他のバージョンでは、ビルド設定の変更が必要な場合や、単に動作しない場合があります。

メープルディフュージョンは、最近のiOSデバイスでは動作しないと伝えられています。

  • iPhone 14の亜種は、メモリ制限の増加を尊重していないと伝えられており、起動時にクラッシュします
  • iOS 16.1(ベータ版)は壊れていると伝えられており、常に灰色の画像が生成されます

使い

メープル拡散を構築して実行するには:

  1. 安定拡散PyTorchモデルチェックポイント(sd-v1-4.ckpt、またはその派生物)をダウンロードする

  2. このリポジトリをダウンロード

    git clone https://github.com/madebyollin/maple-diffusion.git && cd maple-diffusion
  3. セットアップ & PyTorch で Python をインストールします, まだしていない場合は、.

    # may need to install conda first https://github.com/conda-forge/miniforge#homebrew
    conda deactivate
    conda remove -n maple-diffusion --all
    conda create -n maple-diffusion python=3.10
    conda activate maple-diffusion
    pip install torch typing_extensions numpy Pillow requests pytorch_lightning
  4. PyTorch モデルのチェックポイントを fp16 バイナリ BLOB の束に変換します。

    ./maple-convert.py ~/Downloads/sd-v1-4.ckpt
  5. Xcode プロジェクトを開きます。メニューから実行するデバイスを選択します。

    maple-diffusion
    Product > Destination

  6. この機能をターゲットに手動で追加します(この手順はiPadでは必要ない場合がありますが、iPhoneでは間違いなく必要です - デフォルトの制限は3GBです)。

    Increased Memory Limit
    maple-diffusion

  7. メニューを使用して、デバイス上でプロジェクトをビルドして実行します。

    Product > Run