
How to convert Flux fp16 to GGUF by flux tools
日々、生成AI関連情報を追ってはいますが、当然一人の人間の力には限界があります。取りこぼす情報も多々あります。
以下の記事が今の私にとって、極めて有用な情報をもたらしてくれました。非常に重要な情報の記述に感謝いたします。
まず、私はEasyForgeなるツール自体を知らなかったのですが、
ここで重要な事は、この作者殿がForge本体とは別建てで、「Flux1のfp16形式ファイルをGGUF形式に変換するツールを提供している」という点です。
実は、Llama.cppを使って同様の変換を試みていましたが、上手くいかなかったのです。
と言うか画像生成用のsafetensorsファイルに対して、これで成功した人はどうやって変換しているのか真剣に方法を教えてもらいたい位です。
そもそもこれは元々、HuggingFaceにアップされている言語生成AI用に開発されたもので、画像生成AI用のリポジトリをgit cloneで落としても、読み込めません。
現在情報が出回っている言語生成LLM用の方法ではconfig.jsonというモデル情報に関するファイルが必要なのですが、画像生成AIモデルにはこれがありません。
(ちなみに、言語生成用LLMの量子化は普通に成功しましたよ)
Llama.cppを使って画像生成AI用モデルを量子化した方、マジでどうやってるのか教えてもらいたいですよ。
…という課題に直面していたのですが、EasyForgeパッケージに含まれている「flux tools」によって、あっさりこの問題が解決してしまいました。

下図のように、自力でQ8_0形式の作成に成功しました。

私はForge本体については既に環境を構築しているので、EasyForgeの全ては必要ありません。インストール用のバッチファイルを実行後、以下の2つのフォルダ以外は削除します。

flux_toolフォルダを開き、「ConvertGguf」バッチファイルを実行します。すると下図のような画面になります。

あとはメッセージに従って操作するだけです。

尚、初期設定では下のようにQ6_KとQ8_0形式が作成される設定になっています。関連する全てのファイルの記述を変更すれば、それ以外の異なる設定の量子化も可能です。
@echo off
chcp 65001 > NUL
set PS_CMD=PowerShell -Version 5.1 -NoProfile -ExecutionPolicy Bypass
set "LANG_TAG="
for /f "tokens=*" %%i in ('%PS_CMD% -c "(Get-WinUserLanguageList).LanguageTag"') do set "LANG_TAG=%%i"
set "CONVERT_GGUF_MSG=Convert Flux model (fp16, 22GB~ recommended) to GGUF."
if "%LANG_TAG%" == "ja" (
set "CONVERT_GGUF_MSG=Flux モデル(fp16, 22GB~ 推奨)を GGUF に変換します。"
)
echo %CONVERT_GGUF_MSG%
set "SAFETENSOR_MODEL=%~1"
if "%SAFETENSOR_MODEL%" == "" ( call "%~dp0env\GetFluxModel.bat" )
if "%SAFETENSOR_MODEL%" == "" ( set "SAFETENSOR_MODEL=%FLUX_MODEL%" )
if not exist "%SAFETENSOR_MODEL%" (
echo [Error] Model not found: %SAFETENSOR_MODEL%
pause & exit /b 1
)
echo SAFETENSOR_MODEL: %SAFETENSOR_MODEL%
if not exist "%~dp0env\ConvertGgufFormat.txt" ( echo Q8_0 Q6_K >"%~dp0env\ConvertGgufFormat.txt")
set /p CONVERT_GGUF_FORMAT=<"%~dp0env\ConvertGgufFormat.txt"
call "%~dp0env\ConvertGguf.bat" "%SAFETENSOR_MODEL%" %CONVERT_GGUF_FORMAT%
if %ERRORLEVEL% neq 0 ( exit /b 1 )
画像も、きちんと生成できました。

これで、CivitaiやHuggingFaceに日々アップロードされているオリジナルマージのFlux1モデルを簡単に量子化できる道が開けました。ありがたい事です。
最後に余談。
この「EasyForge」、仮想環境の構築方法が極めてユニークです。面白い。こんな方法があるのかと感動してしまいました。
A1111のvenv形式でもなく、ForgeやComfyUIのPortable形式とも違います。
一見、パッと見ではA1111的なvenv形式に見えますが、実は違います。何故ならば「Python3.11.9をインストールしている私の環境で、Python3.10.6を使用する形でForgeが起動する」からです。
それだけなら、ForgeやComfyUIのPortable形式も同じことをやっていますが、EasyForgeはvenv形式で「これ」を実現しています。
フォルダ構造を丹念に調べて、一応大まかな理屈は理解しました。
なるほど、こんな方法もあるのか…と感心する形で、尤も今はそれを突っ込んで調べる処ではないので先に進みますが、このEasyForgeの仮想環境は後日もっと突き詰めて調べてみたいものです。