見出し画像

SDXLなどのモデルをfp8変換する!@paperspace&ローカルPC

でんでんさんの記事を見てSDXLのfp8変換を試してみました。
スクリプトを公開いただき非常にありがたいです。
SDXLモデルをfp8に変換するのは難しいのかなと勝手に思っていましたので、色々と検証された結果も出されてとても勉強になりました。
公開いただいたスクリプトを参考にpaperspaceで使用するスクリプトを作成してみました。
ローカルPC用は自分向け(ものぐさ用)にカスタマイズしたものです。

スクリプトの変更点
①でんでんさんのスクリプトだとモデルのダウンロード機能も含まれる便利機能がついていますが、すでにダウンロードしたものだけを対象にしたものにしています。
②指定フォルダ内のsafetensorsファイル全てを変換します。変換後にfp8.safetensorsと少し名前を変えます。
変換時にfp8が名前に入っているものは変換しない様にしています。
③元のファイルは削除します
④ローカル版は、ディレクトリの指定はせず、モデルを保存しているフォルダ内にスクリプトを配置して、batファイルで起動します。

<paerspaceでのf8変換スクリプトの使用方法>

①スクリプトファイルをpaperspaceのnotebooksにアップロードする

②スクリプトの編集(モデルディレクトリの編集)
スクリプトを開くと、最初の方に変換するディレクトリの指定の項目があります。デフォルトはComfyUIで使用するモデルのディレクトリです。Forgeだと別に変更する形になります。

③モデルのダウンロード
変換に必要なSDXLモデルをダウンロードします。
ちなみにAuraflowなどで問題なく変換できます。

④セルコマンドの実行
paperspaceで使用するセルコマンドは以下です。python3.10の使用を前提としてpyスクリプトと起動スクリプトを作成しています。

!python3.10 model_convert_to_fp8.py

以下が実行例です。

SDXLは15秒くらい

これでfp8に変換出来ました。ファイルサイズは無事に小さくなってますね。

<蛇足的なもの>
ちょっと理解できていないのですが、fp8に変換したモデルを使用してComfyUIで画像生成を実行すると、条件によって生成速度が変わります。
具体的には、起動コマンドに「--fp8_e4m3fn-unet」を使用すると、生成速度は遅くなります。
また、別件になりますが、「load Diffusion model」というノードだと、「fp8_e4m3fn」と型を指示出来ますが、それでも生成速度は遅くなります。
これらじゃない通常の生成を行うと、「float16」型のモデルとして処理されます。

これは通常のSDXLモデル
fp8変換モデルの場合

生成速度自体は、同じぐらいになります。

--fastという起動コマンドを追加するとfp8は速くなるはずですが、この検証をした際は、--fastを抜いた方が生成結果が早くなりました。

<ローカルPCでのfp8変換方法>
これは、ComfyUIだと、checkpointフォルダにあたるモデルを配置しているフォルダ内に以下のローカル用スクリプトを配置します。
コマンドプロンプトで、スクリプトを起動するか、batファイルを作成してスクリプトを起動します。

必要なライブラリは以下です。
※pytorchのバージョンが古いと上の変換が出来ない可能性があります。

pip install torch safetensors tqdm
pip install torch --extra-index-url https://download.pytorch.org/whl/cu118

batファイルは以下の内容で同じフォルダ内に配置すると楽です。これをダブルクリックすればスクリプトが起動して変換してくれます。
「スクリプト起動.bat」とか名前をつける。
これはpython 3.11の使用

@echo off
REM 現在のディレクトリを取得
set script_dir=%~dp0

REM Python 3.11を使用してスクリプトを実行
python3.11 "%script_dir%model_convert_to_fp8.py"

REM 終了を待機
pause






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