基于阿里云GPU云服务器的AIACC助力UC搜索业务性能提效380%,每年节省数千万成本

简介: 用阿里云GPU计算实例来满足UC极致性价比需求

POSE-4(飞).png

文丨阿里云神龙计算平台AI加速团队 & UC搜索架构部推理引擎团队


导语作为国产行列里占有率排名第一的移动浏览器,UC浏览器自身承载着数以亿计的用户量,当前UC浏览器每天的服务请求对服务器的算力及带宽要求极高,因此也带来了巨额的运营成本。因为业务是动态变化的,UC对计算资源也有动态扩缩容的需求。阿里云GPU云服务器是提供GPU算力的弹性计算服务,具有超强的计算能力,服务于深度学习、科学计算、图形可视化、视频处理多种应用场景,能为客户提供软件与硬件结合的完整服务体系,助力客户在实际业务中实现资源的灵活分配、弹性扩展、算力的提升以及成本的控制。而基于阿里云GPU云服务器的神龙AI加速引擎(AIACC)是为了极致性能而生,旨在打造世界级无与伦比的AI性能体验,同时为了客户降本增效,实现共赢。据悉,刚公布的最新世界MLPerfTM推理榜单中,基于阿里云GPU云服务器的AIACC首次突破封闭式场景世界第一


本篇文章将带大家了解阿里云AIACC如何基于阿里云GPU云服务器助力UC浏览器的搜索业务平衡计算性能与运营成本之间的矛盾,使其大幅实现降本增效,成功在阿里云的GPU云服务器落地。


背  景


1. 业务背景

UC搜索承载着UC主要业务入口,场景包括:大搜、各种垂搜业务、夸克app等。搜索流程一般经过几个阶段:召回 –> 粗排 -> 精排(L2->L4) -> 混排等。架构如下:

01.png


在业务中,L3/L4排序部分都使用了QTC核心模型。随着业务流量的增长,目前精排打分阶段面临巨大挑战,延迟和吞吐都要兼得。


2. QTC模型

下图是用TF-summary对QTC模型做可视化,

图2-2.jpg


QTC模型属于排序核心模型,模型结构分为3个BERT+ 多层Conv + 多层MLP等,其中Bert输入seq length最大长度是512。模型总共有大约4500个算子,计算量巨大。


3. 原始性能

最初采用了NV提供的Faster-Transformer这一套软件来优化QTC模型的推理,但由于Faster-Transformer只能加速BERT网络,导致推理时需要做多个子图割裂运行,加上其余网络部分也未做优化,从而整体性能并不好。针对A100机型,做了基于这套方案的性能评估,延迟控制在30ms下,QTC模型只能跑到350QPS。


4. 挑战与目标

随着模型效果带来的业务收益,促使业务流量不断增加,在算法预算前提下,扩量面临比较大的挑战。一方面资源不够,一方面资源也没有完全利用起来导致的吞吐不够,同时观察分析在GPU使用率达到90%以上时延迟会出现飙升的情况,这种情况对于稳定性带来了不小的影响。如何在原来预算的基础上提高吞吐、降低延迟、提升性价比最终规模化上线为业务赋能成为最大的挑战。


结合搜索业务的特点,针对QTC模型在GPU上推理提出了几个方面的需求:


1.  为了保证算法的效果,推理时模型输出的误差控制在千分位;

2.  为了保证终端用户在搜索时的体验,精排部分的推理耗时在30ms以内;

3.  在有限的预算下满足业务的需求,即QPS需要远高于原有解决方案;


综合业务方各个方面的需求,UC制定如下的目标:


在A100机型上,保证精度的前提下,QTC模型耗时在30ms以内,QPS达到1120以上。


优  化


1. 优化路线

TensorRT是Nvidia开发的针对模型推理的高性能软件库,但QTC模型复杂度高,无法整体直接用TensorRT load。此外,直接用TensorRT load时部分层会被拆成细粒度的op,性能较差。对QTC模型做深度的分析之后,结论是用TensorRT以及其plugin支持的op可以覆盖QTC模型的op,但是现有的parser无法按照需要的粒度去解析QTC模型并映射到TensorRT上。


