好久之前,我仍是个保洁员,直到有一天上帝说不了解端智能的保洁员不是好保洁员,因而我向隔壁小哥偷学了端智能这项技术,写下了这篇文章,若有错误,请找隔壁小哥~算法
本文将谈谈端智能以及端智能在西瓜视频的发展。你可能已经据说过端智能,这犹抱琵琶半遮面的样子真是使人心痒,今天咱就扯下它的面纱看看。后端
可能有不少人纳闷不是要聊端智能么?怎么还牵扯到边缘计算了,莫不是为了凑字数?实际上从云智能到端智能的延伸实际上也是云计算到边缘计算的扩展。咱们知道云计算自身有着许多的优势,好比庞大的计算能力,海量的数据存储能力等等。如今不少对外提供服务的 APP 本质上都是依赖各类各样的云计算,好比直播平台、电商等等。但新型用户体验追求更加及时,稳定性的服务,这就促使咱们想要将服务尽量的部署在物理设备所在位置,最终推进了边缘计算的发展。缓存
从云智能到端智能,本质也是如此。以无人驾驶为例,总不能在驾驶过程因为网络波动致使汽车中止对路况的计算吧,或者说在万分之一秒内还不肯定是要刹车仍是加速吧?安全
那究竟什么是边缘计算呢?边缘计算与所谓的端智能又有什么联系?继续往下看~性能优化
边缘计算是一种致力于使计算尽量靠近数据源,以减小延迟和带宽使用的网络概念。一般来讲边缘计算意味着在云端运行更少的进程,将更多的进程移动到本地设备,好比用户的手机,IOT 设备或者一些边缘服务器等。这样作的好处就是,将计算放到网络边缘能够最大程度减小客户端和服务器之间的通讯量及保持服务稳定性。服务器
不难发现,边缘计算本质是一种服务,相似于咱们如今的云计算服务,但这种服务很是靠近用户,可以给用户提供更快速的响应,简单点说就是干啥啥快。markdown
须要注意的是,边缘计算并不是用来取代云计算的,若是说云计算更注重把控全局,那边缘计算则聚焦于局部,本质上边缘计算是对云计算的一种补充和优化,能够帮咱们从数据源头近乎实时地解决问题,凡是在须要减小时延或追求实时目标的业务场景下,都有它的用武之地,好比:计算密集型工做,人工智能等场景。这里的人工智能的场景就涉及到咱们下面要说的端智能了。网络
对于人工智能,想必咱们已经见怪不怪了,尤为是以头条/抖音/快手为表明的应用,都是将机器学习用到极致的产品,此外像扫地机器,无人车等硬件设备也是人工智能落地的最佳示例。那咱们要说的端智能又是什么角色呢?架构
和从云计算到边缘计算的发展相似,人工智能的发展也经历从云到端的过程,咱们常说的端智能实际上就是把机器学习放在端侧去作。这里的端侧是想相对于云端而言的,除了咱们常见的智能手机外,端侧设备也包括各类 IOT 设备,嵌入式设备等,如语言翻译器、监控摄像头等,固然无人车也属于该领域。框架
从 2006 年开始,人工智能进入第三次发展阶段,并以 AlphaGo 前后打败李世石和柯洁宣告新时代的到来,这背后得益于:
与此同时,端侧设备一样在算力,算法及框架有了日新月异的发展:
固然,咱们都知道最终驱动云智能和端智能发展的根本动力是实实在在的产品需求。从端智能的角度来看,由需求驱动的 AI 场景应用已经在软硬件多方面成为产品的主要卖点,好比手机摄像能力的提高,除了摄像头等硬件的发展外,各类图片处理算法的发展也功不可没;再像抖音、快手等应用的各类模型特效,在简化创做的同时也极大改善了产品的形态。
要知道为何作端智能本质就是须要搞清楚当前云智能面临什么样的问题。正如以前所说,云智能的发展创建在现代需求之上,它主要的优点是:
但这种依赖云端的架构方式也有着相应的缺陷:
而端智能的优点刚好能做为云智能劣势的补充:
除此以外,因为数据和生产和消费都是在端侧完成,对于敏感数据能够保证隐私性,规避法律风险;另外咱们能够进行更精细化策略,有可能实现真正的实现千人千面。
前文咱们说了端侧智能可以补充云智能的几个缺点,但它也有着本身的问题:
在这两个条件的制约下,端智能每每意味着是只作推理,即云端训练模型下发到本地后作推理。
固然随着技术的演进,如今咱们也开始探索联邦学习,它本质上是一种分布式机器学习技术,主要但愿在保证数据隐私安全及合法合规的状况下,能够有效解决数据孤岛问题,让参与方在不共享数据基础上实现联合建模,提高模型的效果。在这里,端上能作的就不只仅是推理了还有学习过程。
以前有同窗提到过既然 5G 又快又好,那彻底不必搞端智能啊。这里简单谈谈我本身的理解。(若有不对之处,请找隔壁小哥)
5G 的高速链接和超低时延,目的在于帮助规模化实现分布式智能,也就是云-端
智能一体化。来具体解释下:5G 给端和云之间的链接提供了更稳定,更无缝的的支撑,此时网络就再也不是端云互通的瓶颈了,但伴随万物互联时代的到来,数据规模将会进一步暴增,进入超大数据规模的时代,此时服务端的算力就会成为瓶颈,那么此时在端侧对于数据的预处理和理解也就更加剧要,这就须要端智能的介入。
举个安防领域的例子,如今不少家庭摄像头都支持云存储,若是咱们但愿只在有人活动的时候才会将视频保存到云端,该怎么作呢?最好的方式是先在端侧借助 AI 进行图像识别,而后将包含人的视频片断上传到云端,而不是先将全部视频上传到云端再进行图像处理(裁剪掉无用的视频片断),前者既能够节省流量带宽,又能够节省云侧算力,这里端侧对视频的处理也就是咱们刚才说的对数据的预处理和理解。
对于 AR 来讲,端智能为 AR 提供交互能力,5G 则能知足 AR 须要的网络传输能力,在这二者的加持下,具有互动性,高品质的 AR 技术会促进真实世界与虚拟环境的融合。
上述内容纯粹就是简单介绍下端智能的前世此生,口水内容,简单看一分钟也就行。光说不练假把式,下面就简单介绍下西瓜在端智能上的探索及落地,不少同窗知道咱们在搞,但不知道搞了个啥,今天咱就揭开这道神秘的面纱。首先来看咱们西瓜为啥要作端智能。
在后文展开以前必须得先回答一个问题:西瓜为何要作端智能?或者说,西瓜对于端智能的定位是如何的?
介于上述几个因素,咱们在用传统客户端技术解决问题的同时也对端侧 AI 能力有了兴趣,并于 20 年 8 月份开始调研,最终咱们确立下两大目标:策略精细化和开源节流。
在这两个目标的指导下,进一步结合西瓜的需求,咱们主要聚焦在下述两个领域:
关于西瓜为何下手端智能,大概是说明白了。但整体该怎么下手落地呢?从表面上看无非就是将原有服务端的体系搬到客户端来作,变化的只是先后端而已,但实际上从云到端的迁移,不但涉及端云技术链路的变化,并且更增强调不一样领域工程师的合做:从客户端角度出发,咱们关注工程架构及交互,但从算法角度来看,更加关注的数据和模型,这二者关注点的不一样就决定了在端智能落地过程会存在比较大的困难。
首先来简单了解下端智能从云到端的几个阶段:从云到端,主要涉及算法、模型训练、模型优化、模型部署以及端侧推理预测。按照参与方来看主要涉及算法工程师和客户端工程师,按照环境则能够分为云端工程和客户端工程,以下所示:
简单归纳一下流程就是:首先算法工程师针对特定场景设计算法并训练模型,而后对该模型进行优化,在下降模型体积的同时提升算法&模型执行效率,接下来在模型部署阶段将优化过的模型转换为端侧推理引擎支持的格式并部署到移动设备上,客户端工程师针对该场景作算法移植及业务改造,并在合适的时机经过推理引擎加载模型并执行推理预测。
上述咱们用一句话归纳了端智能落地的流程,但实际过程当中要远比上图提到的更复杂:
如上图所示,不难发现端智能落地链路整体比较长,任何一个节点出现问题都会涉及比较长的排查路线;须要算法工程师和客户端工程师的高度协做,但因为算法和客户端两侧的技术栈差别比较大,知识领域也存在比较大的差别,所以协做成本其实蛮大:
除此以外,端侧推理引擎如何兼容复杂的端侧设备,保证高可用性,实现一体化监控和模型部署等等也是端智能在落地过程要重点解决的问题。
前文咱们提到端智能在落地过程当中的三个问题:链路长,协做成本高,推理部署复杂。来具体分析看下问题及相应的解决策略:
为何是 ByteNN?
ByteNN 做为抖音、TikTok 的统一 AI 基础引擎库,已经在不少产品接入了,不须要额外增长体积;
针对 ARM 处理,Adreno/Mali GPU,Apple GPU 进行定向性能调优,支持多核并行加速,性能 OK;
终端兼容性广,覆盖了所有 Android 设备及 iOS,可用性较高;
支持 GPU、GPU、NPU、DSP 等处理器,有厂商加持,通用性不成问题。
阻碍在面前的三座大山已然明了,要作的事情也很清晰。对于端智能,咱们和平台 Client Ai 团队的想法不谋而合,开始共同推进端智能在字节业务策略上的探索及落地。
借助 Pitaya 方案,咱们能够将更多的精力放在算法设计和业务场景挖掘中。Pitaya 是啥呢?简单来讲,它是将云上 MLX 环境和端侧环境打通,将算法和模型统一以算法包的形式部署到端上,并对端侧特征工程予以支持;同时端侧内部集成运行容器,并驱动推理引擎(ByteDT、ByteNN)工做的一整套方案,其基本架构大概以下:
如今总体链路简化了很多,咱们能够更聚焦于业务场景的算法设计了,同时借助于高效的运行容器,能够实现算法包的快速部署,提升总体的迭代效率,端云之间的联动性更强:
西瓜视频横屏内流在交互上能够理解为是一个横屏版的抖音,是西瓜的核心消费场景,以下图所示:
做为西瓜视频的核心场景,其播放体验相当重要。为了实现较好的视频起播效果,该场景上了视频预加载策略:在当前视频起播后,预加载当前视频后的 3 个视频,每一个 800K。
800K 是实验值,旨在不影响卡顿的状况下尽量的下降成本,众所周知,预加载在显著提升播放体验的同时也会带来带宽成本上的提高。对于 800K 你们可能没有直观感觉,以 720P 视频为例,假设平均码率是 1.725Mbps,那么 800K 的视频大小也就是 4 秒左右。
方便起见,咱们经过一个图来展现 3*800 的流程:
不难发现,只有在首个视频的状况下才会一次性预加载三个视频,再日后就变成了增量预加载 1 个视频的操做,端上始终保留 3 个视频的预加载。
上述方案足够粗暴简单,但也存在很多局限,即带宽和播放体验平衡不够:
此外上线预加载方案的时候,咱们的数据分析师也提到:减小预加载大小虽然能够下降成本,可是卡顿劣化严重,短时间采用 3*800K 的固定方案,长期推进动态调整预加载大小方案上线。
除了传统对预加载任务管理机制的优化外,咱们开始从新思考如何衡量预加载的有效任务率?
最理想的状况是预加载的大小和播放大小一致,这样视频预加载的效率就是 100%。若是咱们预加载了 1000K,但用户只看了 500K,那预加载的效率就是 50%,这浪费的 500K 可都是金灿灿的 💰;最糟糕的状况是咱们预加载 1000K,但用户压根没看,很差意思,此时预加载的效率就是鸭蛋了,咱们白白浪费了大把的钞票。如今咱们来具体定义下用来评估预加载效率的公式:
不难发现,最理想的预加载策略就是使预加载大小和播放大小尽可能的匹配,用户在起播阶段会看多少,咱们就预加载多少,这样既能提升播放体验,又能减小带宽浪费。
那如何来作呢?咱们但愿基于端侧 AI 的能力,对用户操做行为进行实时分析,进而实现调整预加载策略,在提升用户播放体验的同时,避免带宽浪费。
如上述公式所示,提升视频预加载效率的关键就是预测用户播放时长,使视频预加载的大小和视频播放大小尽量的接近。但预估每一个视频用户会看多久是一件很难的事情,会有不少个因素,好比用户对视频的感兴趣程度,心理状态等等。
抛开这些复杂的因素和变量,咱们来从新思考视频预加载的行为和用户的浏览行为之间的相关性。咱们假设存在两种典型行为的用户:
若是咱们在端上可以根据用户的浏览行为,经过模型判断出用户在接下来的浏览中是倾向于那种行为的话,那是否是可帮助咱们进一步来优化视频预加载策略了呢?此时预加载的流程就变成了以下所示:
除了经过端智能的方案提升预加载的效率,实现更精准的预加载调度外,在端上也有配套的业务调整和优化方案,好比聚合推理参数,模型触发时机调整,预加载任务管理完善等手段,二者互为补充。其中涉及到端智能的流程以下所示:
特征工程
咱们经过线上用户埋点数据,提取横屏内流相关埋点数据进行标记并进行相关性分析,屡次迭代后最终筛选出与用户浏览行为的相关特征。此外,借助 Pitaya 端上特征的能力,能够方便的从不一样的数据源中获取实时特征,并将其转化成模型输入的数据。
算法选型
机器学习的算法不少,从传统的的决策树、随机森林到深度神经网络,均可以用来实现端侧 AI 的能力。但须要根据端侧设备的状况,在能知足场景效果和需求的前提下,重点考虑模型的体积和性能:模型体积越小越好,性能越高越好。好比在该场景下,用 DT 和 NN 均可以对用户模式进行分类,但要综合评估模型体积,性能和效果,最后决定采用那种算法。
推理预测
首先来看决策的时机,每滑到一个视频而且在该视频(非首刷视频)起播后触发算法包,等待决策结果并调度后续预加载任务。简要流程以下所示:
在触发推理时,主要依赖两部分数据:一种是已经观看过视频的数据,另外则是后续未观看视频的详情数据。前者是 Pitaya 主动经过埋点日志获取,后者则是须要业务方聚合后主动透传。同时端上也须要考虑容错机制,以便在算法包异常和推理失败的状况及时回滚策略。
预加载任务调度
决策结果给出后,咱们会根据最近两次推理结果进行调度,主要是实现对预加载任务数量的调整(保留有效任务)及每一个预加载视频大小的调整(增量调整)。此处涉及业务细节较多,就不作过多解释了。
端侧性能监控
除了端侧常规的监控外(性能、业务指标),还涉及模型指标的监控,好比执行成功率、推理耗时、PV/UV,固然也包括 accuracy 等模型的效果指标。
西瓜从去年 12 月份开始落地该场景,到明确拿到收益并全量上线,最终大概历 1.5 个双月,加上春节假期得有 2 个双月了,这是为啥呢?从开始的实验大规模负向到正向收益,咱们遇到了那些问题?
推理耗时
前期屡次实验中(v1.0~v3.0)咱们发现智能预加载组比线上策略在首帧耗时等指标上有劣化,好比首帧耗时上升 2ms 等。在经过各类技术手段及数据分析后,咱们最终定位出端上聚合推理参数、推理耗时等因素会间接影响大盘指标。为此,咱们在端上提出了多种优化手段,如步长推理、异步调度、首推预热、模型优化等方案,最终打平了相关指标,并肯定显著收益。
带宽成本
带宽成本核算受多个因素影响,容易存在误差,尤为是在像西瓜视频这么复杂的业务场景下,如何准确衡量该方案带来的带宽收益很是复杂。咱们在播放器及视频架构团队多位同窗的支援下,最终明确实验组(95 分位)带宽成本比线上组平均下降 1.11%。
峰值模型
不少状况下,用户的习惯是呈现阶段性,为了咱们也定向提出峰值模型,用于在用户使用的高/低峰时间段内作出更细致化的决策。(限于业务相关性太大,具体就不作解释了。有想了解的同窗能够加入字节一块儿作同事!)
经过一系列的周期实验和策略验证,最终明确了智能预加载的收益:
除此以外,实验组其它指标也有正向收益,但限于不够显著,咱们在此就不一一说明了。
当前智能预加载在 Android 端已经全量上线,同时 iOS 端也在接入过程当中。对于西瓜视频而言,智能预加载只是个起点,咱们正在探索更多场景的可能性,为用户提供更智能化的播放体验。
不管是云智能仍是端智能,最终带给咱们的是解决问题的新思路,坦率的说我也不知道端智能对将来意味着什么,但当下肯定的是咱们能够更好的将它和业务场景结合在一块儿,寻求更好业务成果。
端智能也不是银弹:不是说咱们用了它就完事大吉,就必定能够拿到很好的结果。要想真正的发挥业务价值,更好的服务用户,须要咱们更多的思考,将端智能放在该放的地方。
对于不少客户端工程师而言,可能会存在疑问,咱们应该如何面对端智能,或者说它和咱们以前解决问题的方式有什么不一样?端智能不是一个从 0 到 1 的新生物,它只是云智能发展到如今的天然延伸而已,其背后的体系仍是机器学习那一套,对于客户端而言,它提供了一种全新的思考方式:从规则驱动到数据驱动,再到模型。咱们能够借助它在适当的业务场景寻求结合点,最终得到更好的成果。
那对于客户端工程师而言,该如何切到这个领域呢,或者说,若是咱们想了解端智能能够作点什么?
正如咱们上面不少次提到的同样,端智能只是云智能发展的天然延伸,其背后仍然基本的机器学习,对于大多数的客户端工程师而言,咱们的目标不是成为机器学习领域的专家,能够不去深刻研究各类算法模型,但系统的学习下理论只是仍是颇有必要的:
系统性的知识基本上能够经过阅读该领域中的经典书籍而得到。除此以外还要多动动手,咱们能够先找几个示例,一步一步把训练好的模型经过量化处理后移植到客户端上去跑跑,也能够尝试在开源项目的基础上去修改算法&模型,好比尝试手写数字识别,进行人脸检测等,固然也能够尝试下量化交易,用本身的作的模型预测股票价格(固然,赔了别找我 😁)。
端侧设备,尤为以手机为例更注重交互,且受硬件限制较多,好比电量,存储空间,算力等,这就意味着咱们的算法模型必需要具备很高的执行效率,同时模型体积不益过大,对应而来的就是性能优化在端智能领域一样很是重要。
对于大部分客户端工程师而言,除了传统的基于业务场景的优化方案以外,还可能涉及到推理优化和部署。对于推理优化,除涉及到模型、框架外,也有须要根据硬件进行优化的状况,好比 Neon/SSE/AVX 指令集优化、高通(Qualcomm GSP/GPU)、华为(Huawei NPU)等硬件加速技术。
不管是边缘计算仍是端智能,其载体不只仅是手机,还包含各类各样的嵌入式设备。好比像安防领域的指纹锁、监控摄像头、无人机等等。对于咱们而言,能够拿来练手的设备也不少,能够是树莓派,也能够是搭载 TPU 芯片 Coral 开发版以及英特尔 ®Movidius™ 神经计算棒等等,利用他们能够作出不少好玩的东西。
走过路过不要错过,如今进入广告时间,感谢两位”广告主“的打赏:直播中台和西瓜视频团队,来看看咱们最近招聘需求吧:
直播中台:咱们是负责为字节跳动旗下的全部 App 提供直播服务的团队,包括但不限于抖音、火山、今日头条、西瓜视频、皮皮虾、懂车帝、番茄小说、番茄畅听等。直播团队不只仅负责直播平台技术研发,为直播提供稳定的基础服务;还负责直播业务研发,致力于为用户提供最极致的直播体验。
若是你对技术充满热情,想要和咱们一块儿打造最极致的直播体验,欢迎加入直播中台,不管是社招大牛仍是 2022 届秋招新生,内推都可以联系邮箱:liudongdong.rd@bytedance.com,邮件标题:姓名-工做年限-直播中台-Android/iOS。
西瓜视频:欢迎加入字节跳动西瓜视频客户端团队,咱们专一于西瓜视频 App 的开发和技术建设,若是你也想一块儿攻克技术难题,迎接更大的技术挑战,欢迎加入咱们!西瓜视频客户端团队正在热招 Android、iOS 架构师和研发工程师,在北京、上海、杭州、厦门四地,社招、校招、实习均有职位开放,欢迎投递简历至邮箱:liaojinxing@bytedance.com,邮件标题:姓名-西瓜视频-工做地点-Android/iOS。