最近deepseek非常火爆,在学习对deepseek进行微调训练后,尝试把模型部署到本地。以下记录下怎么保存模型以及怎么载入Ollama的过程。
模型保存
我使用的Transformers 的 trainer 进行的训练。
在配置TrainingArguments 的 output_dir 以及save_steps后我以为会自动根据相关参数进行保存,但当我使用相应的checkpoint的时候并未调用成功,具体什么原因还没搞清楚。
所以要trainer.save_model 确保模型保存成功。并且可以把训练的模型状态保存下来,下次调用可以更快。
trainer.train()
#进行模型训练后进行一下保存确保模型保无误
trainer.save_model('result/best')#保存路径
保存后的模型文件夹列表:
#微调的配置文件
adapter_config.json
#微调后的权重文件,我理解为微调后的小模型
adapter_model.safetensors
#模型训练的参数以及配置
training_args.bin
上面我们保存是训练好的LoRA模型,从文件大小上就可以看出来。
我们要转换gguf文件需要保存完整训的模型,可以使用model.save_pretrained 进行保存
#输出目录
model.save_pretrained("./output_model")
如果我们训练完成后关闭了文件。 可以再次调用已经保存的lora模型与基座模型进行融合并保存
from peft import PeftModel
from transformers import LlamaForCausalLM
#载入模型
model = LlamaForCausalLM.from_pretrained('./model', load_in_8bit=False, device_map="auto")
#载入微调后的模型文件
model = PeftModel.from_pretrained(model, './you-lora-model', device_map="auto",trust_remote_code=True)
#合并模型
merged_model = model.merge_and_unload()
#保存模型
merged_model.save_pretrained(save_path)
转换为gguf
首先介绍下什么是gguf文件。我理解它是一种把模型转换(打包)为一个文件的文件格式,便于调用。
我用到的是llama.cpp
直接上github 下载下来。
git clone <https://github.com/ggerganov/llama.cpp.git>
然后cd 到 你的下载目录中进行安装
#如果使用的conda 的时候 cd 后面跟上 /d
#例如: cd /d F:/py/output
pip install -r ./requirements.txt
安装完成后我们就可以直接开始转换了,直接调用目录下的convert_hf_to_gguf.py 文件。输入你训练好的模型地址,以及要保存的地址以及保存的文件名。
python ./convert_hf_to_gguf.py ./qwen2_0.5b_instruct --outfile ./qwen2_0.5b_instruct_my.gguf
运行完成后,我们就可以在目录下面看见xx.gguf文件了
载入 Ollama
要载入ollama 其实非常简单,在你的gguf 文件夹内新建一个文件名为 Modelfile 无后缀名。用记事本打开,写入 ./you-mode.guuf 你要载入的gguf模型文件。具体每个模型参数不同可查看该模型文档。
然后用 ollama create 命令
ollama create you_model-name -f Modelfile
载入完成后 用 ollama list 就可以查看到你的模型,之后就可以愉快的玩耍了。