针对上述问题,AIACC从模型定义层,直接解析QTC模型并映射到TensorRT上,避免转PB后大的operator被拆分成细粒度的operator,以达到最佳性能。此外,这么做也便于以不同的粒度进行模型精度的分析,以不同的粒度实现op的融合与替换,方面集成AIACC的高性能Kernel进来。

03.png


2. Enable TensorRT & 精度对齐


2.1 映射正确性验证


解析QTC模型并映射到TensorRT上的过程中,首先要解决的问题是映射的正确性验证。对正确性验证,首先要解决基准是什么这个问题。我们拿到的信息为一份模型结构的代码与一个训练中的checkpoint。基于业务方给的有限的信息,完成了从训练框架侧load checkpoint的逻辑,并根据需求,留下了可以获取任意中间结果的接口。在验证映射正确性的过程中,我们以训练框架侧运行推理的结果为对比的baseline,和我们构建的TensorRT侧的Engine的运行结果做对比,来判断是否正确的把QTC模型映射到TensorRT上。


下面以一个self-attention层为例,展开怎么做QTC模型到TensorRT的映射并保证运算结果的一致。


在TensorRT侧,为了校验映射的正确性,需要有推理的脚本来验证build好的engine的正确性。同在训练框架侧构建正确性的baseline类似,我们基于TensorRT开发了一套load build好的engine并做推理的脚本,来获取engine的推理结果,用于和训练框架侧的baseline做对比。


TensorRT为了追求更高的性能,对self-attention层的运算做了等价变化,把部分转换提前到模型build阶段,进而减少模型推理需要的operation。其他的一些细节,包括mask处理、数据类型、hidden size等,按照类似逻辑,一一对齐后,我们即可在TensorRT侧构建出运行结果与训练框架侧运行结果一致的engine。


对比TensorRT直接load checkpoint的模式,在我们的映射中,把self-attention映射为1个op,避免了拆成多个细碎op而导致的性能问题。这种模式下self-attention的信息在一个节点上,也方便我们后续做kernel的优化,例如融合self-attention内部的GEMM等多个操作,以达到更好的新能。


2.2 数值问题解决


数值问题是AI任务中很难定位解决的一类问题,因为没有编译器或者其他的报错提示来帮助我们定位问题。在把QTC模型映射到TensorRT的时候,遇到了数值问题,现象为多个相同的基础模块叠加导致中间的feature map中有NAN的异常值,进而导致最终的结果误差远远超出业务团队要求的千分位。


第一时间把这个问题定为数值问题,是因为在QTC模型到TensorRT映射过程中,每一个子模块我们都做了单元测试来验证映射的正确性,不存在映射错误导致的异常。此外,为了推理的性能,我们开启了FP16,部分中间的运算是用FP16进行,FP16的表达能力相比FP32差很多,这是引入数值问题的一个风险点。多个相同的基础模块叠加导致最终的输出中有NAN的异常值,大概率是因为计算中出现了极大or极小的数值,导致某些操作,例如做exp/除法的时候,出现的异常的行为。


分析清楚问题后,解决问题的方法也很简单,完善TensorRT中这部分exp计算逻辑,避免exp计算中出现大的负值即可


2.3 其他的N个问题的概述


在把QTC模型映射到TensorRT并对齐精度的过程中,我们还遇到了其他一系列大大小小的其他问题,这里不一一展开,只在简单列举一下,包括用shuffle替换reduce来提高实现reshape的运算的效率,用identity层来实现data type cast的逻辑,conv层的参数转换,pooling的padding处理,reshape后接FC层参数排布等问题。


3. 关键Kernel优化

seq_length=35/512时,TensorRT未对Multi-Head Attention做针对性优化。seq_length为512的Bert耗时占比较大,如果对这部分做针对性优化,会获取较大幅度的性能提升。对这部分的优化我们分两步进行,第一步优化了seq_length=512的Multi-Head Attention中的softmax的实现,第二步则是针对seq_length为35/512的case做了类似TensorRT针对seq_length=64的情形下做的融合。


