見出し画像

Apple SiliconのCore MLでStable Diffusionを使ってみた|SJ Tech Blog

こんにちは、SONICJAMのエンジニアのキムです。
今回は、近年注目を集めている生成AI「Stable Diffusion」のCore ML版を使う方法と、実際に動かしてみた感想をまとめました。


Core MLとは?

Core MLは、Appleが2017年に発表した機械学習を扱うためのフレームワークです。iPhoneやMac上などのAppleのデバイスに機械学習モデルを組み込むことができ、画像解析、自然言語処理、音声テキスト変換などさまざまな機能をアプリ上で実現することができます。

Core MLは、CPU、GPU、ニューラルエンジンを活用して、オンデバイスのパフォーマンスを最適化しながら、メモリフットプリントと電力消費を最小限に抑えます。ユーザーのデバイスでのみモデルを実行することにより、ネットワーク接続の必要がなくなるため、ユーザーデータのプライバシーが保護され、Appのレスポンスも改善されます。

by Apple Developer

Core ML版のリポジトリ

こちらが、Core ML版 Stable Diffusionのリポジトリ。
Apple謹製で、PyTorchモデルをCore MLモデルに変換する為のPythonパッケージと、モデルを展開する為のSwiftパッケージが含まれています。

さらには、Stable Diffusionのオープンソースプロジェクトまで公開されています!

gitのREADMEを読んでみると、どうやらiOSでも動く、且つSwiftでも使えるようです。

気になるライセンスはというと、「Apache License 2.0」とのこと。
商用利用も可能ですし、もちろん自分たちでゼロからSwiftを使って制作することも可能です。

SwiftでCore ML版Stable Diffusionを使ってみた

以下のプロンプトを入力し、生成された画像はこちら。

black Lop rabbit in the style of Vermeer
【訳】ヨハネス・フェルメールのようなタッチで黒いロップイヤーのうさぎ

Ghibli Diffusionを使ってみた

最近SNSでもしばしば見かける、ジブリスタイルのStable Diffusionを見つけ、トライしてみました。
しかし、残念なことにCore MLには対応していないため、以下3つのページを参考にckptをmlmodelcに変換して、使ってみました。

まずは、python環境をつくるところから始めます。

conda create -n guernika python=3.8 -y
conda activate guernika
cd /path/to/unziped/scripts/location
pip install -e .

ckptファイルのみダウンロードしてやってみた

はじめに、ckptファイルのみダウンロードして実行する方法でやってみました。

python -m python_coreml_stable_diffusion.torch2coreml --checkpoint-path <checkpoint-path> -o <output-directory> --convert-unet --convert-text-encoder --convert-vae-encoder --convert-vae-decoder --convert-safety-checker --bundle-resources-for-guernika --clean-up-mlpackages

しかし、エラーが出てしまうため、以下の内容に修正し、再トライ。

pip install torch==2.1.0

pip install scikit-learn==1.1.2 ← Python 3.11.5ではできないのでPython 3.8.18を使う。

それでもエラーが出てしまうので、torch2coreml.pyを修正してみました。
結果として、mlpackageは作れたものの、mlmodelcに変換されず…
モジュールのconfigの読み込み設定が、このコードではできていないことが原因と考えられます。
そこで、リポジトリ内のすべてをダウンロードしてみました。

huggingface-cli download nitrosocke/Ghibli-Diffusion --local-dir .

しかし、こちらではckptはダウンロードできず…どうやらhuggingface-cli downloadはサイズの制限があるようです。
同じフォルダに入れてトライしましたが、同じ結果でした。

hugging faceのモデルpathを使ってやってみた

つづいて、hugging faceのモデルpathを使用する方法を試してみました。

python -m python_coreml_stable_diffusion.torch2coreml --model-version <model-identifier> -o <output-directory> --convert-unet --convert-text-encoder --convert-vae-encoder --convert-vae-decoder --convert-safety-checker --bundle-resources-for-guernika --clean-up-mlpackages

しかし、--checkpoint-pathを要求されるエラーが出てしまいます。

replacing <model-identifier> with the desired model's identifier

by Guernika/CoreMLStableDiffusion

ローカルで実行するわけではないので、--checkpoint-pathを設定する必要はないと思うのですが…この方法も失敗。

Guernika Model Converterを使ってやってみた

Guernika氏がHugging Faceにて公開しているモデル変換できるアプリを使用してやってみました。

同じくCheckpointでつくる方法で試してみると、mlmodelcは作れたものの、いざ使ってみるとエラーに…
そこで、Hugging Faceでつくってみることにトライ。

このように4つのファイルが生成されました。
なお、設定を変更すると、そのぶんファイルが作られます(safety checkerにチェックを入れるとその分のファイルも作られます)。

SwiftでCore ML版Ghibli Diffusionを使ってみた

ModelInfoにGuernika Model Converterで生成したmodelを登録します。

static let ghibliDiffusion = ModelInfo(
        modelId: "nitrosocke/Ghibli-Diffusion",
        modelVersion: "ghibli-diffusion-v1",
        supportsEncoder: true,
        supportsAttentionV2: true,
        quantized: true
    )

modelPathにモデル名前_original_compiledフォルダを作ってその中に作ったmlmodelcを入れ、vocab.jsonとmerges.txtファイルをHugging Faceのリポジトリから持ってきます。

ビルドすると表示されるGhibli Disffusionを選択します。

今回は、以下のプロンプトで画像を生成してみました。

prompt: ghibli style cute rabbit, gray
Negative prompt: Easy Negative
step :20 ,scale : 7, seed : 100
【訳】
ジブリのようなタッチでグレーの可愛いうさぎ


生成されるまでにかかった時間:13.854568004608154秒。
Ghibli Disffusionのライセンス:CreativeML Open RAIL-M license

使用したPCのPythonはPython3.11.5になっていてscikit-learn(サイキット・ラーン)に関する警告が出るものの、今回作ったmlmodelcの使用には問題になりませんでした。

Appleの変換方法でやってみた

今回は「Fictiverse/Stable_Diffusion_PaperCut_Model」という切り絵のイメージを生成するモデルを変換してみました。
AppleのCore ML版 Stable Diffusionを使ってもpythonコードは基本同じですが、使用するtorch2coreml.pyの中身が異なります。

Ghibli Diffusionと比べるために、同様のプロンプトでやってみました。

prompt: ghibli style cute rabbit, gray
Negative prompt: Easy Negative
step :20 ,scale : 7, seed : 100
【訳】
ジブリのようなタッチでグレーの可愛いうさぎ

生成されるまでにかかった時間:15.033193945884705秒。
Stable_Diffusion_PaperCut_Modelのライセンス : CreativeML Open RAIL-M license

結論

ローカルでの使用が可能なため、コスト削減にも繋がりますし、iOSでもネイティブで動かせるとなると、大きな可能性を感じます。
あらゆる方法でモデル変換を行ってみた結果、Apple公式のml-stable-diffusionのtorch2coremlを使った方法がおすすめです。

使用したPCスペック
Mac book Pro(2016) Chip: Apple M1 Pro , Memory: 32GB

SONICJAMのWorksページでは実際に生成AIを使用した制作実績を紹介しています。
ご質問・ご相談ございましたら、まずは、お気軽にお問い合わせください。


この記事が気に入ったらサポートをしてみませんか?