从0开始微调DeepSeek-R1:修改模型自我认知实战教程
1. 前言
在大模型应用落地过程中,模型的自我认知(Self-Identity)定制化是一个关键需求。例如,企业希望部署的AI助手能明确回答“我是由XX公司自主研发的AI模型”,而非默认的开源项目描述。这种能力不仅增强品牌识别度,也提升用户信任感。
本文将围绕DeepSeek-R1-Distill-Qwen-1.5B模型,手把手带你完成一次完整的自我认知微调实践。我们将使用 LLaMA-Factory 工具进行高效微调,并通过 Ollama 实现本地化部署与 API 服务封装。整个流程无需深度学习背景,适合初学者快速上手。
本教程涵盖: - 微调前后的效果对比 - 使用 LLaMA-Factory 进行指令微调(SFT) - 模型导出与格式转换(GGUF) - 多种方式在 Ollama 中部署微调后模型 - 性能优化建议与常见问题排查
2. 准备工作
2.1 环境依赖
确保以下工具已安装并配置好:
| 工具 | 版本要求 | 安装方式 |
|---|---|---|
| Python | >=3.10 | 官网下载 |
| Conda/Mamba | 推荐 Mamba | conda install mamba -n base -c conda-forge |
| Git | >=2.30 | apt install git或官网安装 |
| CUDA (GPU可选) | >=11.8 | NVIDIA官网 |
2.2 下载基础模型
前往 ModelScope 下载预训练模型:
modelscope download --model_id deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5b或手动访问:https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5b
保存路径示例:D:\git-project\model\DeepSeek-R1-Distill-Qwen-1.5B
3. 使用LLaMA-Factory进行微调
3.1 安装LLaMA-Factory
LLaMA-Factory 是一个开源的大模型微调框架,支持多种主流架构和低资源微调技术(如 LoRA)。
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory mamba create -n llama_factory python=3.10 conda activate llama_factory pip install -e ".[torch,metrics]"启动 Web UI:
nohup python src/webui.py > train_web.log 2>&1 &访问地址:http://localhost:7860
提示:若远程服务器运行,请使用
--server_name 0.0.0.0 --port 7860启动参数开放端口。
3.2 构建自我认知数据集
我们采用内置的身份微调模板文件data/identity.json,其结构如下:
[ { "instruction": "你是谁?", "input": "", "output": "我是{{name}},由{{author}}开发的人工智能语言模型。" }, { "instruction": "介绍一下你自己", "input": "", "output": "{{name}}是由{{author}}独立研发的语言模型,专注于提供专业、安全、高效的对话服务。" } ]修改变量值:
- 将
{{name}}替换为你的模型名称,如[Talk-Bot] - 将
{{author}}替换为公司名,如zibiao
最终保存为自定义数据集文件,例如:data/custom_identity.json
✅推荐做法:可在原始 identity.json 基础上增加更多问答对,提高泛化能力。
3.3 配置微调参数
进入 Web 界面后,按以下设置填写:
| 参数项 | 推荐值 |
|---|---|
| 模型路径 | D:\git-project\model\DeepSeek-R1-Distill-Qwen-1.5B |
| 数据集 | custom_identity.json(上传或替换原文件) |
| 对话模板 | deepseek3(必须选择,否则推理异常) |
| 微调方法 | LoRA(显存不足时首选) |
| 学习率 | 2e-4 |
| 学习率调度器 | cosine(收敛稳定) |
| 批次大小 | 4(根据显存调整) |
| 梯度累积步数 | 8(CPU训练需降低至2~4) |
| 最大序列长度 | 512 |
| 训练轮数 | 3 |
| 输出目录 | saves/deepseek-lora-train/ |
显存不足应对策略:
| 显存情况 | 建议配置 |
|---|---|
| <8GB GPU | 使用 LoRA + batch_size=1~2 |
| CPU训练 | 关闭 flash_attention,梯度累积≤4 |
| INT8量化 | 开启quantization_bit=8 |
点击【开始】按钮,等待训练完成(进度条达100%)。
4. 验证与导出微调模型
4.1 加载检查点验证效果
训练结束后,在 LLaMA-Factory 的【Inference】页面中:
- 选择模型路径:
saves/deepseek-lora-train/checkpoint-xxx - 输入测试问题:“你是谁?”
- 观察输出是否符合预期
✅ 正常输出应类似:
我是[Talk-Bot],由zibiao开发的人工智能语言模型。
如果未生效,请检查: - 是否选择了正确的deepseek3模板 - 数据集中变量是否正确替换 - LoRA 权重是否成功加载
4.2 导出完整模型
进入【Export】页面,执行以下操作:
- 选择训练好的 LoRA 检查点
- 设置输出路径:
D:\git-project\trained-model\train_DeepSeek-R1-1.5B-Distill - 勾选“合并权重”选项(Merge Adapter),生成完整模型
- 格式选择
Hugging Face
导出完成后,目录结构如下:
train_DeepSeek-R1-1.5B-Distill/ ├── config.json ├── pytorch_model.bin ├── tokenizer_config.json ├── special_tokens_map.json └── ...该模型即可用于后续部署。
5. 使用Ollama部署微调模型
5.1 安装Ollama
Windows 用户可直接下载安装包: 👉 https://ollama.com/download/OllamaSetup.exe
Linux 用户执行:
curl -fsSL https://ollama.com/install.sh | sh验证安装:
ollama --version5.2 方式一:从 Safetensors 权重部署(推荐)
创建 Modelfile 文件
FROM D:\git-project\trained-model\train_DeepSeek-R1-1.5B-Distill PARAMETER temperature 0.6 PARAMETER top_p 0.95 TEMPLATE """ {{- if .System }}{{ .System }}{{ end }} {{- range $i, $_ := .Messages }} {{- $last := eq (len (slice $.Messages $i)) 1}} {{- if eq .Role "user" }}<|User|>{{ .Content }} {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }} {{- end }} {{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }} {{- end }} """🔍说明: -
TEMPLATE必须与 DeepSeek-R1 官方一致,否则输出混乱 - 可通过ollama show --modelfile deepseek-r1:1.5b获取参考模板
构建模型
ollama create my-tuned-deepseek -f Modelfile启动并测试
ollama run my-tuned-deepseek >>> 你是谁? <<< 我是[Talk-Bot],由zibiao开发的人工智能语言模型。5.3 方式二:导入 GGUF 格式模型(跨平台兼容)
适用于无 GPU 设备或边缘部署场景。
转换为 GGUF 格式
先克隆 llama.cpp:
git clone --depth 1 https://github.com/ggerganov/llama.cpp.git cd llama.cpp && pip install -r requirements.txt执行转换脚本:
python convert_hf_to_gguf.py \ D:\git-project\trained-model\train_DeepSeek-R1-1.5B-Distill \ --outfile D:\git-project\trained-model\model.gguf \ --outtype q8_0支持量化类型:
q4_0,q8_0等,数值越高质量越高但体积越大
创建新 Modelfile
FROM D:\git-project\trained-model\model.gguf PARAMETER temperature 0.6 PARAMETER top_p 0.95 TEMPLATE """ {{- if .System }}{{ .System }}{{ end }} {{- range $i, $_ := .Messages }} {{- $last := eq (len (slice $.Messages $i)) 1}} {{- if eq .Role "user" }}<|User|>{{ .Content }} {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }} {{- end }} {{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }} {{- end }} """构建与运行
ollama create my-tuned-gguf -f Modelfile ollama run my-tuned-gguf6. API调用与集成
Ollama 兼容 OpenAI API 协议,便于快速接入现有系统。
发送请求示例(Python)
import requests url = "http://localhost:11434/v1/chat/completions" headers = {"Content-Type": "application/json"} data = { "model": "my-tuned-deepseek", "messages": [{"role": "user", "content": "你是谁?"}], "temperature": 0.6, "top_p": 0.95, "stream": False } response = requests.post(url, json=data, headers=headers) print(response.json()["choices"][0]["message"]["content"])🌐 默认端口:
11434
📚 文档:Ollama API Docs
7. 模型量化与性能优化
7.1 为什么要量化?
- 内存占用减少 40%~75%
- 推理速度提升 20%~50%
- 支持在消费级设备运行(如笔记本、树莓派)
7.2 使用 Ollama 量化模型
ollama create my-quantized -f Modelfile --quantize q4_K_M支持的量化等级:
| 类型 | 位宽 | 适用场景 |
|---|---|---|
| Q4_K_M | 4-bit | 平衡精度与性能,推荐通用场景 |
| Q5_K_S | 5-bit | 高精度任务(如数学推理) |
| Q8_0 | 8-bit | 接近 FP16 表现,适合服务器部署 |
| Q2_K | 2-bit | 极低资源环境,牺牲部分质量 |
⚠️ 注意:仅支持从 FP16/FP32 原始模型进行首次量化,无法二次量化。
8. 总结
本文详细演示了如何从零开始微调DeepSeek-R1-Distill-Qwen-1.5B模型,实现对其自我认知的完全定制化。核心步骤包括:
- 准备环境与模型:下载基础模型并搭建 LLaMA-Factory 微调平台;
- 构建身份数据集:通过修改
identity.json实现角色定义; - 执行 LoRA 微调:低资源条件下高效训练;
- 导出融合模型:生成可用于部署的完整权重;
- 多方式部署:支持原生 HuggingFace 和 GGUF 格式;
- API 集成与量化:满足生产级性能与兼容性需求。
实践建议
- 🎯优先使用 LoRA 微调:节省显存且易于迭代
- 💡避免系统提示注入:遵循官方建议,所有指令放 user prompt
- 🔒保护商业信息:不要在公开模型中暴露敏感公司信息
- 📈持续评估效果:多次测试取平均值判断稳定性
通过本次实践,你已经掌握了轻量级大模型私有化定制的核心技能,可进一步扩展至客服机器人、知识库问答、垂直领域专家系统等应用场景。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。