はじめに
ファインチューニングしたモデルをOllamaなどで使いたい時にはみなさんどうしていますか?
今回はLLMモデルをGGUF形式に変換することで、Ollamaなどで使える形式にしてみました。
方法を忘れないようにこのブログに残しておきます。
GGUFとは?
GGUFは「GPT-Generated Unified Format」の略で、大規模言語モデル(LLM)のための形式です
llama.cppやOllamaで使う際にはこの形式に変換すると使えるようになります。
GGUF変換
では実際に変換していきましょう。GoogleColabを想定しています。
変換したものはHuggingfaceにPushするのでまずはログインしておきましょう。
!huggingface-cli login
必要なライブラリは以下。
!pip3 install -q -U accelerate transformers
まずは自前でチューニングしたモデルまたはGGUF形式に変換したいモデルを用意してください。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
model_id = "you-hf/your-model"
model = AutoModelForCausalLM.from_pretrained(model_id, device_map={"":0})
tokenizer = AutoTokenizer.from_pretrained(model_id, add_eos_token=True)
Pythonのロケール(locale)設定を変更して、文字エンコーディングを強制的にUTF-8に設定します。
import locale
def getpreferredencoding(do_setlocale = True):
return "UTF-8"
locale.getpreferredencoding = getpreferredencoding
llama.cppをクローンします。
!git clone https://github.com/ggerganov/llama.cpp
プロジェクトのセットアップと必要な依存関係のインストールを行います。
!cd llama.cpp && LLAMA_CUBLAS=1 make && pip install -r requirements/requirements-convert-hf-to-gguf.txt
from huggingface_hub import snapshot_download
base_model = "./original_model/"
quantized_path = "./quantized_model/"
#
snapshot_download(repo_id=model_id, local_dir=base_model , local_dir_use_symlinks=False)
original_model = quantized_path+'/your_model.gguf'
そしてconvert_hf_to_gguf
でGGUF形式に変換します。
!python /content/llama.cpp/convert_hf_to_gguf.py ./original_model/ --outtype f16 --outfile ./quantized_model/your_model.gguf
それを最後にHuggingFaceにアップロードします。
from huggingface_hub import HfApi, HfFolder, create_repo, upload_file
model_path = "./quantized_model/your_model.gguf" # Your model's local path
repo_name = "your-model-name-qa-GGUF" # Desired HF Hub repository name
repo_url = create_repo(repo_name, private=False)
これでHuggingFace上にGGUF形式のモデルがPushされました。
ぜひOllamaとかで使ってみてください。
最後に
Xやってるので気になる方はフォローお願いします。