花粉乐分享平台宣传视频
> 乐学堂 > > 推理加速GPT-3超越英伟达方案50%!大模型推理系统Energon-AI开源
推理加速GPT-3超越英伟达方案50%!大模型推理系统Energon-AI开源
来源:量子位
2023-04-27 15:52:32
272
管理

在前沿AI大模型规模呈指数级增长的趋势下,仅凭单卡已经很难满足当下的推理需求。

就拿拥有1750亿参数的GPT-3来说。

仅仅是加载模型参数就需要数百GB的存储空间,远超单个GPU的容纳能力。

因此,多卡并行被视为AI大模型推理的必然选择。

△模型参数的迅速增长[https://arxiv.org/abs/2111.14247]

Energon-AI系统设计

面向AI大模型部署,Colossal-AI团队设计了单实例多设备推理系统Energon-AI。

△Energon-AI超大模型推理系统示意图

Energon-AI系统设计分为三个层次,即运行时系统(Runtime)、分布式推理实例(Engine)以及前端服务系统(Serving):

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使用率的同时规避饥饿问题,减小平均请求时延。

△Dynamic batching与直接打包batch吞吐量对比

硬件环境:8 * A100 GPU 80GB。

测试使用的模型为GPT-3, 测试句长为256以内随机生成,padding策略为batch内最长padding。

模拟真实场景下多用户同时发送大量变长推理请求的情况,将Energon-AI的动态batch规划方法与传统的FIFO(先入先出)队列打包方法进行了吞吐量对比。

由于dynamic batching的算法缓解了直接padding造成的大量冗余计算问题,在该策略下dynamic batching的吞吐量实现了34.7%的提升。

易用性

Python

from gpt import gpt3from gpt_server import launch_engine# for enginemodel_class = gpt3model_type = "gpt"host = "127.0.0.1"port = 29400half = Truebackend = "nccl"# for paralleltp_init_size = 4pp_init_size = 2# for serverengine_server = launch_engineserver_host = "127.0.0.1"server_port = 8020rm_padding = True

Python

energonai service init --config_file=gpt_config.py

在追求性能的同时,Energon-AI希望保持系统使用的灵活度与易用性,用户仅需自定义并行模型、并行参数以及服务请求逻辑加入到配置文件中,即可启动推理服务。

目前,已经提供了最常见的GPT、BERT和ViT模型作为示例,更详尽的教程将会在近期完善。

在构建新的并行模型时,Energon-AI使用Python,且使用方式与Pytorch相似,有层的概念且初始化与执行逻辑清晰,用户无需考虑内存管理,并行通信等行为。

如下代码展示了两层Linear层组成的模型并行运行的完整代码。

Python

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 代码还需要额外编译工作。

这些都对用户的并行知识与编程能力提出了严峻挑战。

C

// Memory Allocation (only for a single paramerter).T *d_inter_kernel = NULLparam_.ffn.intermediate_weight.kernel = d_inter_kernel;device_malloc(&d_inter_kernel, dim * dim);// Two MLP LayerscublasMM_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(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(param_.transformer_out, attr_matmul_buf_, param_.ffn.output_weight.bias, param_.ffn_layernorm.gamma, param_.ffn_layernorm.beta, m, n, param_.stream);// Communicationif(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训练成本超百万美元。

在反映机器学习领域热点的Papers With Code网站上,Colossal-AI也广受关注,登上热榜第一。

传送门

GitHub地址:

https://github.com/hpcaitech/ColossalAI

参考链接:https://medium.com/@hpcaitech/6139c5bc7790

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

花粉社群VIP加油站

0
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与花粉乐分享无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
凡本网注明 “来源:XXX(非花粉乐分享)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。
QQ:2443165046 邮箱:info@hflfx.com
关于作者
量酷girl(花粉精英)
文章
650
主题
10
关注
1
粉丝
0
点击领取今天的签到奖励!
签到排行
随手拍
54个圈友 0个话题
华为手机随手拍,记录生活点滴之美好
华为P30pro
51个圈友 0个话题
这里是华为P30pro手机交流圈,欢迎华为P30pro用户进群交流
体验官
60个圈友 2个话题
华为花粉体验官,体验官专属的交流群
登录后查看您创建的圈子
登录后查看您创建的圈子
所有圈子
猜你喜欢
杭州互联网违法和不良信息举报平台 网络110报警服务 浙ICP备17046585号
0
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索