一、准备训练数据
1. 收集数据
- 把公司资料整理成 txt/docx/pdf 文件,例如:
/mydata/ ├─ 产品手册.pdf ├─ 客服对话记录.xlsx └─ 技术文档.docx
2. 转换数据格式
- 新建
data.jsonl
文件,每条数据格式如下(用记事本就能编辑):
???? 说明:保持这种格式,一行一个问答对{"instruction": "公司的主打产品是什么?", "output": "我们主要生产智能家居设备..."} {"instruction": "如何申请售后服务?", "output": "1. 登录官网→2. 提交工单..."}
3. 数据清洗
- 下载自动清洗工具:BleachClean(解压即用)
- 运行命令:
./bleachclean --input /mydata --output cleaned_data.jsonl
二、安装训练环境
1. 安装Python
- 访问 python.org 下载3.10版本
- 安装时务必勾选 Add Python to PATH
2. 安装依赖库
打开命令行(Windows按Win+R输入cmd),逐行执行:
pip install torch==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install datasets peft accelerate transformers
三、开始训练
1. 下载训练脚本
- 创建文件夹:
mkdir deepseek_train
- 下载官方示例脚本:
wget https://example.com/train_deepseek.py wget https://example.com/lora_config.json
2. 启动训练
在命令行执行(根据显存调整参数):
accelerate launch train_deepseek.py \
--model_name "deepseek-ai/deepseek-llm-7b" \
--data_path "cleaned_data.jsonl" \
--output_dir "./output" \
--num_train_epochs 3 \
--per_device_train_batch_size 2
???? 注意:训练开始时会出现进度条,看到loss值逐渐下降就说明正常
四、监控训练状态
1. 查看显存占用
- 新开命令行窗口执行:
watch -n 5 nvidia-smi # 每5秒刷新GPU状态
- 正常情况显存应保持在80%以下
2. 查看训练日志
训练文件夹会生成 training_logs.txt
,重点关注:
Epoch 1/3 | Loss: 2.34 → 1.78
Epoch 2/3 | Loss: 1.78 → 1.23
五、部署训练好的模型
1. 转换模型格式
执行转换命令(自动生成GGUF文件):
python -m transformers.utils.convert_gguf \
--input ./output \
--output ./ollama_model/deepseek-custom.gguf \
--quantize q4_0 # 4位量化节省空间
2. 放入Ollama模型目录
- 找到Ollama安装位置(默认路径):
# Windows C:\Users\你的用户名\.ollama\models # Linux/Mac ~/.ollama/models
- 将
deepseek-custom.gguf
复制到该目录
3. 重启Open WebUI
- 在浏览器打开
http://localhost:3000
- 选择模型处输入
deepseek-custom
六、测试模型效果
1. 基础测试
在WebUI输入:
请介绍公司的主打产品
检查输出是否符合产品手册内容
2. 性能优化
如果响应慢,修改Ollama启动参数:
ollama serve --num-gpu-layers 40 # GPU加速层数
常见问题处理
问题现象 | 解决方案 |
---|---|
训练时显存不足 | ① 减少batch_size ② 添加 --gradient_checkpointing 参数 |
输出乱码 | 检查数据文件是否保存为UTF-8编码 |
模型不加载 | 确认.gguf文件是否放在正确的models目录 |
按照这个流程操作,即使没有AI基础也能完成本地训练。建议首次训练先用100条数据测试流程,成功后再扩大数据量。
训练方案属于在原有DeepSeek-R1基础上的微调(Fine-tuning),而不是从头创建新模型。用最简单的比喻来说:这就像给一个已经大学毕业的DeepSeek-R1模型进行"职业培训",而不是重新培养一个婴儿。以下是关键区别说明:
补充信息
一、技术原理对比
类型 | 所需数据量 | 硬件要求 | 训练时间 | 效果表现 |
---|---|---|---|---|
全量训练(创建新模型) | 需要TB级数据 | 至少64张A100 GPU | 数月 | 从零学习基础能力 |
微调(当前方案) | 仅需MB~GB级数据 | 单张消费级显卡(如RTX3090) | 数小时~数天 | 在已有能力上强化专项技能 |
二、你的方案具体实现方式
1. 底层基础
- 始终基于DeepSeek-R1:就像Photoshop修改图片时保留原图图层
- 修改部分参数:通过LoRA技术仅调整 <span style="color:red;font-weight:bold;">0.1%-3%</span> 的原始参数
2. 文件结构示意
~/.ollama/models/
├── deepseek-r1.gguf # 原始模型(未修改)
└── deepseek-custom.gguf # 你的微调版本(新增文件)
3. 实际效果
测试项 | 原始模型 | 微调后模型 |
---|---|---|
通用知识问答 | ✅ 优秀 | ✅ 保持85%+能力 |
公司产品咨询 | ❌ 无法回答 | ✅ 准确回答 |
行业术语理解 | ❓ 部分正确 | ✅ 专业解析 |
三、新手操作指南
1. 验证模型基础
在Open WebUI输入:
/show /model info
如果看到 base_model: deepseek-r1
说明确实是基于原模型
2. 安全回滚方案
如果训练效果不好,只需:
rm ~/.ollama/models/deepseek-custom.gguf # 删除微调模型
ollama run deepseek-r1 # 立即恢复原始版本
四、商业合规提醒
- 模型版权:微调后的模型仍需遵守DeepSeek的使用协议
- 数据安全:建议训练数据去除敏感信息,可通过命令检查:
grep -r "身份证号|手机号" ./cleaned_data.jsonl
这种方案既能保留原模型95%以上的通用能力,又能低成本获得领域适配性。就像给智能手机安装专业APP,既不需要重新发明手机,又能获得定制功能。