【无标题】

微调DeepSeek等AI大模型并部署在ollama上

对于很多算力有限(比如只有CPU、没有高端GPU)的小伙伴来说,想拥有一个专属的AI大模型,既不用承担高额的算力成本,又能贴合自己的需求(比如本文的法律小助手),其实并不难。本文就以DeepSeek轻量化模型为例,手把手教大家用llama-factory框架+LoRA算法完成模型微调,最后部署到Ollama上,实现本地对话自由,全程实操无门槛,CPU也能轻松驾驭~

一、前期准备:明确核心工具与选型逻辑

在开始实操前,先和大家说清楚为什么选这些工具,避免盲目跟风,也能帮大家理解每一步的意义。

1. 模型选型:DeepSeek轻量化模型(CPU友好)

核心选型逻辑:轻量化、低资源、CPU可直接运行

既然是CPU部署,核心就是"轻量化"------我最终选用了 DeepSeek-R1-1.5B 模型,这是DeepSeek家族中参数量最小(仅15亿参数量)、资源需求最低的版本,通过蒸馏技术保留了核心能力,同时适配低资源环境,无需GPU,仅靠CPU就能完成微调与推理,完美解决"电脑带不动"的痛点。

如果你的CPU性能稍好,也可以选择DeepSeek-7B的量化版本(推荐Q6或Q8版本),体积更小、运行更快,同样无需GPU支持。

HuggingFace 是一个集中管理和共享预训练模型的平台 https://huggingface.co;

从 HuggingFace 上下载模型有多种不同的方式,可以参考:如何快速下载huggingface模型------全方法总结

bash 复制代码
 	1. 首先创建文件夹统一存放所有基座模型
mkdir Hugging-Face
 	2.修改 HuggingFace 的镜像源
export HF_ENDPOINT=https://hf-mirror.com
	3.修改模型下载的默认位置
export HF_HOME=这里放置你的Hugging-Face文件夹所在的绝对路径
#注意:这种配置方式只在当前 shell 会话中有效,如果你希望这个环境变量在每次启动终端时都生效,可以#将其添加到你的用户配置文件中(修改 ~/.bashrc 或 ~/.zshrc)
#检查环境变量是否生效
echo $HF_ENDPOINT
echo $HF_HOME
	4.安装 HuggingFace 官方下载工具
pip install -U huggingface_hub
	5.执行下载命令
hf download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B

2. 微调框架:llama-factory(新手友好+高效便捷)

框架核心优势:零代码、可视化WebUI、支持多模型/多算法、新手无门槛,环境变量名统一为 llama-factory

微调框架我选用了 llama-factory(由清华大学相关团队开发,开源社区广泛认可),它是一款一站式大模型微调框架,口号是"让大模型微调像呼吸一样简单",核心优势就是新手友好、支持多种模型和微调算法,而且无需复杂代码编写,甚至提供可视化WebUI,哪怕是零基础也能快速上手。

官方GitHub地址:https://github.com/hiyouga/LLaMA-Factory.git

3. 微调算法:LoRA(低资源+高质量)

算法核心优势:参数量减少90%+、不改动原始模型参数、CPU可快速完成、避免灾难性遗忘

考虑到CPU算力有限,微调算法必须兼顾"高效"和"高质量",LoRA(Low-Rank Adaptation) 算法就是最佳选择。

LoRA的核心原理很简单:不改动原始模型的任何参数(相当于"冻结"基座模型的核心骨架),只在模型层间插入一个轻量级适配器,将微调所需的参数矩阵分解为两个低秩矩阵(B矩阵和A矩阵)的乘积,这样能将微调的参数量减少90%以上,既降低了存储复杂度,让CPU也能快速完成微调,又能最大程度保留原始模型的能力,避免出现"灾难性遗忘",兼顾速度与质量。

二、克隆项目并配置环境(CPU可直接运行)

关键提醒:全程使用统一环境变量名 llama-factory,避免环境冲突,所有命令直接复制粘贴即可运行

这一步的核心是"隔离环境+安装依赖",避免和其他项目的环境冲突,同时确保llama-factory能正常运行,全程用命令行操作,复制粘贴即可。

1. 克隆llama-factory项目

打开终端,输入以下命令,这里本身配备GPU的同学可以直接克隆到本地,没有GPU的同学建议将项目克隆到远程云服务器上:

bash 复制代码
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
### 2. 查看项目README,明确核心逻辑

克隆完成后,建议先打开项目根目录下的 `README.md` 文件(用记事本、VS Code均可打开),快速浏览核心内容:llama-factory的微调逻辑很简单------通过 `data` 文件夹中的JSON数据集进行训练,数据集格式需和文件夹内的示例文件(如 `alpaca.json`)保持一致,后续我们的法律小助手数据集也会遵循这个逻辑配置。

