hf to gguf
Convert model to ht format
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# Load the trained model and tokenizermodel = GPT2LMHeadModel.from_pretrained("./trained_model")
tokenizer = GPT2Tokenizer.from_pretrained("./trained_model")
# Define the directory to save the model and tokenizersave_directory = "./trained_model/hf_model"
# Save the model and tokenizermodel.save_pretrained(save_directory)
tokenizer.save_pretrained(save_directory)
# Load the model and tokenizer from the saved directoryloaded_model = GPT2LMHeadModel.from_pretrained(save_directory)
loaded_tokenizer = GPT2Tokenizer.from_pretrained(save_directory)
# Test the loaded modelinput_ids = loaded_tokenizer.encode("Hello, how are you?", return_tensors="pt")
outputs = loaded_model.generate(input_ids)
print(loaded_tokenizer.decode(outputs[0], skip_special_tokens=True))
Convert model to gguf
Source: https://www.substratus.ai/blog/converting-hf-model-gguf-model/
Downloading a HuggingFace model. There are various ways to download models, but in my experience the huggingface_hub library has been the most reliable. The git clone method occasionally results in OOM errors for large models.
Install the huggingface_hub library:
pip install huggingface_hub
Create a Python script named download.py with the following content:
from huggingface_hub import snapshot_download
model_id="lmsys/vicuna-13b-v1.5"
snapshot_download(repo_id=model_id, local_dir="vicuna-hf",
local_dir_use_symlinks=False, revision="main")
Run the Python script:
python download.py
You should now have the model downloaded to a directory called vicuna-hf. Verify by running:
ls -lash vicuna-hf
Converting the model: convert the downloaded HuggingFace model to a GGUF model. Llama.cpp comes with a converter script to do this.
Get the script by cloning the llama.cpp repo:
git clone https://github.com/ggerganov/llama.cpp.git
Install the required python libraries:
pip install -r llama.cpp/requirements.txt
Verify the script is there and understand the various options:
python llama.cpp/convert.py -h
Convert the HF model to GGUF model:
python llama.cpp/convert.py vicuna-hf \
--outfile vicuna-13b-v1.5.gguf \
--outtype q8_0
In this case we're also quantizing the model to 8 bit by setting --outtype q8_0. Quantizing helps improve inference speed, but it can negatively impact quality. You can use --outtype f16 (16 bit) or --outtype f32 (32 bit) to preserve original quality.
Verify the GGUF model was created:
ls -lash vicuna-13b-v1.5.gguf
Pushing the GGUF model to HuggingFace. You can optionally push back the GGUF model to HuggingFace.
Create a Python script with the filename upload.py that has the following content:
from huggingface_hub import HfApi
api = HfApi()
model_id = "substratusai/vicuna-13b-v1.5-gguf"
api.create_repo(model_id, exist_ok=True, repo_type="model")
api.upload_file(
path_or_fileobj="vicuna-13b-v1.5.gguf",
path_in_repo="vicuna-13b-v1.5.gguf",
repo_id=model_id,
)
Get a HuggingFace Token that has write permission from here: https://huggingface.co/settings/tokens
Set your HuggingFace token:
export HUGGING_FACE_HUB_TOKEN=<paste-your-own-token>
Run the upload.py script:
python upload.py