使用该工具包,大模型的推理性能提高了40倍

日期:2023-12-05 12:31:58 / 人气:122

使用该工具包,大模型的推理性能提高了40倍。作者:沈海昊、罗宇、孟、、英特尔公司。
编者按:
在CPU上实现优秀的LLM推理性能只需要不到9行代码。英特尔?Extension for Transformer Innovation Toolkit中的LLM运行时显著降低了许多模型的延迟,第一个令牌和下一个令牌的推理速度分别提高了40倍和2.68倍,可以满足更多场景的需求。
英特尔?什么是变压器的扩展?
英特尔?Extension for Transformers[1]是Intel推出的创新工具包,可以基于Intel?架构平台,尤其是第四代英特尔?至强?可扩展处理器(代号Sapphire Rapids[2],SPR)显著加速了基于Transformer的大型语言模型LLM)。其主要特点包括:
通过扩展拥抱脸变形金刚API[3]和利用英特尔?神经压缩器[4]为用户提供无缝的模型压缩体验;
提供低比特量化内核的LLM推理运行时(NeurIPS 2023:在CPU上实现高效的LLM推理[5]),支持Falcon、LLaMA、MPT、Llama2、BLOOM、OPT、ChatGLM2、GPT-J-6B、百川-13B-Base、百川2-13B-Base等。
高级压缩感知运行时[7](neur IPS 2022:CPU上的快速蒸馏和QuaLA-MiniLM:量化长度自适应MiniLM;NeurIPS 2021:一劳永逸的修剪:稀疏/修剪预先训练好的语言模型)。
本文将重点介绍LLM推理运行时(简称LLM runtime)以及如何在Intel中使用基于Transformer的API?至强?在可扩展处理器上实现更高效的LLM推理以及如何处理LLM在聊天场景中的应用问题。
LLM运行时(LLM运行时)
英特尔?Extension for Transformers提供的LLM Runtime[8]是一个轻量级但高效的LLM推理运行时,它受GGML[9]的启发,与LLMA兼容。CPP [10],并具有以下特点:
内核针对英特尔?至强?多种AI加速技术(如AMX、VNNI)以及CPU内置的AVX512F和AVX2指令集进行了优化。
可以提供更多的量化选项,例如不同的粒度(按通道或按组)和不同的组大小(例如32/128);
拥有更好的KV缓存访问和内存分配策略;
具有张量并行化功能,可以帮助多通道系统的分布式推理。
LLM运行时的简化架构图如下:
△图一。英特尔?变压器扩展的LLM运行时简化架构图
在CPU上实现更好的LLM推理性能只需要不到9行代码。用户可以轻松启用类似Transformer的API进行量化和推理。只需将' load _ in _ 4 bit '设置为true,然后从HuggingFace URL或本地路径输入模型即可。
特性试验
经过不断的努力,上述优化方案的INT4的性能得到了显著的提升。本文搭载英特尔?至强?白金848系统性能对比llama.cpp,系统配置详情如下:@3.8GHz,56核/通道,启用超线程,启用Turbo,总内存256 GB(16 x16gb DDR 5 4800 mt/s[4800 mt/s]),BIOS 3A14。TEL2P1,微码0x2b0001b0,CentOS流8。
当输入尺寸为32,输出尺寸为32,波束为1时,推断性能测试结果如下表所示:
△表1。1之间推理性能的比较。LLM运行时和llama.cpp(输入大小=32,输出大小=32,波束=1)
输入尺寸为1024,输出尺寸为32,光束为1时推理性能测试结果见下表:
△表二。两者推理表现的比较。LLM运行时和llama.cpp(输入大小=1024,输出大小=32,波束=1)
根据上表2可以看出,同为第四代Intel?至强?与可扩展处理器上的llama.cpp相比,LLM运行时可以显著降低首令牌和下令牌的延迟,首令牌和下令牌的推理速度分别提高了40倍[a](百川-13B,输入为1024)和2.68倍[b](MPT-7B,输入为1024)。使用默认代码库[10]测试Llama.cpp。
结合表1和表2的测试结果,可以得到以下结果:它和第四代Intel一样?至强?与可扩展处理器上的llama.cpp相比,LLM运行时可以显著提升很多常见LLM的整体性能:当输入大小为1024时,可以实现3.58到21.5倍的提升;当输入尺寸为32时,改进是1.76到3.43倍[c]。
精度检验
英特尔?变形金刚的扩展可以利用英特尔?使用了神经压缩器中的SignRound[11]、RTN、GPTQ[12]等定量方法,并使用lambada_openai、piqa、winogrande、hellaswag数据集验证了INT4推理的准确性。下表是FP32的平均测试结果和准确度之间的比较。
△表3。3之间的准确度比较。INT4和FP32
从上表3可以看出,基于几个模型LLM运行时的INT4推理的精度损失非常小,几乎可以忽略不计。我们已经验证了许多模型,但由于篇幅限制,这里只列出了其中的一部分。欲了解更多信息或详情,请访问此链接:https://medium.com/@神经压缩器/LLM-英特尔性能-变压器扩展-F7D061556176。
更高级的功能:满足LLM更多场景的需求。
同时LLM Runtime[8]还具备双通道CPU的张量并行化功能,是较早具备该功能的产品之一。未来将进一步支持双节点。
但是,LLM运行时的优势不仅仅在于其更好的性能和准确性,还在于我们努力增强其在聊天应用场景中的功能,解决LLM在聊天场景中可能遇到的以下应用问题:
对话不仅仅是关于LLM推理,对话的历史也很有用。
有限输出长度:LLM模型预训练主要基于有限序列长度。因此,当序列长度超过预训练中使用的注意窗口大小时,其准确性会降低。
效率低下:在解码阶段,基于Transformer的LLM会存储所有之前生成的token的键值状态(KV ),这会导致内存占用过多,增加解码延迟。
关于第一个问题,LLM运行时的对话功能是通过包含更多的历史对话数据,生成更多的输出来解决的,但是llama.cpp目前还没有能够很好的处理这个问题。
关于第二个和第三个问题,我们把streaming LLM(串流LLM)集成到英特尔?变压器的扩展,可以显著优化内存使用,减少推理延迟。
流式LLM
与传统的KV cache算法不同,我们的方法结合了Attention Sink)(4四个初始令牌)来提高注意力计算的稳定性,并借助滚动的KV cache来保持最新的令牌,这对于语言建模非常重要。这种设计具有很强的灵活性,可以无缝集成到可以使用旋转位置编码绳和相对位置编码ALiBi的自回归语言模型中。
△图二。2千伏缓存。流式LLM(来源:通过注意力下沉的高效流式语言模型[13])
此外,与llama.cpp不同的是,该优化方案还引入了“n_keep”和“n_discard”等参数来增强流式LLM策略。用户可以使用前者来指定要保存在KV缓存中的令牌数,并使用后者来确定要在生成的令牌中丢弃的令牌数。为了更好地平衡性能和准确性,默认情况下,系统会丢弃KV缓存中一半的最新令牌。
同时,为了进一步提高性能,我们还在MHA收敛模式中加入了流式LLM。如果模型使用RoPE来嵌入位置,那么只需将“移位操作”应用于已有的K-Cache,就可以避免重复计算之前生成的且未丢弃的token。这种方法不仅在生成长文本时充分利用了完整的上下文大小,而且在KV缓存上下文完全填满之前不会产生额外的开销。
“移位操作”依赖于旋转的互换性和相关性,或复数乘法。举个例子,如果一个记号的K张量初始放在m处,对于i ∈ [0,d/2]旋转m×θi,那么当它需要移动到m-1的位置时,对于i ∈ [0,d/2]可以旋转回(-1)×θi。这正是每次丢弃n_discard令牌的缓存时发生的情况,并且每个剩余令牌需要被“移动”n_discard位置。下图以“n_keep=4,n_ctx=16,n_discard=1”为例展示了这个过程。
△图3。环形缓冲千伏缓存和移位绳的工作原理
需要注意的是,整合关注层并不需要理解上述过程。如果K-cache和V-cache以同样的方式洗牌,注意力层输出的结果几乎一样(浮点错误可能会有细微的差别)。
结论与展望
基于上述实践经验,本文提供了一个在Intel?至强?在可扩展处理器上实现了一个高效的低位(INT4)LLM推理解决方案,并在一系列通用LLM上验证了其通用性,显示了其相对于其他基于CPU的开源解决方案的性能优势。未来将进一步完善CPU张量库和跨节点并行。
欢迎试用英特尔?变形金刚[1]的扩展,在英特尔?在平台上更高效地运行LLM推理!也欢迎您向代码库提交拉取请求、问题或查询。期待您的反馈!
特别感谢
感谢英特尔公司人工智能高级经理,以及对本文有贡献的工程师许、、于、、丁毅、和。
[a]根据表2第一个令牌测试结果计算,百川-13b。
[b]根据表2 MPT-7B中的下一个令牌测试结果计算。
[c]当输入大小为1024时,整体性能=第一个令牌性能+1023个下一个令牌性能;当输入大小为32时,整体性能=第一个令牌性能+31个下一个令牌性能。"

作者:华宇注册登录官网




现在致电 5243865 OR 查看更多联系方式 →

COPYRIGHT 华宇注册登录官网 版权所有