利用NVIDIA组件提升GPU推理的吞吐

本实践中,唯品会AI平台与NVIDIA团队合作,结合NVIDIATensorRT和NVIDIAMerlinHierarchicalKV(HKV)将推理的稠密网络和热Embedding全置于GPU上进行加速,吞吐相比CPU推理服务提升高于3倍。

应对GPU推理上的难题

唯品会(NYSE:VIPS)成立于2008年8月,总部设在中国广州,旗下网站于同年12月8日上线。唯品会主营业务为互联网在线销售品牌折扣商品,涵盖名品服饰鞋包、美妆、母婴、居家、生活等全品类。

在使用GPU打开推理算力天花板过程中,遇到了如下问题:

稠密网络,如何获取更好的GPU推理性能;

Embeddingtable如何使用GPU加速查询。

为了解决上面的问题,我们选择使用了NVIDIATensorRT和MerlinHierarchicalKV。具体原因如下:

稠密网络使用TensorRT推理,通过TensorRT和自研Plugin方式获取更好的推理性能;

HierarchicalKV是一个高性能GPUTable实现,我们将热Embedding缓存在GPU中,冷Embedding则通过内存和分布式KV存储,加速查表过程。

GPU推理服务设计方案

图1.GPU推理服务工作流程图

如上图所示,支持GPU推理服务,可以分为如下几步:

TensorPS(自研训练框架)

支持离线和实时训练;

离线训练:生成天级全量模型,完成后同步给Odin;

实时训练:生成小时级别的全量模型和分钟级别的增量模型,完成后同步给Odin;

2.Odin(模型协调者)

(离线/实时)单机模型的全量模型:触发TensorRTConverter;

(离线/实时)分布式模型的全量模型:同时触发TensorRTConverter和Reshard;

(离线/实时)单机/分布式模型的增量模型:触发TensorRTConverter;

3.TensorRTConverter(模型转换器)

将Dense网络转换成TensorRTEngine;

转化完成,如果是全量模型,向模型管理API汇报全量版本;如果是增量模型,向模型管理API汇报增量版本;

4.Reshard(参数分片模块)

对模型参数分片后,向模型管理API汇报版本;

分片后参数,同步到分布式在线参数服务Atreus;

5.Thor(自研推理服务)

单机模型:通过模型管理API获取全量模型版本,拉取模型并启动推理服务Thor;

分布式模型:需要部署分布式参数服务Atreus和推理服务Thor;

如果开启了实时模型特性,Thor会定时通过模型管理API获取增量版本,拉取并更新增量模型;

6.Atreus(自研分布式在线参数服务)

仅用于分布式模型,可支持TB级参数;

如果开启了实时模型特性,Atreus会定时通过模型管理API获取增量版本,拉取并更新增量参数。

GPU模型推理

图2.前向计算流程图

如上图所示,前向计算可以分为如下几步:

H2D拷贝(CPU->GPU);

Embedding层,使用GPUTablelookup(GPU);

Dense层,使用TensorRT+自研Plugin推理(GPU);

D2H拷贝(GPU->CPU)。

稠密网络使用TensorRT在GPU上计算

图3.稠密网络TensorRT推理优化

如上图所示:

稠密网络使用TensorRT推理,结合自定义Plugin实现推理性能优化。

利用HierarchicalKV实现GPUTablelookup

图4.基于HierarchicalKV的GPUTable

如上图所示,查表过程可以分为如下几步:

将keys拷贝到GPU;

将keysconcat成一个大的mergedkeys,减少后续查表次数;

mergedkeys查GPUTable,输出mergedvalues,并输出未命中missedkeys和missedindices;

拷贝missedkeys到CPU;

查询Atreus(分布式参数服务器),获取missedvalues;

missedvalues拷贝到GPU;

将missedvalues更新到mergedvalues;

将mergedvalues输出Split成多个Tensor(和keys一一对应);

对missedkeys进行去重;

去重之后,异步更新GPUTable。

TensorRTConverter实现GPU模型转换

图5.TensorRTConverter转换流程

如上图所示,TensorRTConverter可以分为如下几步:

FreezeCPU模型;

切分模型Graph成Sparse和Dense两个子图,Sparse图在GPU上执行,Dense图经过图优化后使用TensorRT推理;

Dense图转化成ONNX模型;

优化ONNX模型,把图中OP替换成自定义的高性能TensorRTPlugin;

转换ONNX模型成TensorRTEngine;