### 3. 创建并配置conda环境(关键:避免环境冲突)

为了防止项目环境冲突,我们用conda创建一个专属环境,环境变量名统一为 `llama-factory`,步骤如下(前提是你已经安装了Anaconda或Miniconda,没有安装的小伙伴可以先去官网下载,安装后重启终端):

1. **创建环境**(环境名固定为 `llama-factory`,Python版本严格遵循llama-factory官方要求,需≥3.11):
   ```bash
   conda create -n llama-factory python=3.11 -y
  1. 激活环境 (后续所有操作都要在这个 llama-factory 环境中进行,至关重要):

    bash 复制代码
    conda activate llama-factory
  2. 安装项目依赖包(复制命令直接运行,耐心等待安装完成,CPU环境无需额外配置GPU相关依赖):

    bash 复制代码
    pip install -e ".[torch,metrics]"

验证环境 :安装完成后,输入 llamafactory-cli version,若能显示版本号,说明 llama-factory 环境配置成功。

三、准备法律小助手数据集(Alpaca格式)

核心说明 :微调的核心是"数据",大家可根据自身需求准备对应场景的数据集(如医疗、教育、办公等),本文以法律小助手为例,演示数据集的准备方法,格式统一遵循llama-factory支持的Alpaca格式。

我们要训练法律小助手,就需要准备贴合法律场景的问答数据集,格式采用llama-factory支持的Alpaca格式(最通用的微调格式,单轮、多轮对话都支持),同时可以参考最高法的人民法院案例库、法答网中的内容,提取真实法律问答场景,让模型更具实用性。

1. 数据集格式要求

必看要求 :数据集需放在项目的 data 文件夹中,格式为JSON,核心字段如下(必填字段标红):

  • instruction :用户指令(必填),比如"解答民法典中关于民间借贷的问题";
  • input:用户输入(选填),比如具体的案件细节、疑问点;
  • output :模型回答(必填),需准确、专业,可参考法答网的精选答问或人民法院案例库的裁判逻辑;
  • system:系统提示词(选填),用于定义模型角色,比如"你是一名专业的法律小助手,熟悉民法典、刑法等相关法律,回答简洁、准确,贴合普通人的理解需求";
  • history:对话历史(选填),用于多轮对话训练,单轮对话可留空。

2. 法律小助手数据集示例(可直接复用)

data 文件夹中新建一个JSON文件,命名为 law_assistant.json,复制以下内容(结合民法典相关场景,补充真实法律逻辑,可直接作为模板修改):

json 复制代码
[
  {
    "instruction": "解答民间借贷相关疑问",
    "input": "别人向我借了5万元,没有写借条,只有转账记录,到期后不还钱,我能起诉他吗?",
    "output": "可以起诉。根据《民法典》第六百七十九条规定,自然人之间的借款合同,自贷款人提供借款时成立。转账记录可以作为借款关系成立的证据,虽然没有借条,但结合转账记录、双方沟通记录(如聊天记录)等,能够证明借款事实和借款金额的,法院会支持你的诉讼请求。建议先与对方协商,协商不成的,可向被告住所地或合同履行地法院提起民事诉讼,准备好转账凭证、沟通记录等相关证据。",
    "system": "你是一名专业的法律小助手,熟悉《民法典》《民事诉讼法》等相关法律规定,擅长解答普通人常见的法律疑问,回答简洁明了、通俗易懂,同时保证法律专业性,避免误导用户。",
    "history": []
  },
  {
    "instruction": "解释自甘风险原则",
    "input": "我和朋友一起打球,被朋友不小心撞伤,能要求他赔偿吗?",
    "output": "一般情况下不能要求赔偿,适用自甘风险原则。根据《民法典》第一千一百七十六条规定,自愿参加具有一定风险的文体活动,因其他参加者的行为受到损害的,受害人不得请求其他参加者承担侵权责任;但是,其他参加者对损害的发生有故意或者重大过失的除外。打球属于具有一定风险的文体活动,你自愿参加,朋友系不小心撞伤,无故意或重大过失,因此无需承担赔偿责任。",
    "system": "你是一名专业的法律小助手,熟悉《民法典》《民事诉讼法》等相关法律规定,擅长解答普通人常见的法律疑问,回答简洁明了、通俗易懂,同时保证法律专业性,避免误导用户。",
    "history": []
  },
  {
    "instruction": "解答彩礼返还相关问题",
    "input": "我和女方订婚,给了10万元彩礼,现在双方分手,我能要回彩礼吗?",
    "output": "可以要求返还彩礼,具体返还比例需结合实际情况。根据《民法典婚姻家庭编司法解释(一)》第五条规定,当事人请求返还按照习俗给付的彩礼的,如果查明属于以下情形,人民法院应当予以支持:(一)双方未办理结婚登记手续;(二)双方办理结婚登记手续但确未共同生活;(三)婚前给付并导致给付人生活困难。你和女方仅订婚,未办理结婚登记手续,符合第一种情形,可要求女方返还彩礼,双方可协商返还金额,协商不成的可向法院起诉。",
    "system": "你是一名专业的法律小助手,熟悉《民法典》《民事诉讼法》等相关法律规定,擅长解答普通人常见的法律疑问,回答简洁明了、通俗易懂,同时保证法律专业性,避免误导用户。",
    "history": []
  }
]

3. 配置数据集(关键步骤,避免训练报错)

关键提醒:新建数据集后,必须配置此步骤,否则llama-factory无法识别数据集,导致训练失败

新建数据集后,需要在 data 文件夹中的 dataset_info.json 文件中添加数据集配置(相当于告诉llama-factory"这个数据集是用来训练的"),步骤如下:

  1. 打开 data/dataset_info.json 文件;

  2. 在JSON文件的最上方,添加以下内容(与其他数据集配置格式保持一致):

    json 复制代码
    "law_assistant": {
      "file_name": "law_assistant.json",
      "columns": {
        "instruction": "instruction",
        "input": "input",
        "output": "output",
        "system": "system",
        "history": "history"
      },
      "type": "alpaca"
    }
  3. 添加完成后保存文件,这样llama-factory就能识别我们的法律小助手数据集了。

四、可视化微调模型(WebUI操作,零代码)

核心优势:零代码、可视化操作,无需编写复杂命令,CPU用户可正常运行(训练速度略慢,耐心等待即可)

llama-factory提供了WebUI界面,无需编写复杂命令,点点鼠标就能完成微调,非常适合新手,CPU用户也能正常运行(只是训练速度会比GPU慢一点,耐心等待即可)。

1. 启动WebUI

在终端(已激活 llama-factory conda环境、处于LLaMA-Factory项目目录下)输入以下命令,启动WebUI:

bash 复制代码
llamafactory-cli webui

启动成功后,终端会显示访问地址(通常是 http://127.0.0.1:7860),复制地址在浏览器中打开,即可看到WebUI界面。

2. WebUI参数配置(核心步骤,按以下设置即可)

进入WebUI后,切换到 「Train」 标签页,按照以下步骤配置参数(所有参数都按默认值或以下建议设置,适配CPU环境,关键参数标红):

  1. Model(模型配置)

    • **Model name **:输入 deepseek-ai/deepseek-r1-1.5b找到对应的模型
  2. Finetuning(微调配置)

    • Finetuning method :选择 lora(我们选用的LoRA算法,适配CPU,必选);
  3. Dataset(数据集配置)

    • Dataset :搜索并选择 law_assistant(我们刚才创建的法律小助手数据集,必选);
  4. Hyperparameters(超参数配置,适配CPU,关键设置)

    • Per device train batch size :设置为 1(CPU算力有限,避免内存溢出,必改);
    • Gradient accumulation steps :设置为 4(累积梯度,提升训练效果,推荐);
    • Learning rate :设置为 1.0e-4(学习率,默认值即可,过高易过拟合);
    • Num train epochs :设置为 3(训练轮数,CPU训练3轮即可,过多易过拟合);
    • 其他参数默认即可。

3. 启动训练

提醒:CPU训练速度较慢(1.5B模型,3轮训练大概需要1-2小时,具体看CPU性能),训练期间不要关闭终端和浏览器,耐心等待即可。

参数配置完成后,点击页面底部的 「Start Training」 按钮,即可开始微调。训练过程中,终端会显示训练进度、loss(损失值)等信息,loss值逐渐下降,说明训练正常。

五、模型测评与导出

训练完成后,我们需要先测评模型效果,确认模型学到了目标知识,再导出模型,为后续部署到Ollama做准备。

1. 模型测评(简单直观,手动测试)

训练完成后,切换到WebUI的 「Chat」 标签页,选择检查点路径为最新一次的训练文件夹 进行手动测评:

测评标准 :如果模型能准确回答问题,贴合数据集的逻辑,说明测评通过;如果回答不准确,可以增加训练轮数、补充更多数据集,重新训练。

2. 模型导出(转换为Ollama支持的格式,无需安装额外工具)

强烈推荐:无需安装llama.cpp等转换工具,使用Ollama原生命令直接量化转换,操作更简单、效率更高

llama-factory训练完成后,导出的是LoRA适配器权重,需先将其与DeepSeek基座模型合并,再转换为Ollama支持的格式,全程使用Ollama原生命令,无需额外安装转换工具,步骤如下:

  1. 合并模型 (在终端输入命令,替换路径为你的输出路径,已激活 llama-factory 环境):

    bash 复制代码
    llamafactory-cli export \
      --model_name_or_path deepseek-ai/deepseek-r1-1.5b \
      --adapter_name_or_path saves/deepseek-law-lora \
      --output_dir merged-deepseek-law \
      --export_type huggingface

    或者直接在界面上操作即可

    这里导出目录大家直接建立一个文件夹粘上绝对路径即可

六、部署模型到Ollama(本地对话自由)

核心优势:轻量级、一键部署、CPU可轻松运行,部署完成后无需网络,可本地自由对话

Ollama是一款轻量级的本地大模型部署工具,支持一键部署、一键对话,操作非常简单,CPU也能轻松运行,下面是详细步骤。

1. 安装Ollama

在终端(已激活 llama-factory conda环境)输入以下命令,通过pip安装Ollama:

bash 复制代码
pip install ollama

验证安装 :安装完成后,输入 ollama --version,若能显示版本号,说明安装成功。

提示:如果pip安装失败,可以去Ollama官方网站(https://ollama.com/)下载对应系统的安装包,手动安装。

2. 导入微调后的模型到Ollama(已通过量化命令完成,无需额外操作)

使用 ollama create deepseek-law -f Modelfile -q 4 命令自动完成模型导入

导入成功后,终端会显示"success"提示,此时模型(命名为 deepseek-law)已成功导入Ollama,可直接启动对话。

3. 运行模型,实现本地对话

在终端(任意环境均可)输入以下命令,启动模型对话:

bash 复制代码
ollama run deepseek-law

启动成功后,就可以输入对应场景问题(如法律场景输入"彩礼能要回吗?""自甘风险是什么意思?"),和我们微调后的专属模型对话了,模型会给出专业、准确的回答。

【此处插入图片6:Ollama运行模型的终端截图,展示对话过程】

退出对话 :对话结束后,输入 /exit 即可退出模型。

七、总结与注意事项

1. 整体流程回顾

整个流程非常清晰,适合CPU用户,全程使用统一环境变量名 llama-factory:选择DeepSeek轻量化模型 → 用llama-factory框架+LoRA算法微调 → 测评模型 → 用Ollama原生命令量化导出 → 直接部署对话,全程无需高端GPU,新手也能快速上手。

2. 注意事项(重点加粗,必看)

  • 环境配置 :务必激活 llama-factory conda专属环境,避免依赖冲突,所有llama-factory相关操作均在此环境中执行;
  • 数据集配置 :格式必须和Alpaca格式一致,且需在 dataset_info.json 中配置,否则训练会报错;
  • CPU训练:速度较慢,耐心等待,训练期间不要关闭终端和浏览器;
  • 模型量化 :优先使用Ollama原生命令 -q 量化,无需安装额外工具,4-bit量化最适配CPU;
  • 模型导入 :量化命令已自动完成导入,无需额外执行 ollama create 命令(避免重复操作);
  • 模型优化:如果模型回答不准确,可增加数据集数量、调整训练轮数或学习率,重新训练。
相关推荐
NineData2 小时前
NineData 5.0 产品发布和生态伙伴大会,圆满举办!
运维·数据库·人工智能
羽师2 小时前
Prompt 提示词中的 === 是干嘛
人工智能
薛定猫AI2 小时前
【技术干货】AI Agent 自动化业务流程实战:从零构建智能营销系统
运维·人工智能·自动化
我叫张土豆2 小时前
WebTransport:下一代Web实时通信的“终极协议“来了
人工智能·网络协议
Acland2409402 小时前
基于 PyTorch + sklearn 的房价预测实战
人工智能·pytorch·sklearn
AI2512242 小时前
AI视频生成工具技术解析:从文生视频到分镜脚本全流程
人工智能·音视频
天天代码码天天2 小时前
C# OnnxRuntime 部署 DAViD 软前景分割
人工智能
AI医影跨模态组学2 小时前
NPJ Precis Oncol 安徽医科大学第一附属医院超声科张超学等团队:多模态深度学习方法用于R0切除卵巢癌的生存预测与风险分层
人工智能·深度学习·论文·医学·医学影像
云和数据.ChenGuang2 小时前
机器学习之超参数是什么?
人工智能·深度学习·神经网络·目标检测·机器学习·自然语言处理·语音识别