上期我们已经成功的训练了模型,让llama3中文聊天版知道了自己的名字
这次我们从合并模型开始,然后使用llama.cpp量化成gguf格式,并且调用api
(1) 前期准备
上期链接: 基于LLaMA-Factory微调llama3成为一个角色扮演大模型,保姆级教学零基础,导出GGUF格式前篇-CSDN博客
首先根据上期内容将llama3成功微调后
(2) 合并模型
首先我们先准备个配置文件
在 " /root/autodl-tmp/LLaMA-Factory/cust/ " 目录下创建merge_llama3_lora_sft.yaml
在文件中输入:
### Note: DO NOT use quantized model or quantization_bit when merging lora adapters
### model
model_name_or_path: /root/autodl-tmp/models/Llama3-8B-Chinese-Chat/
adapter_name_or_path: /root/autodl-tmp/LLaMA-Factory/saves/LLaMA3-8B-Chinese-Chat/lora/train_2024-08-05-11-44-21
template: llama3
finetuning_type: lora
### export
export_dir: /root/autodl-tmp/models/LLaMA3-8B-Chinese-Chat-merged
export_size: 4
export_device: cuda
export_legacy_format:
其中:
model_name_or_path是你本来的模型地址,就是你在huggingface上面下载的那个
adapter_name_or_path是你微调后生成的模型地址
export_dir是你导出的地址,建议新建一个文件夹叫LLaMA3-8B-Chinese-Chat-merged来保存
准备好后在终端输入
llamafactory-cli export cust/merge_llama3_lora_sft.yaml
请确认在 “ /autodl-tmp/LLaMA-Factory ”的目录下运行
合并后可以在/root/autodl-tmp/models/LLaMA3-8B-Chinese-Chat-merged中查看模型
(3) 下载llama.cpp
首先终端执行命令移动到autodl-tmp/目录下
cd /root/autodl-tmp/
然后执行命令,下载llama.cpp
git clone https://github.com/ggerganov/llama.cpp
进入文件
cd /root/autodl-tmp/llama.cpp
(4) 量化
在autodl-tmp/models/下新建一个文件夹,命名为:
Llama3-8B-Chinese-Chat-GGUF
将 safetensors 格式转成 gguf
python convert_hf_to_gguf.py /root/autodl-tmp/models/Llama3-8B-Chinese-Chat-merged --outfile /root/autodl-tmp/models/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q8_0-v1.gguf --outtype q8_0
可修改的:
1.第一个地址就是你放合并后模型的地址
2.第二个地址--outfile后的就是导出的地址精确到文件名
查看文件:
可以在导出的地址中找到量化好的文件,比如我的地址就是:
/root/autodl-tmp/models/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q8_0-v1.gguf
(这一步请跳过,非必须) 将 gguf 格式进行(再)量化
cd ~/code/llama.cpp/build_cuda/bin
./quantize --allow-requantize /root/autodl-tmp/models/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q8_0-v2_1.gguf /root/autodl-tmp/models/Llama3-8B-Chinese-Chat-GGUF/Llama3-8B-Chinese-Chat-q4_1-v1.gguf Q4_1
(5) 下载模型
在导出地址中找到文件后,右键,点击下载就自动在浏览器下载了
如果没反应换成Chrome浏览器
(6) 使用ollama生成模型API
6.1 ollama下载及其环境配置
环境配置及其下载请看我前几期博客:Llama 3增强中文理解能力,并生成内网穿透API后Spring Boot请求-CSDN博客
6.2新建模型
将下载好gguf文件的放到ollama的模型位置
然后右键新建一个txt文档
改名为Modelfile并且把后面的".txt"给删掉,变成我这样
用记事本打开它,输入
FROM [你自己的模型地址]
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
SYSTEM """You are a helpful assistant. 你是一个乐于助人的助手。"""
PARAMETER temperature 0.2
PARAMETER num_keep 24
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>
然后在你的文件位置的地址栏中输入cmd
创建一个模型(名字自定义)
ollama create llama3-zh-inst -f Modelfile
然后执行命令
ollama serve
如果出现这个错误,说明开机自动启动了
任务管理器关闭下就行
然后打开你的postman,输入我的这些测试下
http://localhost:11434/api/generate
{
"model": "llama3-zh-inst",
"prompt": "你叫什么名字?",
"stream": false
}
如果出现我的这个就说明成功了
附赠:
查看ollama已创模型:
ollama list
删除模型:
ollama rm 模型名字
免责声名:一切均严格参照ollama开源策略,没有任何侵权意图,本文章全由自己编写,如出现任何问题请联系我,我将删除。
总结
### 文章总结:将微调后的LLaMA 3模型合并、量化并部署为API服务在此文章中,作者详细描述了如何将训练好的LLaMA 3中文聊天模型进一步处理,最终通过API提供服务的过程。以下是主要步骤的概述:
#### 前期准备
参考文献:基于LLaMA-Factory的前一篇文章,用于微调LLaMA 3模型并完成基本设置。
#### 步骤一:合并模型
1. **创建配置文件**:在指定目录下创建`merge_llama3_lora_sft.yaml`文件,配置源模型地址 (`model_name_or_path`)、微调后的模型地址(`adapter_name_or_path`)、导出地址(`export_dir`)等参数。
2. **执行合并命令**:使用`llamafactory-cli`工具,根据配置文件执行模型合并操作。
#### 步骤二:下载llama.cpp
1. **移动工作目录**:进入`autodl-tmp/`目录。
2. **克隆llama.cpp仓库**:通过Git命令下载llama.cpp项目,用于后续的模型转换与量化。
#### 步骤三:量化模型
1. **新建文件夹**:在`autodl-tmp/models/`路径下创建用于保存gguf格式模型的文件夹。
2. **执行量化脚本**:使用`convert_hf_to_gguf.py`脚本将合并后的模型(safetensors格式)转换为gguf格式,并可选择性地进行进一步量化优化。
#### 步骤四:下载模型
在模型导出位置找到量化后的gguf文件,并通过浏览器下载。
#### 步骤五:使用ollama生成API
1. **下载并配置ollama**:参照作者之前的博客,完成ollama环境的搭建。
2. **新建模型配置文件**:在ollama的模型目录下,创建并编辑`Modelfile`,配置模型地址、模板、系统指令模板、参数等。
3. **创建并服务模型**:通过`ollama create`命令创建模型实例,并使用`ollama serve`命令启动模型服务。使用Postman或类似工具测试API功能。
#### 附加信息
- 提供了查看和删除已部署模型的命令。
- 声明文章遵循ollama开源策略,无侵权意图,并预留了联系方式以供咨询与反馈。
这篇文章展示了从模型训练、合并、量化到部署为API服务的全流程,对于希望将大模型整合到实际应用中的开发者具有较高的参考价值。