LlamaFactory可视化模型微调-Deepseek模型微调+CUDA Toolkit+cuDNN安装
LlamaFactory
https://llamafactory.readthedocs.io/zh-cn/latest/
安装
必须保证版本匹配,否则到训练时,找不到gpu cuda。
否则需要重装。下面图片仅供参考。因为cuda12.8装了没法用,重新搞12.6
cuda | cudnn | pytorch |
---|---|---|
12.6 | 9.6 | 12.6 |
最新:12.8 | 9.7.1 | 无 |
Windows
CUDA 安装
打开
设置
,在关于
中找到Windows
规格 保证系统版本在以下列表中:
windows11 如下
支持版本号
Microsoft Windows 11 21H2
Microsoft Windows 11 22H2-SV2
Microsoft Windows 11 23H2
Microsoft Windows 10 21H2
Microsoft Windows 10 22H2
Microsoft Windows Server 2022
安装之前确认版本
在命令提示符也就是cmd中输入nvidia-smi.exe
,查看你电脑支持的cuda最高版本。(第一行最后)
这个的话必须要有显卡!
选择对应的版本下载并根据提示安装。
如果自己使用不了最新版本,根据自己配置,下载对应的版本,如下图:
安装CUDA完成
打开 cmd
输入 nvcc -V
,若出现类似内容则安装成功。
否则,检查系统环境变量,保证 CUDA 被正确导入。
cuDNN安装
cuDNN
(CUDA Deep Neural Network library)是一个由NVIDIA开发的深度学习GPU加速库,旨在为深度学习任务提供高效、标准化的原语(基本操作)来加速深度学习框架在NVIDIA GPU上的运算。
选择对应版本进行下载。如果当前界面没有你需要的版本,可访问如下历史版本页面进行下载:
https://developer.nvidia.com/rdp/cudnn-archive
解压后,目录结构如图:
将目录bin、lib、include复制到CUDA的安装目录下(LICENSE除外),可以先对CUDA安装目录下的这三个目录做备份,以免出现覆盖无法恢复。如图:
默认安装:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8
最后将如下path添加到环境变量Path中:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\libnvvp
验证
配置完成后,我们可以验证是否配置成功,主要使用CUDA内置的deviceQuery.exe 和 bandwithTest.exe:
首先win+R
启动cmd
,cd到CUDA安装目录下的…\extras\demo_suite
,然后分别执行bandwidthTest.exe
和deviceQuery.exe
,应该得到下图:
执行测试CUDA是否可用GPU
LLaMA-Factory 安装
在安装 LLaMA-Factory 之前,请确保您安装了下列依赖:
运行以下指令以安装 LLaMA-Factory 及其依赖:
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
如果出现环境冲突,请尝试使用 pip install --no-deps -e . 解决
LLaMA-Factory 校验
完成安装后,可以通过使用 llamafactory-cli version
来快速校验安装是否成功
如果您能成功看到类似下面的界面,就说明安装成功了。
Windows
QLoRA
如果您想在 Windows 上启用量化 LoRA(QLoRA
),请根据您的 CUDA 版本选择适当的 bitsandbytes 发行版本。
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl
FlashAttention-2
如果您要在 Windows 平台上启用 FlashAttention-2,请根据您的 CUDA 版本选择适当的 flash-attention 发行版本。
其他依赖
数据处理
https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.html
目前我们支持 Alpaca 格式和 ShareGPT 格式的数据集。
Alpaca
-
指令监督微调数据集
指令监督微调(Instruct Tuning)通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现。
instruction 列对应的内容为人类指令, input 列对应的内容为人类输入, output 列对应的内容为模型回答。下面是一个例子
"alpaca_zh_demo.json" { "instruction": "计算这些物品的总费用。 ", "input": "输入:汽车 - $3000,衣服 - $100,书 - $20。", "output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。" },
进行指令监督微调时, instruction 列对应的内容会与 input 列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput。而 output 列对应的内容为模型回答。 在上面的例子中,人类的最终输入是:
计算这些物品的总费用。 输入:汽车 - $3000,衣服 - $100,书 - $20。
模型的回答是:
汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。
如果指定,
system
列对应的内容将被作为系统提示词。history
列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习。[ { "instruction": "人类指令(必填)", "input": "人类输入(选填)", "output": "模型回答(必填)", "system": "系统提示词(选填)", "history": [ ["第一轮指令(选填)", "第一轮回答(选填)"], ["第二轮指令(选填)", "第二轮回答(选填)"] ] } ]
下面提供一个 alpaca 格式 多轮 对话的例子,对于单轮对话只需省略 history 列即可。
[ { "instruction": "今天的天气怎么样?", "input": "", "output": "今天的天气不错,是晴天。", "history": [ [ "今天会下雨吗?", "今天不会下雨,是个好天气。" ], [ "今天适合出去玩吗?", "非常适合,空气质量很好。" ] ] } ]
对于上述格式的数据, dataset_info.json 中的 数据集描述 应为:
```"数据集名称": { "file_name": "data.json", "columns": { "prompt": "instruction", "query": "input", "response": "output", "system": "system", "history": "history" } }
-
预训练数据集
-
偏好数据集
-
KTO 数据集
-
多模态数据集
ShareGPT
- 指令监督微调数据集
- 偏好数据集
- OpenAI格式
WebUI
LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 在完成 安装 后,您可以通过以下指令进入 WebUI:
llamafactory-cli webui
http://localhost:7860/
WebUI 主要分为四个界面:训练、评估与预测、对话、导出。
训练模型
在开始训练模型之前,您需要指定的参数有:
- 模型名称及路径
- 训练阶段
- 微调方法
- 训练数据集
- 学习率、训练轮数等训练参数
- 微调参数等其他参数
- 输出目录及配置路径
随后,您可以点击 开始 按钮开始训练模型。
关于
断点重连
:适配器断点保存于output_dir
目录下,请指定 适配器路径 以加载断点继续训练。如果您需要使用自定义数据集,请在
data/data_info.json
中添加自定义数据集描述并确保 数据集格式 正确,否则可能会导致训练失败。
示例
在example目录中有大量的示例可供参考。
参照配置
NOTE: 学习率 5e-5 = 0.0005 太小了,梯度下降慢。这里调整到0.001.下图是0.001 的loss函数下降的图。
- 梯度下降就是对损失函数求最小值的过程。
LLaMA-Factory\examples\README_zh.md
记录各种微调配置和执行脚本
数据集例子
这里直接使用原有的identity文件微调
替换原LLaMA-Factory\data\identity.json
文件中:{{name}} 为 小羽,{{author}} 为 嘉羽很烦
预览片段:
[
{
"instruction": "hi",
"input": "",
"output": "Hello! I am 小羽, an AI assistant developed by 嘉羽很烦. How can I assist you today?"
},
{
"instruction": "hello",
"input": "",
"output": "Hello! I am 小羽, an AI assistant developed by 嘉羽很烦. How can I assist you today?"
},...
对话模板选择deepseek3,官方有说明
这里注意一下
- 需要LlamaFactory在那个目录启动,这里test-dataset就放在那个目录
- 目录下需要包含dataset_info.json. 这是数据集描述文件。参考:安装目录下
data/dataset_info.json
{ "identity": { "file_name": "identity.json" } }
预览一下数据集,是否争取正确 修改输出目录
修改配置后,点击开始按钮,等待进度条训练完毕即可。CPU也能训练,但是时间太慢,有条件的最好用GPU,速度快
评估预测与对话
评估预测选项卡:
模型训练完毕后,您可以通过在评估与预测界面通过指定 模型 及 适配器 的路径在指定数据集上进行评估。
您也可以通过在对话界面指定 模型、 适配器 及 推理引擎 后输入对话内容与模型进行对话观察效果。
【windows 报错】,不影响之下 chat步骤可以回答出期望的结果即可
chat选项卡:
到这一步,已经加载 训练后模型了。进行问题测试。
可以看到,我们的 身份识别 训练微调数据已经整合进 模型中了。
导出
如果您对模型效果满意并需要导出模型,您可以在导出界面通过指定 模型、 适配器、 分块大小、 导出量化等级及校准数据集、 导出设备、 导出目录 等参数后点击 导出 按钮导出模型。
到处文件目录
Ollama安装教程
Ollama教程
Ollama部署微调模型步骤
1. 模型构建
- 使用
ModelFile
文件定义模型参数和上下文。 - 通过
ollama create
命令将模型导入到 Ollama 中。
将生成的ModelFile文件放到外部:
如果没有新建:
内容进入到ollama 模型页 https://ollama.com/library/deepseek-r1:1.5b/blobs/369ca498f347
copy template内容
下面内容导出时,llamafactory自动生成的。因为本地装了ollama。
需要修改From ,默认是 . 【自测不行】,可能需要修改成绝对路径【可行】
temperature参数DeepSeek-R1官方建议给0.6
# ollama modelfile auto-generated by llamafactory
# 必须是model.safetersors文件的目录。即我们导出的目录
FROM D:\model\fine-tune\DeepSeek-R1-1.5B-Distill-kong-idendity
TEMPLATE """<|begin▁of▁sentence|>{{ if .System }}{{ .System }}{{ end }}{{ range .Messages }}{{ if eq .Role "user" }}<|User|>{{ .Content }}<|Assistant|>{{ else if eq .Role "assistant" }}{{ .Content }}<|end▁of▁sentence|>{{ end }}{{ end }}"""
PARAMETER stop "<|end▁of▁sentence|>"
PARAMETER num_ctx 4096
进入cmd中执行命令
```shell
ollama create DeepSeek-R1-1.5B-Distill-kong-idendity -f ModelFile
```
可以看到,模型已经导入到ollama中。我们就可以ollama启动运行我们微调的大模型,提供open ai 接口调用了
3. 模型启动
- 使用
ollama run
命令启动微调后的模型DeepSeek-R1-1.5B-Distill-kong-idendity:latest
。
执行启动命令:
ollama run DeepSeek-R1-1.5B-Distill-kong-idendity:latest
4. API调用Ollama
调用地址:POST localhost:11434/api/chat
body: 修改自己的微调模型测试
{
"model":"DeepSeek-R1-1.5B-Distill-kong-idendity", // 模型名称,ollama上显示的名字
"stream": true, // 是否流式,true流式返回
"temperature": 0.6, // 思维发散程度
"top_p":0.95, // 一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果
"messages":[ // 上下文
{
"role":"user",
"content":"你是谁?"
}
]
}
通过以上步骤,我们成功地将微调后的模型部署到 Ollama 中,并通过 API 接口进行调用和测试。
下一站
完成了LlamaFactory webui 可视化模型微调的所有步骤