type
status
date
slug
summary
tags
icon
password
一、 前言
在了解完相关的大模型的概念之后,想找一个通俗易懂的项目上手熟悉一下。在这里找到一个优秀的大模型上手项目—chat嬛嬛(在此感谢DataWhale团队的成员做出的优秀项目)。本文都是基于此项目的readme.md里的步骤记录实验过程的。
二、 准备过程
1、 环境准备
在这里默认大家都是会安装Pytorch等内容的
只需要将相应的版本做一个要求罢了
- ---------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
(更高版本也可)
- ---------------
pip install modelscope==1.16.1
pip install transformers==4.43.1
pip install accelerate==0.32.1
pip install peft==0.11.1
pip install datasets==2.20.0
2、 数据准备
因为是对大模型进行微调,所以在数据上一定是要对准模板。
我们需要将一大段文字,转化成我们想要的格式和形式。在本测试例中,因为是chat类型的对话系统,所以我们需要有对话的形式。所以在这里我们需要有以下几个步骤:①从原始的数据中提取出角色和对话。②筛选出我们需要关注的角色(因为我们主要关注的是甄嬛,所以只需要关注甄嬛和其对话的角色)。③将对话的格式转变成我们想要的格式。
在官方项目中使用了一个extract-dialogue的项目,用于提取文章对话里面相关的内容。(但是我没有运行起来,因为里面openai的那个模块是把我墙了的),所以我只能使用处理好的json文件。
格式为这样。

先说一下为什么要用这样的格式,instruction是用户指令(是唯一必须的组成部分),告诉模型其需要完成的任务或者回答什么问题;input是用户输入(非必要输入),是完成用户指令所必须的输入内容;output是模型应该给出的输出(这个也是非必要的输出),它只是帮助模型生成更符合用户需求的输出。(但是看教程里面说是可以将这一步增加数据增强的环节,使用RAG生成一些固定风格的对话数据,但是这一步我还没有探索实现,等着后面进行实验。)
3、 基本模型准备
要想让大模型在某一类特定的任务上有突出表现的话,那么就一定要对基本模型进行某一种特定任务的训练。拿这个项目来说,我们要学习嬛嬛的口气和语句,所以我们要在基本模型具有的功能上去做这方面的训练。所以对基本模型的选择也是非常重要的。现在比较有名的基本模型有Llma,chatgpt,qwen……
对于基本模型的选择也是非常重要的,因为对于大模型来说,有些大模型擅长对话,有些大模型善于生成代码。对于本项目来说,如果要生成特定风格语气的对话式大模型,基本模型我们就要选择对话式的大模型,在这里我直接选择的就是阿里的通义千问,Qwen2-7b。
三、 微调过程

1、 首先下载基本模型
在这里为基本模型建立一个文件夹取名为:premodel
下载模型的代码如下:是从魔塔社区下载的
下载成功会出现以下类似的文件结构

2、 结合数据文件(.json)微调大模型
直接列代码吧,后面会针对里面的概念分别出详细的讲解:
得到的结果在output_lora下

图4 得到的lora文件
3、 将lora文件与基本模型进行结合
我的疑问:我看教程这一段看的并不是很明白,因为教程里面使用lora的方法是先导入基本模型,然后再将lora文件导入,并没有将lora和基本模型合并在一起之后形成一个新模型导入。这个做法是lora微调的通用做法吗?

所以这一步我在网上搜了一下教程,其实是有合并的教程的
主要就是使用了peft里面的merge_and_unlaod()方法进行合并,再用save_pretrained方法进行模型保存
出现的结果如下所示,基本结构和原始大模型差不多即可

四、 部署过程
部署过程就属于一个使用大模型的过程
这次并没有用什么特别厉害的推理框架,而是直接就将模型拿过来使用。我直接使用的就是streamlit(和项目中的例子一致)。主要就是用来可视化展示结果。
1、 环境准备
准备streamlit:pip install streamlit
2、代码准备

但是推理起来非常的慢,非常不妙
五、 总结
将大模型的下载、微调、部署的过程从头到尾捋了一遍,对大模型的这些过程有了很深的了解。
但是还是认识不足,对大模型的量化和知识蒸馏等进阶使用的方法还没有了解(这些应该就是下一步要学习的东西)。
六、 参考文档
- 作者:JucanaYu
- 链接:https://jucanayu.top/article/1657ab71-7095-806f-bc72-fc251dbc5abc
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。