注:此文章用于记录自己在模型格式转换所遇到的一些问题和过程
1. 下载llama.cpp
这里直接给出git链接,你可以克隆下载,也可以下载zip然后解压。
ggml-org/llama.cpp: LLM inference in C/C++
2. 直接拉取原生huggingface模型进行转换
第一次实验是直接拉取huggingface上的模型然后保存后就进行转换,这里直接贴出最简单的代码
from transformers import AutoTokenizer, AutoModelForCausalLM
model_dir = "./model"
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
save_dir = "./my_models/Qwen2.5-0.5-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir=model_dir, torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.save_pretrained(save_dir)
model.save_pretrained(save_dir)
说明几个AutoModelForCausalLM.from_pretrained的参数:
cache_dir :指定模型保存的路径,避免下到C盘
torch_dtype:自动选择适合自己电脑的张量类型
接下来就是进入llama.cpp文件夹下,运行如下命令
python convert_hf_to_gguf.py 你保存的hf模型路径 --outfile 你要保存的gguf模型路径 --outtype f16
当然你还可以通过llama.cpp进行量化,这里先不做演示,后续有空会更新。
3. lora微调模型转换
总体步骤分为:保存模型——合并模型——转换模型
3.1 保存模型
在TrainingArguments里面定义好output_dir即可,保存后的模型目录应该包含以下文件
3.2 合并模型
这里我直接放上我自己的合并代码,比较简单
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
model_path = './models/models--Qwen--Qwen2.5-1.5B-Instruct/snapshots/989aa7980e4cf806f80c7fef2b1adb7bc71aa306' # 基座模型路径
lora_path = './output/Qwen2.5-1.5b-医疗数据/checkpoint-98' # lora模型路径
save_path = './models/Qwen2.5_1.5B_Instruct_lora_医疗数据' # 保存路径
base_model = AutoModelForCausalLM.from_pretrained(model_path,trust_remote_code=True) # 加载基座模型
tokenizer = AutoTokenizer.from_pretrained(model_path,trust_remote_code=True) # 加载分词器
lora_model = PeftModel.from_pretrained(base_model, lora_path) # 加载lora模型
merged_model = lora_model.merge_and_unload() # 合并模型
print("模型合并完成\n")
# 保存模型
merged_model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
print("模型保存完成")
生成的模型文件如下图
3.3 转换模型
使用的代码与第二节的代码是一样的,模型文件如下图
4. Ollama部署
选择一个文件夹下创建一个 mf 后缀文件,然后在 mf 文件下加入以下内容
FROM ./Qwen3-Embedding-8B-Q4_K_M.gguf
然后在当天文件目录下终端执行
ollama create qwen3-embedding:8b -f ./1.mf
1.mf 就是你刚刚创建的文件,qwen3-embedding:8b就是你给模型起的别名