下图是seq_length为512的情况下,未优化前的一个Transformer层调用的Kernel,其中绿框中的kernel为第一步优化的Kernel,红框中的部分则是第二步优化中融合为一个。

04.png


4. Enable CUDA-Graph

CUDA Graph是一个把所有kernel算子结合(capture)成Graph,然后整体launch这个Graph,减少频繁的kernel launch来带的开销以及kernel中间的gap。下图是普通的kernel执行和Graph执行的区别。可以看出,在kernel执行时因为需要CPU和GPU切换,造成小算子间会有比较大的GPU idle时间(gap引起),同时如果小算子执行的时间比较短,那么launch的时间占比就成了大头,造成GPU利用率低下。05.png


在CUDA11版本和Ampere架构下,CUDA Graph本身做了很大的改进,在CUDA内部做了并行化处理。

06.png


从机制图可以看到,CUDA内部在执行Graph时,查找依赖关系,如果发现无直接依赖且目前资源满足算子执行(比如:stream processor/share memory/register等)则并行执行,提高GPU利用率。同时我们也对CUDA Graph下做了一些优化(比如增加memory cache机制、graph min update、multi-stream处理等)更好地提升了性能。


Enable CUDA Graph有两种方式,其中流捕获提供了一种从现有的基于流的 API 创建图的机制。在QTC模型中,通过流捕获的方式来加速基于TensorRT构建的图。Enable CUDA Graph后,在A100上延迟有3%下降,吞吐提高了4%,在GPU使用率高时latency也更稳定。


业 务 结 果


下图中,Faster-Transformer是指UC原有的基于Faster-Transformer的在GPU上的解决方案;AIACC-Optimization是我们优化后的性能数据:

柱状图_1374_788.png


在UC的生产环境中,A100机型上QPS达到了1330,为最初Faster-Transformer版本的3.8倍,超出了预设的目标。


目前,采用AIACC这一系列优化的QTC模型已经在部分搜索业务上线使用,后续即将大规模线上使用。按最低的预期使用量来计算,每年能节省达数千万的成本


在这次合作中,UC搜索精排应用在阿里云GPU云服务器上运行的性价比得到了显著提升,可以把业务批量部署在生态成熟的阿里云GPU云服务器上。云平台弹性扩缩容的优点让UC可以根据业务需求,按需从阿里云上获取GPU云服务器资源。此外,推理用的机型和训练用的机型统一,让生产链路上从算法到优化再到部署的工程师合作更方便,也方便后续在线上实现训练与推理任务的混合部署,最大化GPU资源的利用。


阿里云AIACC针对阿里云GPU云服务器硬件做了深入的优化,达成了在不额外引入新硬件平台的情况下,用阿里云GPU计算实例来满足UC极致性价比需求的目标。此外,用UC真实应用打磨的优化性能工作都沉淀到AIACC中,后续可以规模化服务更多的阿里云GPU云服务器的客户。


