大模型优化的方式主要包括以下几种:
在LLM中,Token是输入的基本单元由于在大模型的参数非常多,比如在GPT-2中,有1.5B参数,每个参数用float32表示,那么需要的内存大小为4 bytes * 1,500,000,000 = 6GB,更先进的模型如LLAMA有65B参数,那么需要的内存就需要260G,这还是在不考虑词汇表的情况下。因此在进行模型实际部署时,会进行模型的压缩。而且,在训练LLM中,CPU与内存之间的传输速度往往是系统的瓶颈,核心数反而不是大问题,因此减小内存使用是首要优化点。使用内存占用更小的数据类型是一种直接的方式,比如16位的浮点数就可以直接将内存使用减倍。目前有几种相互竞争的16位标准,但英伟达在其最新一代硬件中引入了对bfloat16的支持,|Format|Significand|Exponent|<br>|-|-|-|<br>|bfloat16|8 bits|8 bits|<br>|float16|11 bits|5 bits|<br>|float32|24 bits|8 bits|
如图所示,主要从下面两个维度考虑问题:Context optimization(上下文优化):模型是否缺失必知信息?如内部业务数据,流程等。LLM optimization(大模型优化):模型是否准确率不足,输出内容未能很好的遵循特定风格或格式?1.Context optimization(上下文优化)所创建的LLM应用如果需要了解特定的数据、系统和流程,而这是预训练LLM中不存在(或者有缺失)的知识和信息,则需要进行所谓上下文优化,将依赖的这部分信息提供给模型。如企业内部智能问答机器人,针对企业内部员工提供内部知识服务,需要了解企业知识库、规章制度、系统流程、甚至部分业务数据。而这些信息正是大模型所不知道的知识,无法通过单纯的prompt工程解决,应该考虑将相关知识提供给大模型。RAG就是很好的解决该问题的技术,首先在知识库检索相关内容,然后将内容和提示词组装起来一起提供给大模型作为输入,得到理想的输出。1.LLM optimization(大模型优化)在进行了足够的prompt工程后,如果所创建的LLM应用如果在垂直领域的表现仍然不足,或者我们希望其输出内容保持特定的格式风格等的稳定性依然不及预期,可以考虑进行大模型优化。这里所说的大模型优化通常是指微调。需要注意的是,即使用微调,也要和良好的prompt工程结合起来才能更有效的发挥作用,所以前期基于prompt工程打好地基很重要。下文中我们还会进一步说明。
开发:产品视角的大模型RAG应用[heading1]调优实践[content]基于以上的分析,我们先选取了实现成本最小的方式进行调优,结果如下:1、更换大模型:从ChatGLM2-6B替换成baichuan2-13b,发现针对我们的场景,后者的性能可以提升一倍左右。2、更换embedding模型:将embedding模型从LangChain Chatchat默认的m3e-base替换为bge-large-zh,发现后者优于前者3、测试不同Top k的值:比较Top 5、Top 10、Top 15的结果,发现Top 10时效果最优。4、对文档名称进行处理:由于原来的政策文件,在导出时文件名会进行简化,如too_long_发展行动方案。因此,人工对文件进行重命名,上传相同文件构建知识库,同时在构建知识库时勾选【开启中文标题加强】选项,发现重命名文件对结果的提升效果不明显,但勾选【开启中文标题加强】选项后,回答的无关信息减少,效果有所提升。目前来看,尽管效果有所提升,但仍未达到可用水平,后续我们也将尝试其他的调优策略。