メインコンテンツへスキップ
見出し画像

SafetensorsをGGUFファイルへの変換する!@llama.cppを使用するパターン

    Easyforgeさんはとても簡単にGGUFファイルへの変換がされているようです。
    ただ、pythonスクリプトを使用して行うことで、paperspaceも含めてほかの環境で使用しやすくなるかなと考え、とりあえず以下のページの内容をLocal環境で行ってみました。
    ※変換用のスクリプトが対応しているアーキテクチャは(flux, sd3, sdxl, sd1)の4つのようです。

    <手順概要>

    1. llama.cppリポジトリのクローンと必要なインストール

    2. lcpp.patchの適用とバイナリのコンパイル

    3. モデルの変換(FP16/BF16形式への変換)

    4. モデルの量子化(指定のフォーマットに量子化)

    ①llama.cppリポジトリのクローンと必要なインストール

    作業用フォルダを作成して、そこにllama.cppをgitcloneします。60MBぐらい。
    Local PCで行う場合は、そのディレクトリで、llama.cppのgguf-pyモジュールをインストールします。
    ※バージョンを指定してllama.cppをダウンロードすることもできますが、あとの操作でgitを使用するので、gitcloneをするのが良いと思います。

    git clone https://github.com/ggerganov/llama.cpp
    
    pip install ./llama.cpp/gguf-py

    こんなフォルダ構成になっています。model.safetensorsは実験用のSDXLモデルです。
    残りのpyとpatchは、リンクのHPのスクリプトです。

    画像

    ②lcpp.patchの適用とバイナリのコンパイル

    まずはコマンドプロンプトでllama.cppのディレクトリに移動した後、llama.cppのバージョンを指定したものに変えます

    git checkout tags/b3600

    次にlcpp.patchを適用して、コードを修正します。
    以下のコマンドを実行してください。これは一つ上のディレクトリのファイルを参照しているコマンドのようです。

    git apply ../lcpp.patch

    ③CMakeを使用してバイナリをコンパイル

    画像

    CMakeというのをインストールする必要があります。この「Windowsx64 Installer」をダウンロードして実行するとインストールされます。
    ここで、インストール時に「Add CMake to the system PATH for all users」というオプションを選択すると、cmakeコマンドをどこからでも使用できるようになります(デフォルトでチェックが入っているので外さない)。

    次のコマンドを1行ずつ、実行していきます。
    これは、コマンドプロンプトの場所が、llama.cppのディレクトリでの作業を前提にしています。

    mkdir build
    cd build
    cmake ..
    cmake --build . --config Debug -j10 --target llama-quantize
    

    CMAKEがインストールされていると色々とコマンドの作業が進みます。

    これで、build/bin/Debug/フォルダにllama-quantize.exeバイナリが生成されます。

    ④モデルの変換(FP16/BF16形式への変換)

    convert.pyを使用して、モデルの変換を行います。
    以下のスクリプトは、パスを指定せず起動した場合に、同じディレクトリ内のsafetensorsを認識するものです。

    batファイルを使用:パスをしていないで起動するコマンド

    @echo off
    REM カレントディレクトリに移動
    cd /d %~dp0
    
    REM Pythonスクリプトを実行
    python convert.py
    
    REM 実行結果を表示し、終了する前に待機
    pause

    「model/F16.gguf」が出来ました。

    画像

    ⑤モデルの量子化(指定のフォーマットに量子化)

    コンパイルしたllama-quantizeバイナリを使って、生成されたGGUFファイルを量子化します。量子化フォーマット(例:Q4_K_M)をコマンドで指定します。

    量子化しているようなコマンドが出現

    画像

    とりあえずこのコマンド自体が配置されている場所が異なる部分を指定しているため、面倒な印象。

    先程変換した「model/F16.gguf」と同じディレクトリに以下の内容のbatファイルを作成してダブルクリックすると、それを認識して変換するようなものを配置した。

    @echo off
    REM カレントディレクトリに移動
    cd /d %~dp0
    
    REM llama-quantize.exeの実行
    llama.cpp\build\bin\Debug\llama-quantize.exe model-F16.gguf model-Q4_K_S.gguf Q4_K_M
    
    REM 実行結果を表示し、終了する前に待機
    pause
    


    画像

    とりあえずサイズは小さくなった模様。
    このconvert.pyだと、diffusion modelのところだけ取り出している為、clipとvaeは入っていない状態です。

    画像

    ComfyUIのGGUFloaderで、modelのところからつなげると画像生成できました。

    とりあえずはGGUF化が出来たという話になります。

    GPTさんに聞いた感じだと、paperspaceのコマンドでも同じ様なことができるらしい。(試していない)


     
     
    Stablediffusionで、Ai画像を作成するのを趣味にしています。ComfyUI、paperspace絡みの記事などを興味のある範囲で作成しています。

    あなたへのおすすめ