点击这里,了解阿里云GPU云服务器。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
10天前
|
存储 缓存 运维
阿里云服务器经济型e与通用算力型u1实例各自性能、适用场景区别及选择参考
在选择阿里云服务器实例规格时,经济型e实例和通用算力型u1实例因其高性价比和广泛适用性,备受个人开发者、中小企业的青睐。在同地域、相同配置的情况下,经济型e和通用算力型u1实例的价格相对于其他实例规格要低一些,很多个人和初创企业用户都会优先考虑选择这两个实例规格的云服务器,那么它们之间有什么区别?各自的性能、适用场景上有何区别?我们应该如何选择呢?本文将详细解析这两款实例的性能特点、适用场景、价格优势及购买建议,帮助用户更好地理解并选择合适的云服务器实例。
|
2天前
|
存储 分布式计算 安全
阿里云服务器经济型、通用算力型、计算型、通用型各主要实例性能、适用场景对比
在阿里云目前的活动中,云服务器实例规格有几大类,分别是轻量应用服务器、经济型e实例、通用算力型u1实例,第七代计算型c7、通用型g7、内存型r7实例,第八代计算型c8i、通用型g8i、内存型r8i实例,倚天云服务器实例计算型c8y、通用型g8y、内存型r8y实例,不同类型的实例规格,性能和适用场景不同,本文将这些热门实例规格的性能和适用场景全部展示出来,以供大家做对比和选择参考,从而选择出适合自己需求的云服务器实例规格。
|
3天前
|
存储 缓存 安全
阿里云服务器通用算力型u1实例怎么样?实例性能与测评结果参考
本文将通过性能评测、适用场景、特点介绍、实测数据分享以及最新活动价格等多个方面,全方位解析这款云服务器实例,以供用户了解和参考。
|
26天前
|
弹性计算 固态存储 Linux
阿里云服务器、轻量应用服务器、gpu云服务器收费标准与实时活动价格参考
云服务器ECS、轻量应用服务器和gpu云服务器是阿里云的主要云服务器产品,目前轻量应用服务器2核2G收费标准为60元/月,活动价格只要36元/1年或68元1年,云服务器1核1G包月收费标准最低为24.0元/月,GPU云服务器中gn6i实例4核15G配置月付1681.00/1个月起,gn6v实例8核32G配置月付3817.00/1个月起。本文为大家整理汇总了阿里云服务器、轻量应用服务器、gpu云服务器的最新收费标准与活动价格情况,以表格形式展示给大家,以供参考。
|
3天前
|
机器学习/深度学习 人工智能 编解码
阿里云GPU云服务器优惠收费标准,GPU服务器优缺点与适用场景详解
随着人工智能、大数据分析和高性能计算的发展,对计算资源的需求不断增加。GPU凭借强大的并行计算能力和高效的浮点运算性能,逐渐成为处理复杂计算任务的首选工具。阿里云提供了从入门级到旗舰级的多种GPU服务器,涵盖GN5、GN6、GN7、GN8和GN9系列,分别适用于图形渲染、视频编码、深度学习推理、训练和高性能计算等场景。本文详细介绍各系列的规格、价格和适用场景,帮助用户根据实际需求选择最合适的GPU实例。
|
28天前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
34 4
|
29天前
|
机器学习/深度学习 测试技术 PyTorch
深度学习之测量GPU性能的方式
在深度学习中,测量GPU性能是一个多方面的任务,涉及运行时间、吞吐量、GPU利用率、内存使用情况、计算能力、端到端性能测试、显存带宽、框架自带性能工具和基准测试工具等多种方法。通过综合使用这些方法,可以全面评估和优化GPU的性能,提升深度学习任务的效率和效果。
34 5
|
27天前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c8i实例解析:实例规格性能及使用场景和最新价格参考
计算型c8i实例作为阿里云服务器家族中的重要成员,以其卓越的计算性能、稳定的算力输出、强劲的I/O引擎以及芯片级的安全加固,广泛适用于机器学习推理、数据分析、批量计算、视频编码、游戏服务器前端、高性能科学和工程应用以及Web前端服务器等多种场景。本文将全面介绍阿里云服务器计算型c8i实例,从规格族特性、适用场景、详细规格指标、性能优势、实际应用案例,到最新的活动价格,以供大家参考。
|
5天前
|
存储 Oracle 固态存储
阿里云服务器ESSD云盘性能级别详解
存储性能对于应用的运行效率和用户体验至关重要,阿里云作为领先的云服务提供商,为用户提供了多种存储解决方案,其中ESSD云盘以其高性能和灵活性备受关注。本文将详细介绍阿里云服务器ESSD云盘的四种性能级别——PL0、PL1、PL2和PL3,以及它们各自的单盘IOPS性能上限和容量大小等关键信息,帮助您更好地选择适合自身需求的存储方案。
|
1月前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。

相关产品

  • 云服务器 ECS
  • GPU云服务器
  • 下一篇
    DataWorks