广告深度学习计算:多媒体AI推理服务加速利器high_service

本文作者:雨行、列宁、阿洛、腾冥、枭骑、无蹄、逍城、少奇、持信、云芑

本文是上一篇内容《广告深度学习计算:阿里妈妈智能创意服务优化》工作的进一步延伸,欢迎阅读交流。

概述

随着视频、文案、图文等多媒体模型在阿里妈妈智能创意、内容风控等业务场景的广泛落地,在提升业务效果的同时,也为在线部署带来了诸多新的挑战。本文聚焦于多媒体AI服务场景下,提升GPU利用率以及避免GPU资源浪费这一核心问题,分析了用Python上线多媒体AI推理服务GPU利用率低的原因,以及在线流量波动造成的资源分配困难,并给出了我们的解决方案 high_service。

一、多媒体AI服务特点及挑战

1. 多媒体业务场景简介

多媒体AI服务涉及到了智能视频制作、图文创意、智能文案、违规内容检测等众多场景,如:

  • 微视频,通过多模态检索技术从长视频中裁剪出3-10秒最吸引用户眼球的主要内容,或者使用剧本自动生成视频,投放到搜索、推荐等场景,留住用户并促成点击。

  • 智能抠图,从商品主图中选取出主体商品或者模特,作为其他智能创意服务的素材。

c8fa9e11af4e57840c096bd64b2f95ba.png
  • 智能文案,根据不同载体(图片、视频、信息流卡片等)以及不同媒体的风格,为商品生成最恰当的文案。下表展示了我们为淘宝和头条自动生成的不同风格的文案。

dbc4136b3294159453a6c8f6ef4165d0.png

  • 违规内容检测,对违规词以及违规图片进行筛查过滤,规避风险。

2. 多媒体AI服务部署挑战

2.1 “成也Python,败也Python”

对于Python的态度,可以说是“又爱又恨”。在模型训练方面,Python因其动态语言特性,以及丰富的数据处理库(如Numpy/Pandas等),成为算法同学的首选。尤其是随着越来越多的顶会文章采用PyTorch,使得Python+PyTorch组合几乎成为多媒体模型训练的标配。

但是作为线上推理服务,Python由于全局解释器锁(下文简称GIL锁),导致单进程服务模式无法充分利用多核CPU的处理能力,GPU Kernel Launch线程频繁被其它线程中断,使得Cuda Cores得不到足够的任务而空闲,GPU利用率相应的也就很低。

既然单进程的方式不行,那么Python多进程可以吗?答案是部分可以,因为多进程部署需要为每个进程加载一份GPU模型,而这无疑会受到GPU显存的约束。我们知道,随着多媒体模型在图片分类、目标检测、图像分割等领域的表现越来越亮眼,其代价便是模型的复杂度与模型参数的几何级增加。除了模型参数占显存外,中间运算结果以及Cuda Context内容(约占用几百MB显存)均需要占用显存资源。此外,一个服务会往需要多个模型共同协作,这使得每个进程加载一份模型的方式不可行。下表显示了我们部分多媒体服务,在单进程模式下对于显存的需求。

7de8393938194a16db512a9a4b7eb62b.png

但是多媒体场景下,Python转C++困难很大。原因有几项:

  • 视频处理逻辑处理复杂。视频数据需要经过抽帧采样、尺寸变化、通道转换、归一化等复杂的预处理,模型输出的图片还要合成视频、FFmpeg转码等后处理。

  • C++图片处理库不如Python完善,很多Numpy和Python的函数需要手写C++实现,效率低下,开发周期长。

  • C++与Python结果一致性很难保证,调试困难。

正是因为上述Python转C++的困难,使得“Python训练+Python线上推理”的模式,成为特别迫切的需求。这种模式不仅方便算法同学自助上线,更加快了算法迭代更新的速度,保证了最新的研究成果能够及时落地。

2.2 流量不均匀

除了Python带来的问题外,流量不均匀也为多媒体AI落地带来了诸多挑战,包括但不限于

  • 流量潮汐现象严重,波动很大,无法按峰值流量准备机器

在线服务与离线训练任务的一个很大不同,就是流量波动非常大。离线训练由于是算法同学主动发起的,因此通过合理的任务调度,可以保证GPU时刻都有任务运行。但是对于在线服务来说,其流量来源于用户的操作。因此流量波动很大,主要体现在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值