推理加速性能超越英伟达FasterTransformer 50%,开源方案打通大模型落地关键路径
AI大模型推理部署的困难
模型参数的迅速增长[https://arxiv.org/abs/2111.14247]
- Runtime:在运行时系统设计过程中我们发现,当模型规模不断增大,通用矩阵乘的时间占比逐渐增大,而访存密集型算子与Kernel Launch的时间占比则逐渐降低,推理过程进一步从访存密集型向计算密集型方向迁移,TensorRT以及专用推理系统对访存密集型操作的优化效果被极大削减。Energon-AI Runtime依赖于Colossal-AI实现张量并行,同时设计了流水线并行包装方法用于显存不足的情况。此外,我们引入了大量推理专用算子及方法。如,面对NLP中输入变长的特点,我们引入了transpose_padding_rebulid与transpose_padding_remove等算子用以高效支持Encoder和Decoder模型中MLP层的冗余计算消除方法。
- Engine:单设备推理中程序有相同的数据入口与出口,分布式训练的主要目标是模型参数,因此无须对多个进程的输入输出进行管理,而多设备推理则不同。我们希望通过良好的封装使得Engine具有与单设备推理完全相同的行为。我们采用了半中心化方法,主进程中使用RPC在每个设备调用初始化或推理方法,使得分布式推理可以得到中心化的控制,同时每个设备则保有自己的Tensor Parallel与Pipeline Parallel通信逻辑。我们在每个进程中设计并维护了分布式消息队列,用以保证多个进程中多线程调用执行的一致性。
- Serving:针对用户请求分散和变长的特点及大模型推理对GPU并行运算的依赖之间的矛盾,Energon-AI引入了动态Batching机制,将请求队列中的请求按照机器性能进行最优打包后,根据等候时间、batch大小、batch的扩展可能性(根据padding后的句子长度)等挑选优先级最高的batch处理,最大化GPU使用率的同时规避饥饿问题,减小平均请求时延。
性能测试
并行推理超线性扩展
张量并行可扩展性测试结果展示。硬件环境:8 * A100 GPU 80GB。由于单设备显存无法满足GPT-3推理需求,此处为GPT-3 12层的测试结果,设置句长为Padding的1/2。
Energon-AI八卡并行推理在Batch Size为32时,相比于单卡Pytorch直接推理,可获得8.5倍的超线性加速。
运行时推理性能提升50%
张量并行运行时系统推理时延对比。硬件环境:8 * A100 GPU 80GB。
设置句长为Padding的1/2。GPT-3-24-Layers for TP=2, GPT-3-48-Layers for TP=4。
我们选择高度优化的英伟达FasterTransformer GPT-3作为对比方案。FasterTransformer在其4.0版本中推出了分布式推理特性,目前支持GPT-3模型的分布式推理,但由于其纯C++代码高度耦合的特点,灵活度与易用性相对较低。此外,对于NLP推理输入句长不同的特点,其分布式推理无冗余计算消除功能。
对于GPT-3模型,Energon-AI的运行时系统在Batch Size为1时性能略低于FasterTransformer,而在Batch Size较大时能够实现超过50%的性能提升。
Dynamic Batching吞吐量增加30%
Dynamic batching与直接打包batch吞吐量对比。硬件环境:8 * A100 GPU 80GB。测试使用的模型为GPT-3, 测试句长为256以内随机生成,padding策略为batch内最长padding。
我们模拟真实场景下多用户同时发送大量变长推理请求的情况,将我们的动态batch规划方法与传统的FIFO(先入先出)队列打包方法进行了吞吐量对比。由于dynamic batching的算法缓解了直接padding造成的大量冗余计算问题,在该策略下dynamic batching的吞吐量实现了34.7%的提升。
易用性
from gpt import gpt3 from gpt_server import launch_engine # for engine model_class = gpt3 model_type = "gpt" host = "127.0.0.1" port = 29400 half = True backend = "nccl" # for parallel tp_init_size = 4 pp_init_size = 2 # for server engine_server = launch_engine server_host = "127.0.0.1" server_port = 8020 rm_padding = True
energonai service init --config_file=gpt_config.py
在追求性能的同时,Energon-AI希望保持系统使用的灵活度与易用性,用户仅需自定义【并行模型】、【并行参数】以及【服务请求逻辑】加入到配置文件中,即可启动推理服务。目前,我们提供了最常见的GPT、BERT和ViT模型作为示例,更详尽的教程将会在近期完善。
在构建新的并行模型时,Energon-AI使用Python,且使用方式与Pytorch相似,有层的概念且初始化与执行逻辑清晰,用户无需考虑内存管理,并行通信等行为。如下代码展示了两层Linear层组成的模型并行运行的完整代码。
class MLP(nn.Module): def __init__(self, dim, dtype, bias): super().__init__() self.dense_0 = Linear1D_Col(dim, dim, dtype=dtype, bias=bias, gather_output=False) self.dense_1 = Linear1D_Row(dim, dim, dtype=dtype, bias=bias, parallel_input=True) def forward(self, x): x = self.dense_0(x) x = self.dense_1(x) return x
与之相对,在构建新的并行模型时,FasterTransformer需要使用C++代码并且需要用户自行进行内存管理,定义通信等底层行为组织。受篇幅限制,如下代码展示两层Linear层模型并行运行的内存管理,具体执行,通信的部分代码。除此之外,用户想要代码正确执行,还需要花费大量时间精力对内存管理、执行逻辑、通信行为之间的配合进行调试,C++代码还需要额外编译工作。这些都对用户的并行知识与编程能力提出了严峻挑战。
// Memory Allocation (only for a single paramerter). T *d_inter_kernel = NULL param_.ffn.intermediate_weight.kernel = d_inter_kernel; device_malloc(&d_inter_kernel, dim * dim); // Two MLP Layers cublasMM_cublasLtMM_wrapper(param_.cublaslt_handle, param_.cublas_handle, CUBLAS_OP_N, CUBLAS_OP_N, n, m, k, &alpha, param_.ffn.intermediate_weight.kernel, AType_, n, attr_matmul_buf_, BType_, k, &beta, (DataType_ *)inter_matmul_buf_, CType_, n, param_.stream, cublasAlgoMap_, sm_, cublas_workspace_); add_bias_act_kernelLauncher<DataType_>(inter_matmul_buf_, param_.ffn.intermediate_weight.bias, m, n, ActivationType::GELU, param_.stream); n = k; cublasMM_cublasLtMM_wrapper(param_.cublaslt_handle, param_.cublas_handle, CUBLAS_OP_N, CUBLAS_OP_N, n, m, k, &alpha, param_.ffn.output_weight.kernel, AType_, n, inter_matmul_buf_, BType_, k, &beta, (DataType_ *)(param_.transformer_out), CType_, n, param_.stream, cublasAlgoMap_, sm_, cublas_workspace_); add_bias_input_layernorm_kernelLauncher<DataType_>(param_.transformer_out, attr_matmul_buf_, param_.ffn.output_weight.bias, param_.ffn_layernorm.gamma, param_.ffn_layernorm.beta, m, n, param_.stream); // Communication if(t_parallel_param_.world_size > 1) { all2all_gather(nccl_logits_buf_, nccl_logits_buf_, local_batch * n, t_parallel_param_, decoding_params.stream); }
更多特性
本次发布的Energon-AI子系统为beta版,近期会根据用户反馈与既定计划,进行密集的迭代更新,尽早为用户提供正式版,充分满足用户的不同推理部署需求,欢迎向Energon-AI提出您的需求与建议。
构建AI大模型生态系统
面对AI大模型的时代浪潮,除了本次新增的推理部署特性,针对现有大模型训练方案并行维度有限、效率不高、通用性差、部署困难、缺乏维护等痛点,Colossal-AI通过高效多维并行和异构并行等技术,让用户仅需极少量修改,即可高效快速部署AI大模型训练。
例如对于GPT-3这样的超大AI模型,相比英伟达方案,Colossal-AI仅需一半的计算资源,即可启动训练;若使用相同计算资源,则能提速11%,可降低GPT-3训练成本超百万美元。
对于蛋白质结构预测应用AlphaFold,基于Colossal-AI的加速方案的FastFold,成功超越谷歌和哥伦比亚大学的方案,将AlphaFold训练时间从11天减少到67小时,且总成本更低,在长序列推理中也实现9.3~11.6倍的速度提升。
Colossal-AI兼容低端设备,在仅有一块GPU的个人PC上便能训练高达180亿参数GPT;普通的笔记本电脑,也能训练十几亿参数的模型,相比现有主流方案,可提升参数容量十余倍,大幅度降低了AI大模型微调和推理等下游任务和应用部署的门槛。
Colossal-AI注重开源社区建设,提供中文教程,开放用户社群及论坛,对于用户反馈进行高效交流与迭代更新,不断添加等前沿特性。
自然开源以来,Colossal-AI已经多次登上GitHub热榜Python方向世界第一,与众多已有数万star的明星开源项目一起受到海内外关注!
在反映机器学习领域热点的Papers With Code网站上,Colossal-AI也广受关注,荣登热榜第一。
项目团队
△潞晨科技创始人尤洋教授:加州大学伯克利分校博士、IPDPS/ICPP最佳论文、ACM/IEEE George Michael HPC Fellowship、福布斯30岁以下精英(亚洲 2021)、IEEE-CS超算杰出新人奖、UC伯克利EECS Lotfi A. Zadeh优秀毕业生奖
△潞晨CSO Prof. James Demmel:加州大学伯克利分校杰出教授、ACM/IEEE Fellow,美国科学院、工程院、艺术与科学院三院院士
传送门

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
太厉害了,通过文档内容快速查找文件,1行Python代码实现
大家好,这里是程序员晚枫。 之前给大家分享了:一行Python代码,如何成为办公小助手?这5个操作,超实用! 1、项目说明 Python是一个非常好用的工具,除了可以用来开发,还可以用于日常生活。 今天给大家分享:通过文件里面的内容,查找文件的存放位置。 你有没有遇到过这种情况:想查找一个文件,但是不记得文件的名字了,只记得文件里的内容? 这种情况下,文件搜索软件也是无能为力的,因为它们只能根据文件名称进行搜索。 今天我们一起用1行Python代码来实现一下。 2、代码实现 ① 安装python-office 安装很简单,在有python环境的电脑上,只需要执行下面这一行命令。 如果你之前使用过python-office这个库,也需要执行一下,可以下载到最新版本~ 安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-office -U ② 查找文件的代码 直接上代码! 代码 # 导入这个库:python-office,简写为office import office # 1行代码,实现 office.file...
- 下一篇
全自动、可视化开发,成为敏捷转型落地关键词
德勤( Deloitte)在《2020年技术趋势报告》中指出,创新仍是商业和技术领域中的颠覆性动力。新兴企业正在利用数字技术迅速进步,然而很多传统企业正在面临着IT系统越来越缓慢、僵化和昂贵等诸多问题,还在努力追赶发展的步伐。这在德勤此前一项面向全球首席信息官 (CIO)的调查中已经得到证实,仅有 54% 的CIO表示他们企业现有的技术能够满足当前和未来的业务需求。 那么,要如何解决这个问题呢?最快捷的方式,莫过于利用一套低门槛、可视化、全自动的服务和平台来提升自身的技术能力。 只需一个具有简单逻辑和拖拽组件的可视化界面,专业开发人员,或者没有编程基础、开发技能的普通人,就可以创建复杂程度不同的软件,以满足开发、自动化流程和加速数字化转型的业务需求。 由于它优化了软件开发过程的每一步,因此在需要快速构建、频繁更新、异步协作和高质量工作的软件市场中,全自动、可视化开发工具备受青睐,常被用于 DevOps 流程中,加速企业敏捷转型。 降本增效,便捷开发 全自动可视化开发最大的优势就是,能够为企业降低成本,提升效率。 在全自动可视化平台出现之前,传统的原生代码开发平台需要手动编码,开发完成之...
相关文章
文章评论
共有0条评论来说两句吧...