以开发者为中心的方式,我们推出了最新的库: efficient transformers,旨在简化在Qualcomm Cloud AI 100上部署大型语言模型(LLMs)。此库使用户能够无缝地将HuggingFace中心上预训练的模型和检查点(使用HuggingFace上的transformers库开发)转化为可以在Qualcomm Cloud AI 100加速器上高效推理运行格式。
在本篇博客中,我们将详细介绍如何将一个已经支持的transformer-based的模型,在任何GPU(图形处理单元)或AI加速器上训练后,部署到AIC 100实例上的过程。
Efficient transformers 库包括对基础算子的重构,使这些算子可以得到AIC 100的硬件加速。在这个预训练模型的移植过程中,原始模型的算子会在Pytorch层被Efficient transformers库中的算子替代掉。这使用户能够保留fine-tune、量化或进行了任何调整的结果的同时, 转换后的模型依然可以被AIC 100的硬件加速。
Efficient transformers 库根据模型的“类”(class)来移植HuggingFace预训练模型,该类封装了模型算子的实现方式。因此,所有直接派生自同一基础类的HuggingFace模型都能使用相同的方法进行移植。例如,Efficient transformers 库对MistralForCausalLM的支持意味着, 对于所有基于MistralForCausalLM的模型, 都能移植到AIC 100,而无需进行其他特定于模型的更改。
当前版本的库支持HuggingFace上基于流行架构的CausalLM模型,如Llama、Mistral、Mixtral、CodeGen、StarCoder、MPT,并且在快速的迭代支持更多的模型.
部署步骤
优化 -> 导出 -> 编译
AIC 100加速器是一款专门定制的高度复杂的推理产品,其软件解决方案旨在快速部署已训练的模型。
通过三个简单步骤——优化 -> 导出 -> 编译,任何框架中的预训练模型都可以变得适合推理并部署在AIC 100上。AIC 100工具将会把模型转换中, 所有涉及的复杂性的问题和细节都覆盖掉,并在大多数使用场景中提供开箱即用的性能。
虽然导出、编译和部署模型是基本步骤,但是因为这个处理转换和优化的复杂性,Efficient transformers库将所有这些步骤整合在一个步骤中。
此外,该库在整部署流程中实现了自动识别和实施针对每个预训练模型的特定优化。因此库简化了整个部署的过程,保证以最小的努力实现最佳性能。
高通AIC 100上的LLMs
在推理加速器上高效部署LLMs需要解决多个挑战,而不会牺牲性能。例如:
-
在LLM解码步骤之间,在加速器上维护一个不断增长的KV值缓存(KV$),而不是重新计算KV值。
-
尽管上述方法会自然地导致大小可变的张量,但只生成固定形状的张量,以便能够在AIC 100编译器生成高性能的代码。
-
自动检测和高效处理模型的各种KV$布局,例如:
a, [batch, context_length, num_heads, head_dim] b, [batch, num_heads, context_length, head_dim] c, [context_length, batch, num_heads, head_dim]等等 d, 高效管理内存以写回计算得到的KV。 e, 处理预训练模型中的IEEE-fp16范围违规(通常在fp32中)。 f, 处理KV 中滚动缓冲区的输入管理等。
所有这些挑战都被从用户使用中抽取出来 - 这正是应该的方式。
在AIC 100上启动基于Efficient transformers的大型语言模型(LLMs)
本节中的列出了Efficient transformers库在不同模型类型和规模中的支持, 包括:
Codegen-2B
Mistral-7B (Single SOC)
CodeLLAMA-34B
4个AIC100之间的张量并行性