本系列将讲述如何从零开始私有化实现及部署类ChatGPT的对话机器人,主要分环境安装,模型现状与选型,基础chatglm模型详解及部署,chatglm不同环境常见bug,前后端对话简单实现,流式对话实现,chatpdf实现,海量本地知识库搜索能力实现,visualglm图片描述模型详解,集成,文本生成图片模型集成,语音识别详解,语音合成详解,语音对话功能集成等等内容。
阅读本系列需要有一定的人工智能算法能力,对nlp算法,语音算法有一定了解,还涉及多方面工程能力知识,如阅读中有任何问题,可以留言,本人会一一解答。
本章节主要根据本人自己的经验总结当前大模型的一些发展和当前中文开源大模型现状,如果只是想看部署篇,可以跳过本章,直接进入下一章节。
一.大模型基本背景
先来一段长废话,随着深度学习的不断发展,大模型技术已经开始取得一些重要的进展,特别是在自然语言处理领域。
基于Transformer结构的大型预训练语言模型,如BERT、GPT等,已经在文本分类、情感分析、机器翻译和问答系统等任务中取得了许多优秀的成果。这些模型在大规模数据集上进行预训练,然后在特定任务上进行微调,能够取得超过之前的传统方法很多的效果。
为了更好地支持特定任务和场景,许多领域正在开发定制化的大模型,例如,医疗领域的大模型可用于帮助医生对医学图像和报告进行自动分析和识别,以及金融领域的大模型能够帮助进行金融风险评估和欺诈检测等。
未来,大模型仍将会通过不断的研究和优化,成为实现语言智能化和人机交互的重要手段,并在各个领域中发挥着越来越大的作用。
二.从transformer说起
这一切都起源于谷歌17年发表的paper《Attention is All You Need》,这篇文章详细阐述了transformer,以及里面影响深远的attention结构。
如上图所示,摘自谷歌的paper,该结构与传统的seq2seq论文结构类似,实际上都有encoder与decoder,其左侧为encoder部分,右侧为decoder部分。
结构内基本都是multi-head attention以及feed forward。
其中feed forward结构比较好理解,说白了就是全连接层,主要还是multi-head attention,多头注意力机制,也是这篇文章的核心。
multi-head attention由self attention堆叠组成,而self attention就是q,k,v三个矩阵计算组成,其中q,k,v是相同大小的矩阵。
如上公式,attention里q*k的转置相当于获取到文本中每一个token与其他token之间的组合关系,除以根号d是为了防止值过大,并且满足期望为0,方差为1的分布进行的归一。
最终乘以v就相当于对用每个字的权重对每个字的特征进行加权求和,从而放大关键字。
其实纵观attention其原理很像门阀结构,实际上在这之前也存在x*sigmoid(x)这样的门阀结构,是不是原理挺相似的。
transformer的encoder和decoder结构实际上类似,decoder加入了不同的mask机制,剔除不应感知到的部分序列,比如生成任务就是掩盖之后当前生成结果后的序列。
预训练大模型的开始是从18年10月BERT这篇文章开始的,之后开始分成了两个明显的分支,一个是以encoder为基础的Bert家族,一个是以decoder为基础的gpt家族。
bert比较有名的如,Roberta,Bert-wwm,ALBERT,TinyBert都是比较好用的预训练模型,都曾红极一时。
但这一切都在gpt3.5版本后发生了改变。
三.gpt发展史
gpt1主要就是transformer的decoder的堆叠,其主要目标还是通过生成预训练模型后,在少量样本微调训练后完成既定的nlp任务,比如文本分类,翻译,阅读理解等等。
gpt2在gpt1的基础上创新点在于首次提出了zero-shot,即零样本学习,所谓零样本学习就是将nlp任务直接作为prompt加入至输入文本中,如翻译任务:请帮我翻译,{文本1}。 除此之外,gpt2也将模型参数首次提升至billion级。
实质上gpt2虽然做到了以上两点创新,其效果当时来看并不算好,也就没有像后来的chatgpt突然引爆网络热点。
gpt3将参数量一下跨越到了千亿,虽然其在attention结构上做了一些微调,比如sparse attention,其原理是让当前token更关注k距离以内的token,减少计算量,但不得不说gpt3的意义是证明了参数量越大,就会带来质的飞跃,即涌现。
像现在chatgpt版本gpt3.5,实际上是在gpt3的基础上通过RLHF进行的强化学习样本微调,这样能让大模型的回答更加人性化,规范化,具体RLHF原理,后续有机会再聊到。
gpt4拥有更强大的能力,并增加了视觉输入功能,由于其没有具体的细节,只能猜测其模型参数大小变得更大。
现有的各家生成式大模型相较gpt来说变化并不大,真正大模型质的变化主要还是在参数量上,相信未来随着硬件的升级,生成式大模型成本会越来越便宜,应用也会改变整个生态。
四.当前比较好用的支持中文的大模型
模型名称 | 模型参数量 | 所需显存 |
---|---|---|
chatglm | 6.2B | 13G |
cpm-bee | 10B | 20G |
moss | 16B | 30G |
llama | 7B/13B | 14-24G |
如上表所示,其模型文件都可以在huggingface.co/ 获取到,有些大模型可以支持商用,比如cpm-bee,在这里更正一下,上章错写chatglm是70亿量级,实际是62亿的参数量。
有些人可能会好奇为什么大模型预测时可以在单张gpu卡上运行,而训练时同样的参数量却不能在单张gpu卡时训练,这里简单说明一下,训练时涉及到模型前后向传播梯度、adam的动量和方差、以及一些其他的碎片之类的,而预测只需要在gpu卡上放模型参数做前向传播,并且一般做half,也就是fp16精度,这相较于训练只是25%的显存量,所以在训练过程为了解决单卡训练,一般有lora微调的方式,也有deepspeed的zero策略,如zero-offload,就是将如adam部分放在cpu内存中运行,来减少显存使用,deepspeed训练之后可以单开一章讨论。
以下章节主要以清华开源的chatglm大模型为基础,讲述对话机器人的私有化部署使用。