合并Sparse图和TensorRTEngine生成GPU模型。

自研CUDAKernel,提高性能

GPUTable加速查表

基于HierarchicalKV增强了find接口,支持获取未命中keysindices等信息,在高命中率情况下有更好的性能,并贡献给社区:

voidfind(constsize_typen,constkey_type*keys,//(n)value_type*values,//(n,DIM)key_type*missed_keys,//(n)int*missed_indices,//(n)int*missed_size,//scalarscore_type*scores=nullptr,//(n)cudaStream_tstream=0)const

2.GPU支持CSR(Compressedsparserow)格式的序列特征

根据统计,序列特征有85%+的数据都是填充值,使用CSR格式压缩序列特征可以大幅度减小序列特征大小。考虑到搜推序列数据的特殊性(填充值都在序列尾部),这里仅使用value和offset两个序列表示原始稀疏矩阵,如下图:

图6.CSR的稀疏矩阵

通过Fusion的方式,减少Lookup过程CUDAKernel数量,提升推理性能。

图7.Lookup过程优化对比

优化前:N个输入对应N个LookupCUDAKernel;

优化后:通过提前合并,将CUDAKernel数量减少为3个(Concat、Lookup和Split)。

通过Fusion的方式,减少CSR处理过程CUDAKernel数量,提升推理性能,下图以ReduceSum举例。

图8.CSR处理优化流程

优化前:N对输入对应N个ReduceSumCUDAKernel;

优化后:通过提前合并,将CUDAKernel数量减少为4个(2个Concat,1个ReduceSum和1个Split)。

3.H2D,合并CPU->GPU内存拷贝

搜推模型中有较多的特征输入,GPU推理中需要将这些Tensor从CPU拷贝到GPU,频繁小内存的cudaMemcpy会导致性能下降,最佳实践是将这些Tensor打包在一块连续内存中,将整个大内存H2D拷贝到GPU。

4.Tile算子融合

搜推模型中有超过200个Tile,大量的KernelLaunch会带来GPU推理性能恶化,最佳实践是进行KernelFusion,在一个大的算子中执行多个小Kernel,从而充分发挥GPU的并发优势。

持续在搜推广场景中GPU加速

唯品会AI平台一直追求性能上的极致,未来将会持续与NVIDIA技术团队合作,继续探索使用HierarchicalKV在训练超大型模型上的GPU性能优化,在提升GPU性能方面进行不断地探索和实践,也会对GenerativeRecommenders进行探索和实践。

THE END
1.相比于离线训练,在线训练的好处有什么?问答离线训练毕竟使用的是 T-1 或者 T-2 的数据去做的,没有对线上实时产生的行为数据进行利用,对于数据的时效性利用相对较差。 比如说,有这样的一个场景,今天我的整个平台只对 14 岁以下的少女做某个运营活动,而平台上充斥了大量的年龄段的客户,整个平台的交互行为都变了,这个时候你的模型还是 T-1 去做的,将https://developer.aliyun.com/ask/446535
2.蚂蚁金服核心技术:百亿特征实时推荐算法揭秘备注:弹性特征带来一个显著的优势:只要用足够强的L1稀疏性约束,在单机上就能调试任意大规模的特征训练,带来很多方便。我们的hashmap实现是KV化的,key是特征,value是vector的首地址。 离线训练优化 经过这样的改造后,在离线批量学习上,带来了以下变化: 在线训练优化 https://maimai.cn/article/detail?fid=1010621115&efid=mIQCHnkj0zjxlpygUmo5mg
3.科学网—[转载]群视角下的多智能体强化学习方法综述基于学习(深度学习、强化学习)设计的迭代式问题求解方法是离线策略学习的基础范式。由于环境及对手的非平稳性,离线训练的蓝图策略通常很难直接运用于在线对抗。在线博弈对抗过程与离线利用模拟多次对抗学习博弈过程不同,博弈各方处于策略解耦合状态,与离线批(batch)式策略学习方法不同,在线博弈对抗策略的求解本质是一个流https://blog.sciencenet.cn/home.php?mod=space&uid=3472670&do=blog&id=1422698
4.深度学习难分样本挖掘(HardMining)数据派关键是找出影响网络性能的一些训练样本,针对性的进行处理。 简单来说就是把难分的样本,剔除出来,放到另外一个地方里面。最后将难分样本,给负样本,加强训练分类器。但是,这样又会造成数据不平衡的问题,下面会讲到。 03、方法:离线和在线 在样本训练过程中,会将训练结果与GroundTruth计算IOU。通常会设定一个阈值(0.5https://www.shangyexinzhi.com/article/4713934.html
5.粗排优化探讨得物技术离线在线一致性分析 待补充实际效果 四 样本设计 粗排相较于精排样本选择偏差(SSB)的问题更加严重,借鉴召回经验,可以通过适当采样减少偏差。采样设计的目的也是希望离线训练样本尽可能与线上分布一致。 样本选择方法 负样本可选范围: 曝光未点击样本; 全库除转化外样本; https://blog.itpub.net/70027824/viewspace-3000851/
6.基于Kmeans聚类的CSI室内定位AET对于单个天线对得到fin,对于m个天线的每个天线对使用Kmeans算法,得到训练向量: 2.2 在线定位阶段 在线定位阶段采用与离线训练阶段相同的方法提取到m个天线对的指纹: 将提取到的指纹与训练阶段建立的数据库中的指纹作比较,即将获取到的第i个天线对的指纹矩阵与数据库中的第i个天线对的指纹矩阵,进行两个指纹矩阵中任http://www.chinaaet.com/article/3000057028
7.离线学习(训练)和在线学习(训练)在线训练和离线训练文章浏览阅读1.4w次,点赞4次,收藏4次。https://blog.csdn.net/a133521741/article/details/79221015_在线训练和离线训练https://blog.csdn.net/sinat_40966515/article/details/100073130
8.编程入门实战训练CodeCamp在线编程实战CodeCamp, freeCodeCamp, 在线编程实战训练,是一个以操作实验为基础的编程训练营,它包含了HTML,CSS,Javascript,jQuery,Bootstrap等编程语言编程闯关,让你在实践中提升自己的编程能力。https://www.w3cschool.cn/codecamp
9.强化学习离线模型离线模型和在线模型推荐系统里非常常见,并且往往非常的隐蔽的一种数据分布不一致的情况被称之为冰山效应,也就是说离线训练用的是有偏的冰山上的数据,而在线上预估的时候,需要预测的是整个冰山的数据,包括大量冰面以下的数据!我们看下面这张图。左边是我们的Baseline,绿色的表示正样本,红色表示负样本,灰色部分表示线上由于推荐系统的“https://blog.51cto.com/u_14499/11815202
10.使用Merlin分层参数服务器扩展推荐系统推理推荐模型有两种培训模式:离线和在线。在线培训将新的模型更新部署到实时生产中,对于推荐的有效性至关重要。HPS 雇佣无缝更新机制通过Apache Kafka– 基于消息缓冲区连接训练和推理节点,如图 5 所示。 图5. HugeCTR 推理在线更新机制 更新机制有助于 MLOps 工作流,支持在线/频繁以及离线/再培训更新,无需停机。它还通https://www.eet-china.com/mp/a159829.html
11.推荐系统完整的架构设计和算法(协同过滤隐语义)其中,数据上报和离线训练组成了监督学习中的学习系统,而实时计算和 A/B 测试组成了预测系统。另外,除了模型之外,还有一个在线存储模块,用于存储模型和模型需要的特征信息供实时计算模块调用。图中的各个模块组成了训练和预测两条数据流,训练的数据流搜集业务的数据最后生成模型存储于在线存储模块;预测的数据流接受业务https://cloud.tencent.com/developer/article/1508050
12.人工智能团队研究成果在TKDE发表:样本高效的离线转在线强化学习离线强化学习,即智能体从先前收集的数据集中学习的过程,已被广泛研究并在机器人控制、推荐系统、智慧医疗等领域取得了巨大成功。然而,由于受到离线数据集质量的限制,离线强化学习智能体的性能通常是次优的。因此,在部署之前,通常需要进一步通过在线交互对预训练的离线强化学习智能体进行微调。 http://icfs.jlu.edu.cn/info/1007/3101.htm
13.2020年最值得收藏的60个AI开源工具语言&开发李冬梅SiamMask 是一款实时在线目标跟踪与目标分割统一框架。技术简单、通用、快速高效。它可以对目标实时跟踪。此款库还包含预训练模型。 项目地址:https://github.com/foolwood/SiamMask DeepCamera 世界首个自动机器学习深度学习边缘 AI 平台 ARM GPU 上的深度学习视频处理监控,用于人脸识别以及更多方法。将数码相机变成人工https://www.infoq.cn/article/2uabiqaxicqifhqikeqw