SafetensorsをGGUFファイルへ変換するWindows のバッチファイル

準備

Python の 仮想環境

ビジュアルスタジオのインストール

バッチファイル

ComfyUI-GGUF/tools at main · city96/

1回目の起動は環境設定 2回目の起動で変換します
modelフォルダーにモデルファイルを置いてください

b3962のバージョンに戻してから画像用にパッチを当てています
そのためバージョンが変わった場合は各自変更してください

@echo off
call %~dp0\scripts\env_for_icons.bat  %*
SET PATH=%PATH%;%WINPYDIRBASE%\PortableGit;%WINPYDIRBASE%\PortableGit\bin
SET PATH=%PATH%;%WINPYDIRBASE%\ffmpeg\bin
If not exist %WINPYDIRBASE%\content mkdir  %WINPYDIRBASE%\content 

set APP_NAME=ComfyUI-GGUF
set APP_DIR=%WINPYDIRBASE%\content\%APP_NAME%
echo %APP_DIR%
cd %WINPYDIRBASE%\content\
If not exist  %APP_DIR% git clone https://github.com/city96/ComfyUI-GGUF


cd %APP_DIR%
timeout /t 5
if not defined VENV_DIR (set "VENV_DIR=%APP_DIR%\venv")
if EXIST %VENV_DIR% goto :activate_venv

::python.exe -m venv "%VENV_DIR%" 
python.exe -m venv "%VENV_DIR%" --system-site-packages 
if %ERRORLEVEL% == 0 goto :pip
echo Unable to create venv 
goto :skip_venv

:pip
call "%VENV_DIR%\Scripts\activate"

pip install -r requirements.txt
git clone https://github.com/ggerganov/llama.cpp
:pi
cd tools
python fix_lines_ending.py
cd ..

::call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
::
call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"


cd llama.cpp
git checkout tags/b3962
git apply ..\tools\lcpp.patch

mkdir build
cmake -B build
cmake --build build --config Release -j10

cd ..
copy /y .\llama.cpp\build\bin\Release\llama-quantize.exe .\tools
copy /y .\llama.cpp\build\bin\Release\ggml.dll .\tools
copy /y .\llama.cpp\build\bin\Release\llama.dll .\tools
::rmdir /s /q .\llama.cpp\build
mkdir Model

cmd.exe /k

:activate_venv
call "%VENV_DIR%\Scripts\activate"
 
::cmd.exe /k
chcp 65001 > NUL
set GGUF_FORMAT=Q4_K_M
set MODEL_F=.\model
set "CONVERT_CMD=python .\tools\convert.py --src "
set "CONVERT_5d_CMD=python .\tools\fix_5d_tensors.py --src "
set "LLAMA_QUANTIZE_EXE=llama-quantize.exe"
set "LLAMA_QUANTIZE_CMD=.\tools\%LLAMA_QUANTIZE_EXE%"

 del/q  fix_5d_tensors_hyvid.safetensors

for %%f in ("%MODEL_F%\*.safetensors") do (
 echo %%f 
 %CONVERT_CMD% %%f 
if exist "%MODEL_F%\%%~nf-BF16.gguf" (
 %LLAMA_QUANTIZE_CMD%   "%MODEL_F%\%%~nf-BF16.gguf" "%MODEL_F%\%%~nf_%GGUF_FORMAT%.gguf" %GGUF_FORMAT%
 del/q  "%MODEL_F%\%%~nf-BF16.gguf"
)
if exist "%MODEL_F%\%%~nf-F16.gguf" (
 %LLAMA_QUANTIZE_CMD%   "%MODEL_F%\%%~nf-F16.gguf" "%MODEL_F%\%%~nf_%GGUF_FORMAT%.gguf" %GGUF_FORMAT%
 del/q  "%MODEL_F%\%%~nf-F16.gguf"
)
rem 
%CONVERT_5d_CMD%  "%MODEL_F%\%%~nf_%GGUF_FORMAT%.gguf"  --dst  "%MODEL_F%\%%~nf_%GGUF_FORMAT%_5d.gguf" %


)
timeout /t 5

goto :skip_venv
:skip_cmd
::
:skip_venv
cmd.exe /k

うまく変換できないモデルもあるようです

画像モデルでない場合は次のバイナリーを使っても良いです

https://github.com/ggml-org/llama.cpp/releases

C++

Posted by eightban