BladeLLM是阿里云PAI平台提供的大模型推理引擎,致力于让用户轻松部署高性能、低成本的大语言模型服务。BladeLLM对LLM推理和服务的全链路进行了深度的性能优化和工程优化,确保不同模型在不同设施上都达到最优性价比。
除了在惯例上下文长度下的极致性能优化之外,BladeLLM还冲破了现有LLM推理零碎上下文长度的极限,可能反对更长的输出长度以及文本生成长度等,使得LLM可能解锁更多的利用场景,并且BladeLLM在超长上下文下仍然放弃极致的性能,相比于其余LLM推理服务零碎有显著的性能劣势。
本文次要介绍BladeLLM在超长上下文方面具备的劣势,包含反对的最大上下文长度以及超长上下文的推理性能。
背景
超长上下文是LLM倒退的必然趋势
超长上下文推理能力是LLM涌现的重要能力之一,该能力促生了一系列具备微小潜在价值的利用场景,包含个性化的聊天机器人(Character.AI)、文学创作工具(Jasper)、文章摘要工具(ChatPaper)等。个性化的聊天机器人会和用户进行持续性的交互,给予用户工作、情感、学习等多方面的帮忙。LLM会在交换过程中记忆残缺的聊天内容,模型输出长度逐次递增,在屡次交互后造成超长输出文本序列;文学创作工具借助LLM的能力批量生成长篇文本,如小说、故事和剧本等。相比传统的手工创作过程,LLM文学创作工具能够在短时间内生成大量的背景、情节和对话,在大幅度晋升作家和编剧的创作效率的同时为读者提供更加丰盛且多样的浏览资料。LLM涌现的超长上下文推理能力被认为是通往AGI的必经之路,该能力的意义次要体现在以下几个方面:
- 摸索更多利用场景:超长文本生成的反对使得LLM能够利用于更多的利用场景,如个性化聊天机器人、生成长篇小说、技术文档、学术论文等。这些利用场景通常须要生成较长的文本内容。
- 生成更具上下文连贯性的文本:LLM的指标是生成与给定上下文相干的自然语言文本。当生成序列限度较短时,可能会导致生成的文本与上下文的连贯性有余,影响生成文本的品质。而LLM反对超长文本生成,能够更好地放弃上下文的完整性,生成的文本更加连贯,从而晋升生成文本的品质。
- 晋升生成多样性:较长的生成序列能提供更多的空间来摸索不同的文本可能性,从而进步生成文本的多样性。LLM反对超长文本生成,能够更好地捕获上下文的轻微变动,生成更多样化、丰盛的文本内容。
随着相干利用场景的铺开,反对超长上下文的模型层出不穷,其中包含反对84K上下文的MPT StoryWriter、200K上下文的Claude 2以及256K上下文的LongLLaMA等等(见下图)。零碎层面尽管曾经有局部框架(如DeepSpeed)针对超长上下文进行反对和优化,然而仍然集中于训练阶段。而在推理阶段,风行的框架无不面临超长输入输出无奈运行或运行效率低下的问题,能够说超长文本的输出和输入对大模型推理引擎带来新的挑战。
超长上下文的挑战
首先,现有的LLM推理引擎难以满足大模型解决超长上下文信息的需要,这些零碎对于存储资源的配置计划以及计算算子的设计会极大地限度模型的最大输入输出长度。因而,大规模的上下文反对须要更高效的存储和计算策略;此外,更长的上下文信息使得推理工夫急剧增长,引起成本上升和用户体验的降落,这个问题在现有的LLM推理引擎中尤为显著。推理工夫增长的次要起因是LLM的Attention机制,它须要计算每个Token与其余Token之间的绝对重要性,随着上下文长度的减少,Attention计算须要解决更多的Token从而导致更长的计算工夫,因而更疾速高效的Attention计算方法是减速LLM超长文本生成的要害。
以HuggingFace Llama2-13B模型为例,随着上下文长度的减少,生成一个token的工夫显著减少,具体增长趋势如下图所示。上下文长度34K时HuggingFace开源模型生成一个token的工夫是上下文长度1K时的3.5倍.
技术计划
以下是BladeLLM推理引擎的技术架构图,蕴含了很多外围组件,本文次要介绍其中的RaggedAttention和DNN-based AutoTuner.
RaggedAttention
近期,对于Transformer Multi Head Attention计算有两个颇具影响力的工作即FlashAttention和PagedAttention, 它们对LLM训练和推理零碎的设计范式产生了深远的影响。
PagedAttention受到操作系统中虚拟内存和分页思维的启发,在不间断的显存空间中存储间断的keys和values. PagedAttention将每个sequense的kv cache划分为块,每个块蕴含固定数量的tokens的keys和values。因为这些块在显存中不用间断,从而极大地缩小了显存碎片,并且无需为每个sequense提前预留大量的显存,使得贵重的显存资源失去了最充沛的利用。极致的显存利用率配合上Contiguous Batching,极大地晋升了LLM推理服务的吞吐。相应地也带来一个毛病,不间断的显存块在肯定水平上影响了kernel访存效率,从而影响了性能。
同期BladeLLM自研的RaggedAttention尽管要解决的问题与PagedAttention相似,然而在实现办法上存在肯定差别,具体来说就是在kernel性能与显存利用率之间有着不同的tradeoff。
RaggedAttention的名字是受Tensorflow框架中RaggedTensor的启发。Ragged是不规则的意思,这意味着RaggedAttention的kv cache不是规定的Tensor,而是容许其中每个sequence的长度各不相同,从而可能和Contiguous Batching高效配合,晋升零碎吞吐。然而和PagedAttention不同的是,RaggedAttention保障同一个sequence的key和value cache是间断存储的,因而可能晋升kernel的访存效率和进而晋升性能。同样地,间断存储会造成肯定的显存碎片和显存预留问题,从而影响了显存利用率。这是一个典型的工程上的tradeoff,没有标准答案,因为不同的算力显存配比、不同的输入输出长度、甚至不同业务对于延时的不同要求都会导致系统瓶颈的差别。作为AI平台,BladeLLM致力于为不同模型、不同设施、不同workload、不同业务场景以自动化的形式寻求最适宜的配置。
例如对于变动范畴极大的上下文长度,借助于下一大节将要介绍的AutoTuner,RaggedAttention在不同上下文长度下都能放弃高效的计算和访存,咱们实测上下文长度从1变动到512000,RaggedAttention都能取得极致的性能。
DNN-based AutoTuner
LLM推理属于典型的强Dynamic Shape场景,不仅Batch Size维度会动态变化,Sequence Length维度变动幅度更为微小。Dynamic Shape场景下谋求Kernel极致性能的次要办法之一是基于理论运行尺寸进行Tuning调优,即针对每一组特定的输出尺寸都通过理论运行和测量选取Best Schedule,采纳这种办法的工作包含AutoTVM, Ansor等。 这种办法尽管能够达到很极致的性能,然而存在Tuning开销大的问题,特地是Tuning后果只能对特定Shape实用,对于Dynamic Shape场景十分不敌对:如果离线事后针对所有可能的shape都tune一遍,须要破费的tuning工夫以及计算资源十分微小;如果在线对每组新shape实时进行tuning,会对线上性能产生重大的性能扰动。
针对以上痛点,BladeLLM采纳了DNN-based AutoTuner,齐全依赖DNN模型预测的后果而无需理论运行测量来选取Best Schedule. 咱们在训练数据收集、模型构造、特征提取、Loss函数设计等方面进行了大量的摸索和尝试,一直晋升DNN模型的预测准确率,目前基于DNN-based AutoTuner的GPU计算密集算子的均匀性能达到基于理论运行测量的Tuning调优性能的99.39%.
在解决了预测准确率之后,升高DNN预测模型的运行工夫和占用的计算资源成为该技术利用于高实时性在线推理场景的要害挑战。间接应用已有框架和引擎(如PyTorch, TorchScript, OnnxRuntime等)搭建预测模型无奈满足服务的高实时性需要,咱们通过模型零碎联结优化,使得AutoTuner DNN模型预测延时升高至2us. 极致的系统优化使得预测模型性能相比于用PyTorch, TorchScript, OnnxRuntime搭建的模型别离晋升36倍,19.5倍和4.3倍(见下图),并且推理过程占用的系统资源极低,预测模型只应用一个CPU Core而非GPU资源以确保不对服务的GPU模型本身性能造成任何烦扰。因为微秒级的低预测时延和99%以上的预测准确率,AutoTuner不仅被利用于LLM在线推理服务,还胜利服务于包含搜推广、语音辨认、Stable Diffusion等Dynamic Shape业务场景。
后果比照
咱们以最大文本生成长度以及相应的生成工夫为例来比照不同LLM推理零碎最大能反对的上下文长度以及相应的性能,后果如下:
- lmDeploy(基于FasterTransformer)在生成长度超过10K之后会Hang住
- vLLM在生成长度超过12K之后呈现illegal address谬误
- Huggingface原始的Llama模型在生成长度超过34K后OOM
- LightLLM最大生成长度(67K)和BladeLLM(70K)靠近,然而所须要的工夫是BladeLLM的3倍
注:为了比照的公平性,以上后果均基于fp16权重和fp16 kv cache测量,BladeLLM现已反对kv cache量化,可进一步将单卡最大反对的上下文长度晋升至280K;以上所有的测量均未采纳投机采样;以上测量在8月份实现,目前业界LLM推理引擎都还在疾速倒退中,咱们期待更新的后果比照,同时BladeLLM反对更长上下文、更高性能的新版本开发也靠近序幕,有了新的后果咱们会持续和大家分享。
总结
超长上下文是LLM倒退的必然趋势,而以后支流的LLM推理和服务引擎所反对的上下文长度以及超长上下文的推理性能都远远不够,以上分享了一些对于BladeLLM对超长上下文的反对以及超长上下文推理性能,欢送大家交换探讨。此外,除了关注超长上下文场景,BladeLLM也会继续关注推理的多个技术方向,包含低比特量化压缩、多轮对话、极致内核优化、编译优化等,后续咱们也会有更多的技术分享对外公开,欢送大家继续关注!