前情提要

之前使用的Qwen-1.8B-Chat大模型、开源知识库项目FastGPT以及对接大模型API的One API进行本地搭建的大模型系统已经运行了一段时间,主要用途为导入大量应急知识以及漏洞知识自动回答一线师傅的问题。并完善了一个知识库运营体系:

未命名文件.png

运营过程中,针对漏洞及应急常识回答较好。

由于没有解除模型自带的道德限制,偶尔会出现回答“我不能为您解答漏洞/免杀等相关内容”的情况。

另外一些针对性功能性特定性的问题回答较差,例如本文下面要写的:通过大模型生成天眼查询语句。通过测试,在知识库中传入查询语句编写规则后大模型无法理解并输出正确的查询语句,在知识库中传入一些示例问答也无法很好的解决。于是开始通过尝试微调进行解决。

什么是微调

微调(Fine-tuning)是指在预训练模型的基础上进行进一步训练,以适应特定任务或领域需求的过程。通过微调,可以利用少量特定任务的数据,对预训练模型进行调整,使其在该任务上的表现更加优异。微调的步骤通常包括:1. 加载预训练模型;2. 准备特定任务的数据集;3. 训练模型;4. 验证和调整。

通俗意义来讲,微调是通过数据集对某一个特定知识进行针对性训练。用一个人的技能学习来同步比喻,微调的步骤为:1. 找这个人过来;2. 拿到乘法口诀表;3. 通过背诵的方式进行训练4. 提问有没有学会。再用这个例子来说明,知识库的方式就是提问之后在书里现查。

在微调中使用最多的是低秩自适应技术即LoRA。微调大语言模型需要大量的显存占用,LoRA的核心意义在于用时间换空间,即以运行时间增长为代价,节省内存。下午中的微调也采用的是LoRA方法。

对Qwen-1.8B-Chat进行微调

加载预训练模型

首先下载Qwen存储库:

!git clone [<https://github.com/QwenLM/Qwen.git>](<https://github.com/QwenLM/Qwen.git>)

返回:

正克隆到 'Qwen'...
remote: Enumerating objects: 1717, done.
remote: Counting objects: 100% (791/791), done.
remote: Compressing objects: 100% (289/289), done.
remote: Total 1717 (delta 600), reused 576 (delta 487), pack-reused 926
接收对象中: 100% (1717/1717), 35.82 MiB | 11.26 MiB/s, 完成.
处理 delta 中: 100% (1014/1014), 完成.

移动到下载的目录中,并查看当前目录:

%cd Qwen
import os
print("当前工作目录:", os.getcwd())

返回:

当前工作目录: /mnt/workspace/Qwen