
deepseek部署微调本文参考了b站 一个up主并做了一些补充
上述两种方法选一种即可,最后即可完成,直接在聊天窗口进行与模型对话。
·
deepseek本地部署,RAG本地知识库构建,模型微调
Windows本地部署
- 通过hugging face拉取模型 (ps:这里拉取的模型尽量是gguf格式如果不是可以去网上找下转换的脚本,如果这个网站下载速度慢或者卡顿选择镜像即可镜像地址)
- 选择模型
- 加载模型
- 在LM studio中下载
- 下载模型
- 更换代理
上述两种方法选一种即可,最后即可完成,直接在聊天窗口进行与模型对话
Linux本地部署
linux下我们采用ollama进行部署
- 下载ollama
打开终端 输入命令
curl -fsSL https://ollama.com/install.sh | sh
- 启动ollama
下载完毕后在终端输入命令
ollama serve
启动ollama
- 拉取AI模型
重新打开一个终端,确保ollama的服务已经开启终端输入
ollama pull deepseek-r1:1.5b
等待模型拉取完毕即可
- 与模型对话
终端输入
ollama run deepseek-r1:1.5b
即可与模型对话
RAG构建本地知识库
通过Anything LLM 构建本地知识库
- 下载软件,地址,
- 选择模型,这里我使用了远程连接的方式,将模型部署到服务器上,本地下载Anything llm 去载入服务器端的模型,
- 内网穿透
如果采用这种方式需要在服务器上下载coplar
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
验证是否安装成功
cpolar version
正常显示版本号即是成功
token认证,这个需要自己去注册一个账号申请cpolar authtoken xxxxxxx
ollama 启动服务OLLAMA_HOST=0.0.0.0:11434 ollama serve
cpolar开启服务cpolar http 11434
- ssh隧道
在本地电脑的终端(cmd / powershell / terminal等)中执行代理命令,其中root@123.125.240.150
和42151
分别是实例中SSH指令的访问地址与端口,请找到自己实例的ssh指令做相应替换。7860:127.0.0.1:7860
是指代理实例内7860
端口到本地的7860
端口
ssh -CNg -L 7860:127.0.0.1:7860 root@123.125.240.150 -p 42151
远程访问
通过Anything llm远程访问
上面如果使用ssh方法,代理到本地之后,直接输入本地代理的地址即可,
最后创建工作空间自己选择本地的文章论文即可
模型微调
1. 准备硬件资源、搭建环境
- 在云平台上租用一个实例(如 蓝耘,官网:地址
- 云平台一般会配置好常用的深度学习环境,如 anaconda, cuda等等
2. 本机通过 SSH 连接到远程服务器
- 使用 Visual Studio Remote 插件 SSH 连接到你租用的服务器,参考文档: # 使用VSCode插件Remote-SSH连接服务器
- 连接后打开个人数据盘文件夹 /root/lanyun-tmp
3. LLaMA-Factory 安装部署
LLaMA-Factory 的 Github地址:https://github.com/hiyouga/LLaMA-Factory
- 克隆仓库
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
- 切换到项目目录
cd LLaMA-Factory
创建 conda 虚拟环境(一定要 3.10 的 python 版本,不然和 LLaMA-Factory 不兼容,
如果当时在创建实例的时候选择了对应的版本,也可以不创建虚拟环境直接
在base环境里安装相关依赖)
conda create -n llama-factory python=3.10
- 激活虚拟环境
conda activate llama-factory
- 在虚拟环境中安装 LLaMA Factory 相关依赖(PS:如果不创建虚拟环境
直接在base环境内执行这一步即可)
pip install -e ".[torch,metrics]"
注意:如报错 bash: pip: command not found ,先执行 conda install pip 即可
- 检验是否安装成功
llamafactory-cli version
4. 启动 LLama-Factory 的可视化微调界面 (由 Gradio 驱动)
llamafactory-cli webui
5. 配置端口转发
- 参照上面的步骤SSH隧道配置即可
6. 从 HuggingFace 上下载基座模型(这个是下载一般大模型的标准流程)
HuggingFace 是一个集中管理和共享预训练模型的平台 https://huggingface.co;
从 HuggingFace 上下载模型有多种不同的方式,可以参考:如何快速下载huggingface模型——全方法总结
- 创建文件夹统一存放所有基座模型
mkdir Hugging-Face
- 修改 HuggingFace 的镜像源
export HF_ENDPOINT=https://hf-mirror.com
- 修改模型下载的默认位置
export HF_HOME=/root/lanyun-tmp/Hugging-Face
- 注意:这种配置方式只在当前 shell 会话中有效,如果你希望这个环境变量在每次启动终端时都生效,可以将其添加到你的用户配置文件中(修改
~/.bashrc
或~/.zshrc
) - 检查环境变量是否生效
echo $HF_ENDPOINT
echo $HF_HOME
- 安装 HuggingFace 官方下载工具
pip install -U huggingface_hub
- 执行下载命令
huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
- 如果直接本机下载了模型压缩包,如何放到你的服务器上?——在 蓝耘 上打开 JupyterLab 直接上传,或者下载软件通过 SFTP 协议传送
7. 可视化页面上加载模型测试,检验是否加载成功
- 注意:这里的路径是模型文件夹内部的模型特定快照的唯一哈希值,而不是整个模型文件夹
/root/lanyun-tmp/Hugging-Face/hub/models--deepseek-ai--DeepSeek-R1-Distill-Qwen-1.5B/snapshots/530ca3e1ad39d440e182c2e4317aa40f012512fa
8. 准备用于训练的数据集,添加到指定位置
- 数据集配置描述中详细介绍了如何配置和描述你的自定义数据集
- 按照格式准备用于微调的数据集 example.json,数据示例:
{
"instruction": "计算这些物品的总费用。 ",
"input": "输入:汽车 - $3000,衣服 - $100,书 - $20。",
"output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"
},
- 修改 dataset_info.json 文件,添加如下配置:
"数据集名称": {
"file_name": "example.json"
},
- 将数据集 example.json 放到 LLama-Factory 的 data 目录 下
9. 在页面上进行微调的相关设置,开始微调
- 选择微调算法 Lora
- 添加数据集 example
- 修改其他训练相关参数,如学习率、训练轮数、截断长度、验证集比例等
- 学习率(Learning Rate):决定了模型每次更新时权重改变的幅度。过大可能会错过最优解;过小会学得很慢或陷入局部最优解
- 训练轮数(Epochs):太少模型会欠拟合(没学好),太大会过拟合(学过头了)
- 最大梯度范数(Max Gradient Norm):当梯度的值超过这个范围时会被截断,防止梯度爆炸现象
- 最大样本数(Max Samples):每轮训练中最多使用的样本数
- 计算类型(Computation Type):在训练时使用的数据类型,常见的有 float32 和 float16。在性能和精度之间找平衡
- 截断长度(Truncation Length):处理长文本时如果太长超过这个阈值的部分会被截断掉,避免内存溢出
- 批处理大小(Batch Size):由于内存限制,每轮训练我们要将训练集数据分批次送进去,这个批次大小就是 Batch Size
- 梯度累积(Gradient Accumulation):默认情况下模型会在每个 batch 处理完后进行一次更新一个参数,但你可以通过设置这个梯度累计,让他直到处理完多个小批次的数据后才进行一次更新
- 验证集比例(Validation Set Proportion):数据集分为训练集和验证集两个部分,训练集用来学习训练,验证集用来验证学习效果如何
- 学习率调节器(Learning Rate Scheduler):在训练的过程中帮你自动调整优化学习率
- 页面上点击启动训练,或复制命令到终端启动训练
- 实践中推荐用
nohup
命令将训练任务放到后台执行,这样即使关闭终端任务也会继续运行。同时将日志重定向到文件中保存下来
- 实践中推荐用
- 在训练过程中注意观察损失曲线,尽可能将损失降到最低
- 如损失降低太慢,尝试增大学习率
- 如训练结束损失还呈下降趋势,增大训练轮数确保拟合
10. 微调结束,评估微调效果
- 观察损失曲线的变化;观察最终损失
- 在交互页面上通过预测/对话等方式测试微调好的效果
- 检查点:保存的是模型在训练过程中的一个中间状态,包含了模型权重、训练过程中使用的配置(如学习率、批次大小)等信息,对LoRA来说,检查点包含了训练得到的 B 和 A 这两个低秩矩阵的权重
- 若微调效果不理想,你可以:
- 使用更强的预训练模型
- 增加数据量
- 优化数据质量(数据清洗、数据增强等,可学习相关论文如何实现)
- 调整训练参数,如学习率、训练轮数、优化器、批次大小等等
11. 导出合并后的模型
- 为什么要合并:因为 LoRA 只是通过低秩矩阵调整原始模型的部分权重,而不直接修改原模型的权重。合并步骤将 LoRA 权重与原始模型权重融合生成一个完整的模型
- 先创建目录,用于存放导出后的模型
mkdir -p Models/deepseek-r1-1.5b-merged
- 在页面上配置导出路径,导出即可
更多推荐
所有评论(0)