你竟然是这样的端智能?

很久以前,我还是个保洁员,直到有一天上帝说不了解端智能的保洁员不是好保洁员,于是我向隔壁小哥偷学了端智能这项技术,写下了这篇文章,如有错误,请找隔壁小哥~

本文将谈谈端智能以及端智能在西瓜视频的发展。你可能已经听说过端智能,这犹抱琵琶半遮面的样子真是令人心痒,今天咱就扯下它的面纱看看。

从云智能到端智能

可能有很多人纳闷不是要聊端智能么?怎么还牵扯到边缘计算了,莫不是为了凑字数?实际上从云智能到端智能的延伸实际上也是云计算到边缘计算的扩展。我们知道云计算自身有着许多的优点,比如庞大的计算能力,海量的数据存储能力等等。现在很多对外提供服务的 APP 本质上都是依赖各种各样的云计算,比如直播平台、电商等等。但新型用户体验追求更加及时,稳定性的服务,这就促使我们想要将服务尽可能的部署在物理设备所在位置,最终推动了边缘计算的发展。

从云智能到端智能,本质也是如此。以无人驾驶为例,总不能在驾驶过程由于网络波动导致汽车停止对路况的计算吧,或者说在万分之一秒内还不确定是要刹车还是加速吧?

那究竟什么是边缘计算呢?边缘计算与所谓的端智能又有什么联系?继续往下看~

边缘计算

边缘计算是一种致力于使计算尽可能靠近数据源,以减少延迟和带宽使用的网络概念。通常来说边缘计算意味着在云端运行更少的进程,将更多的进程移动到本地设备,比如用户的手机,IOT 设备或者一些边缘服务器等。这样做的好处就是,将计算放到网络边缘可以最大程度减少客户端和服务器之间的通信量及保持服务稳定性。

不难发现,边缘计算本质是一种服务,类似于我们现在的云计算服务,但这种服务非常靠近用户,能够给用户提供更快速的响应,简单点说就是干啥啥快。

需要注意的是,边缘计算并非用来取代云计算的,如果说云计算更注重把控全局,那边缘计算则聚焦于局部,本质上边缘计算是对云计算的一种补充和优化,可以帮我们从数据源头近乎实时地解决问题,凡是在需要减少时延或追求实时目标的业务场景下,都有它的用武之地,比如:计算密集型工作,人工智能等场景。这里的人工智能的场景就涉及到我们下面要说的端智能了。

端智能的本质

对于人工智能,想必我们已经见怪不怪了,尤其是以头条/抖音/快手为代表的应用,都是将机器学习用到极致的产品,此外像扫地机器,无人车等硬件设备也是人工智能落地的最佳示例。那我们要说的端智能又是什么角色呢?

和从云计算到边缘计算的发展类似,人工智能的发展也经历从云到端的过程,我们常说的端智能实际上就是把机器学习放在端侧去做。这里的端侧是想相对于云端而言的,除了我们常见的智能手机外,端侧设备也包括各种 IOT 设备,嵌入式设备等,如语言翻译器、监控摄像头等,当然无人车也属于该领域。

从 2006 年开始,人工智能进入第三次发展阶段,并以 AlphaGo 先后战胜李世石和柯洁宣告新时代的到来,这背后得益于:

  • 大数据的发展及硬件算力提升,CPU、GPU 及专用计算单元;

  • 深度学习算法及框架不断演进,从 Torch、Caffe 到 TensorFlow、PyTorch 等。

与此同时,端侧设备同样在算力,算法及框架有了突飞猛进的发展:

  • 算力:CPU、GPU 性能提升,手机算力不断增长,以及专门用于 AI 的神经网络处理芯片逐渐成为标配,已经能够不同程度上支持算法模型的运行;

  • 框架:面向移动端的机器学习框架的诞生让我们能更轻松的在端侧应用机器学习。在手机侧,Apple 的 Core ML,Google 的 NNAPI 提供了系统级别的支持,除此之外业内也有很多优秀的端侧框架:TensorFlow Mobile/Lite、Caffe2、NCNN、TNN、MACE、Paddle&Paddle Lite、MNN 及 Tengine 等;

  • 算法:模型压缩技术不断发展,其中量化已经非常成熟,基本能够实现在不降低精度的情况下将模型缩小为原来的 1/4~1/3;此外,针对端侧的算法模型在不断的优化过后,架构设计变得越来越成熟,对于端侧设备的兼容性也愈加友好。

当然,我们都知道最终驱动云智能和端智能发展的根本动力是实实在在的产品需求。从端智能的角度来看,由需求驱动的 AI 场景应用已经在软硬件多方面成为产品的主要卖点,比如手机摄像能力的提升,除了摄像头等硬件的发展外,各种图片处理算法的发展也功不可没;再像抖音、快手等应用的各种模型特效,在简化创作的同时也极大改善了产品的形态。

为什么要做端智能?

要知道为什么做端智能本质就是需要搞清楚当前云智能面临什么样的问题。正如之前所说,云智能的发展建立在现代需求之上,它主要的优势是:

  • 面向海量数据,这意味我们能通过不断的累积数据,寻求问题的最优解;

  • 设备资源充足,算力强大;

  • 算法规模庞大,空间不受限制;

但这种依赖云端的架构方式也有着相应的缺陷:

  • 响应速度:依赖于网络传输,稳定性和响应速度无法得到保障,对于实时性要求高的情况而言,该问题近乎于无解;

  • 非实时性,脱离即时 Context,用户敏感度差;

而端智能的优势恰好能作为云智能劣势的补充:

  • 响应速度快:在端侧直接获取数据进行处理,不依赖网络传输,稳定性和响应度 OK;

  • 实时性高:端侧设备实时触达用户,不存在中间商赚差价,能够实时感应用户状态;

除此之外,由于数据和生产和消费都是在端侧完成,对于敏感数据可以保证隐私性,规避法律风险;另外我们可以进行更精细化策略,有可能实现真正的实现千人千面。

端智能的局限

前文我们说了端侧智能能够补充云智能的几个缺点,但它也有着自己的问题:

  1. 和云侧硬件设备相比,端侧资源&算力相对有限,无法进行大规模持续计算,模型不宜过于复杂;

  2. 端侧往往只是单用户数据,数据规模小,全局最优解难寻。此外由于端侧应用生命周期不可控,数据周期往往较短。

在这两个条件的制约下,端智能往往意味着是只做推理,即云端训练模型下发到本地后做推理。

当然随着技术的演进,现在我们也开始探索联邦学习,它本质上是一种分布式机器学习技术,主要希望在保证数据隐私安全及合法合规的情况下,可以有效解决数据孤岛问题,让参与方在不共享数据基础上实现联合建模,提升模型的效果。在这里,端上能做的就不仅仅是推理了还有学习过程。

5G 与端智能

之前有同学提到过既然 5G 又快又好,那完全没必要搞端智能啊。这里简单谈谈我自己的理解。(如有不对之处,请找隔壁小哥)

5G 的高速连接和超低时延,目的在于帮助规模化实现分布式智能,也就是云-端智能一体化。来具体解释下:5G 给端和云之间的连接提供了更稳定,更无缝的的支撑,此时网络就不再是端云互通的瓶颈了,但伴随万物互联时代的到来,数据规模将会进一步暴增,进入超大数据规模的时代,此时服务端的算力就会成为瓶颈,那么此时在端侧对于数据的预处理和理解也就更加重要,这就需要端智能的介入。

举个安防领域的例子,现在很多家庭摄像头都支持云存储,如果我们希望只在有人活动的时候才会将视频保存到云端,该怎么做呢?最好的方式是先在端侧借助 AI 进行图像识别,然后将包含人的视频片段上传到云端,而不是先将所有视频上传到云端再进行图像处理(裁剪掉无用的视频片段),前者既可以节省流量带宽,又可以节省云侧算力,这里端侧对视频的处理也就是我们刚才说的对数据的预处理和理解。

对于 AR 来说,端智能为 AR 提供交互能力,5G 则能满足 AR 需要的网络传输能力,在这两者的加持下,具备互动性,高品质的 AR 技术会促进真实世界与虚拟环境的融合。

西瓜为什么做端智能?

上述内容纯粹就是简单介绍下端智能的前世今生,口水内容,简单看一分钟也就行。光说不练假把式,下面就简单介绍下西瓜在端智能上的探索及落地,很多同学知道我们在搞,但不知道搞了个啥,今天咱就揭开这道神秘的面纱。首先来看我们西瓜为啥要做端智能。

在后文展开之前必须得先回答一个问题:西瓜为什么要做端智能?或者说,西瓜对于端智能的定位是如何的?

  • 西瓜视频作为一款服务于广大中长视频消费用户的产品,为了满足不同细分群体的需求必然要进行更精细化的产品运营策略,但之前我们的的策略往往局限于服务端策略或者实验场景下得出的策略池,整个过程中客户端更多的作为策略的接受者,被动响应且实时性不够;

  • 随着西瓜视频品质化专项的不断推进,在很多场景下也取得了显著的收益,伴随而来问题就是简单易行的策略已经不再能满足我们的胃口,要想再取得收益需要更细致灵活的策略手段。

  • 西瓜视频一直在致力于为用户提供更优价值的内容,而播放作为西瓜核心功能,致力于为用户打造更加智能化的播放器,创造更好的视听环境,这无疑对我们客户端播放策略上提出了更高的要求。

  • 对于视频类产品而言,带宽成本不容小视,我们希望在不影响播放体验的同时,能尽量的减少无用带宽的浪费。

介于上述几个因素,我们在用传统客户端技术解决问题的同时也对端侧 AI 能力有了兴趣,并于 20 年 8 月份开始调研,最终我们确立下两大目标:策略精细化和开源节流。

在这两个目标的指导下,进一步结合西瓜的需求,我们主要聚焦在下述两个领域:

  • 业务领域:充分发掘相关消费侧(播放器)和创作侧可优化决策点,降低业务成本,打造更智能化的决策体系;个别场景借助端侧 AI 能力打造更好的产品功能;

  • 技术领域:尝试端侧 AI 能力和稳定性/编译优化结合,自动分析并追踪相关异常链;尝试建立端侧特征库,实现热点功能/插件调度决策。

西瓜端智能

关于西瓜为什么下手端智能,大概是说明白了。但总体该怎么下手落地呢?从表面上看无非就是将原有服务端的体系搬到客户端来做,变化的只是前后端而已,但实际上从云到端的迁移,不但涉及端云技术链路的变化,而且更加强调不同领域工程师的合作:从客户端角度出发,我们关注工程架构及交互,但从算法角度来看,更加关注的数据和模型,这两者关注点的不同就决定了在端智能落地过程会存在比较大的困难。

基本流程

首先来简单了解下端智能从云到端的几个阶段:从云到端,主要涉及算法、模型训练、模型优化、模型部署以及端侧推理预测。按照参与方来看主要涉及算法工程师和客户端工程师,按照环境则可以分为云端工程和客户端工程,如下所示:

简单概括一下流程就是:首先算法工程师针对特定场景设计算法并训练模型,然后对该模型进行优化,在降低模型体积的同时提高算法&模型执行效率,接下来在模型部署阶段将优化过的模型转换为端侧推理引擎支持的格式并部署到移动设备上,客户端工程师针对该场景做算法移植及业务改造,并在合适的时机通过推理引擎加载模型并执行推理预测。

三座大山

上述我们用一句话概括了端智能落地的流程,但实际过程中要远比上图提到的更复杂:

如上图所示,不难发现端智能落地链路总体比较长,任何一个节点出现问题都会涉及比较长的排查路线;需要算法工程师和客户端工程师的高度协作,但由于算法和客户端两侧的技术栈差异比较大,知识领域也存在比较大的差异,因此协作成本其实蛮大:

  • 客户端工程师对机器学习的算法和原理相对较少,这就意味着在很多时候客户端把这块当做黑盒,无法针对端侧设备的情况和业务逻辑给出一定的参考意见,也无法有效发现模型推理异常问题,对总体的运行结果不可预期;而如果涉及到算法移植这块,问题就更多了,鸡同鸭讲的情况也不是不存在;

  • 算法工程师缺少对端侧设备的了解,端侧设备环境不如服务端环境单一,设备环境复杂度,如何针对端上设计出更高效的模型,避免侧推理影响到端侧性能指标是重中之重;算法移植到端侧是否符合预期也有待考量。

除此之外,端侧推理引擎如何兼容复杂的端侧设备,保证高可用性,实现一体化监控和模型部署等等也是端智能在落地过程要重点解决的问题。

端云一体部署

前文我们提到端智能在落地过程中的三个问题:链路长,协作成本高,推理部署复杂。来具体分析看下问题及相应的解决策略:

  • 对于算法设计到模型训练,公司内的 MLX 平台提供了模型训练到服务端部署的能力,但并不支持云上模型训练到部署端上的链路,我们需要将端上和 MLX 平台进行打通能够实现模型部署及模型格式转换;

  • 传统上端智能在端侧依赖算法和模型两部分数据,之前算法需要在云测设计完成后移植到端侧,存在一定的移植成本,且缺乏快速部署、更新的能力;同时算法和模型属于分离状态,在算法和模型多次迭代后,版本管理相对复杂,兼容性难以保障,如果算法和模型能够绑定动态下发,在减少协作成本的同时也可以简化链路;

  • 端侧环境复杂(尤其是 Android 设备,各种配置不一,硬件环境也更为复杂), 推理引擎至关重要。在开始落地之前,我们调研了 TensorFlow Lite、TNN、MNN 及 Paddle-Lite 以及公司内部的 ByteNN,最终我们选择 ByteNN。

为什么是 ByteNN?

  1. ByteNN 作为抖音、TikTok 的统一 AI 基础引擎库,已经在很多产品接入了,不需要额外增加体积;

  2. 针对 ARM 处理,Adreno/Mali GPU,Apple GPU 进行定向性能调优,支持多核并行加速,性能 OK;

  3. 终端兼容性广,覆盖了全部 Android 设备及 iOS,可用性较高;

  4. 支持 GPU、GPU、NPU、DSP 等处理器,有厂商加持,通用性不成问题。

阻碍在面前的三座大山已然明了,要做的事情也很清晰。对于端智能,我们和平台 Client Ai 团队的想法不谋而合,开始共同推动端智能在字节业务策略上的探索及落地。

借助 Pitaya 方案,我们可以将更多的精力放在算法设计和业务场景挖掘中。Pitaya 是啥呢?简单来说,它是将云上 MLX 环境和端侧环境打通,将算法和模型统一以算法包的形式部署到端上,并对端侧特征工程予以支持;同时端侧内部集成运行容器,并驱动推理引擎(ByteDT、ByteNN)工作的一整套方案,其基本架构大概如下:

现在整体链路简化了不少,我们可以更聚焦于业务场景的算法设计了,同时借助于高效的运行容器,可以实现算法包的快速部署,提高整体的迭代效率,端云之间的联动性更强:

西瓜视频智能预加载

西瓜视频横屏内流在交互上可以理解为是一个横屏版的抖音,是西瓜的核心消费场景,如下图所示:

作为西瓜视频的核心场景,其播放体验至关重要。为了实现较好的视频起播效果,该场景上了视频预加载策略:在当前视频起播后,预加载当前视频后的 3 个视频,每个 800K。

800K 是实验值,旨在不影响卡顿的情况下尽可能的降低成本,众所周知,预加载在显著提高播放体验的同时也会带来带宽成本上的提升。对于 800K 大家可能没有直观感受,以 720P 视频为例,假设平均码率是 1.725Mbps,那么 800K 的视频大小也就是 4 秒左右。

方便起见,我们通过一个图来展示 3*800 的流程:

不难发现,只有在首个视频的情况下才会一次性预加载三个视频,再往后就变成了增量预加载 1 个视频的操作,端上始终保留 3 个视频的预加载。

为什么是端智能的方案?

上述方案足够粗暴简单,但也存在不少局限,即带宽和播放体验平衡不够:

  • 某些情况下用户不会看完 800K 的缓存视频,简单浏览标题或前几秒内容后就划到下一个,造成带宽浪费;

  • 或者当用户想要认真观看视频时,有可能因为没有足够的缓存,容易导致起播失败或者卡顿,进而影响用户体验。

此外上线预加载方案的时候,我们的数据分析师也提到:减少预加载大小虽然可以降低成本,但是卡顿劣化严重,短期采用 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%。

峰值模型

很多情况下,用户的习惯是呈现阶段性,为了我们也定向提出峰值模型,用于在用户使用的高/低峰时间段内做出更细致化的决策。(限于业务相关性太大,具体就不做解释了。有想了解的同学可以加入字节一起做同事!)

实验收益

通过一系列的周期实验和策略验证,最终明确了智能预加载的收益:

  • 总带宽 -1.11%,预加载带宽 -10%;

  • 中视频播放失败率 -3.372%,未起播失败率 -3.892%,卡顿率 -2.031%,百秒卡顿次数 -1.536%,卡顿渗透率 -0.541%。

除此之外,实验组其它指标也有正向收益,但限于不够显著,我们在此就不一一说明了。

现状&总结

西瓜端智能现状

当前智能预加载在 Android 端已经全量上线,同时 iOS 端也在接入过程中。对于西瓜视频而言,智能预加载只是个起点,我们正在探索更多场景的可能性,为用户提供更智能化的播放体验。

无论是云智能还是端智能,最终带给我们的是解决问题的新思路,坦率的说我也不知道端智能对未来意味着什么,但当下确定的是我们可以更好的将它和业务场景结合在一起,寻求更好业务成果。

端智能也不是银弹:不是说我们用了它就完事大吉,就一定可以拿到很好的结果。要想真正的发挥业务价值,更好的服务用户,需要我们更多的思考,将端智能放在该放的地方。

新思路,新尝试

对于很多客户端工程师而言,可能会存在疑问,我们应该如何面对端智能,或者说它和我们之前解决问题的方式有什么不同?端智能不是一个从 0 到 1 的新生物,它只是云智能发展到现在的自然延伸而已,其背后的体系还是机器学习那一套,对于客户端而言,它提供了一种全新的思考方式:从规则驱动到数据驱动,再到模型。我们可以借助它在适当的业务场景寻求结合点,最终获得更好的成果。

那对于客户端工程师而言,该如何切到这个领域呢,或者说,如果我们想了解端智能可以做点什么?

了解基础

正如我们上面很多次提到的一样,端智能只是云智能发展的自然延伸,其背后仍然基本的机器学习,对于大多数的客户端工程师而言,我们的目标不是成为机器学习领域的专家,可以不去深入研究各种算法模型,但系统的学习下理论只是还是很有必要的:

  • 了解人工智能发展的过程,知道为什么当前深度学习成为主流方向;

  • 学习曾经流行的一些经典算法及能够解决的问题领域,你会发现之前一些问题的思考方式在当前深度学习中仍然是贯通的;

  • 了解常见的神经网络架构,知道不同网络层(比如 CNN 中的卷积层/池化层等)的作用,整体又是怎么组织起来的。

模型移植与实践

系统性的知识基本上可以通过阅读该领域中的经典书籍而获得。除此之外还要多动动手,我们可以先找几个示例,一步一步把训练好的模型通过量化处理后移植到客户端上去跑跑,也可以尝试在开源项目的基础上去修改算法&模型,比如尝试手写数字识别,进行人脸检测等,当然也可以尝试下量化交易,用自己的做的模型预测股票价格(当然,赔了别找我 ????)。

性能优化

端侧设备,尤其以手机为例更注重交互,且受硬件限制较多,比如电量,存储空间,算力等,这就意味着我们的算法模型必须要具有很高的执行效率,同时模型体积不益过大,对应而来的就是性能优化在端智能领域同样非常重要。

对于大部分客户端工程师而言,除了传统的基于业务场景的优化方案之外,还可能涉及到推理优化和部署。对于推理优化,除涉及到模型、框架外,也有需要根据硬件进行优化的情况,比如 Neon/SSE/AVX 指令集优化、高通(Qualcomm GSP/GPU)、华为(Huawei NPU)等硬件加速技术。

拥抱 AIOT

无论是边缘计算还是端智能,其载体不仅仅是手机,还包含各种各样的嵌入式设备。比如像安防领域的指纹锁、监控摄像头、无人机等等。对于我们而言,可以拿来练手的设备也很多,可以是树莓派,也可以是搭载 TPU 芯片 Coral 开发版以及英特尔 ®Movidius™ 神经计算棒等等,利用他们可以做出很多好玩的东西。

加入我们

走过路过不要错过,现在进入广告时间,感谢两位”广告主“的打赏:直播中台和西瓜视频团队,来看看我们最近招聘需求吧:

直播中台:我们是负责为字节跳动旗下的所有 App 提供直播服务的团队,包括但不限于抖音、火山、今日头条、西瓜视频、皮皮虾、懂车帝、番茄小说、番茄畅听等。直播团队不仅仅负责直播平台技术研发,为直播提供稳定的基础服务;还负责直播业务研发,致力于为用户提供最极致的直播体验。

如果你对技术充满热情,想要和我们一起打造最极致的直播体验,欢迎加入直播中台,无论是社招大牛还是 2022 届秋招新生,内推均可以联系邮箱:liudongdong.rd@bytedance.com,邮件标题:姓名-工作年限-直播中台-Android/iOS。

西瓜视频:欢迎加入字节跳动西瓜视频客户端团队,我们专注于西瓜视频 App 的开发和技术建设,如果你也想一起攻克技术难题,迎接更大的技术挑战,欢迎加入我们!西瓜视频客户端团队正在热招 Android、iOS 架构师和研发工程师,在北京、上海、杭州、厦门四地,社招、校招、实习均有职位开放,欢迎投递简历至邮箱:liaojinxing@bytedance.com,邮件标题:姓名-西瓜视频-工作地点-Android/iOS。

点个在看杀个 Bug ❤

相关推荐

2024 抖音欢笑中国年(五):Wasm、WebGL 在互动技术中的创新应用

前言随着 Web 前端技术的不断发展,越来越多的新兴技术方案被引入到 Web 开发中,其中 Wasm 和 WebGL 作为前端领域的两大利器,为开发者带来了更多的可能性。本文将结合2024 年抖音欢笑中国年的部分项目,重点介绍如何利用 Wasm 和 WebGL 对目前流行的一些前端互动技术(比如 Lottie、渲染引擎、动画图片等)进行创新和实践,利用 Wasm 和 WebGL 等新技术方案的特性...

字节跳动技术团队官方博客 2万+

2024 抖音欢笑中国年(四):渲染技术实践与探索

作者:陈瑞、欧阳浩铸、王武俊、倪梵云前言抖音在2024年春节期间推出了欢笑中国年系列活动,为用户带来了全新的体验和乐趣。而SAR Creator则为该项目研发工作提供了重要的技术支持。SAR Creator是一款基于 Typescript 的高性能、轻量化的互动解决方案,目前支持了浏览器和跨端框架平台,服务于字节内部的各种互动业务。这些绚烂多彩的互动场景当然也离不开实时渲染技术的支持,因此本文将专...

字节跳动技术团队官方博客 2万+

2024 抖音欢笑中国年(三):编辑器技巧与实践

前言本次春节活动中,我们大部分场景使用内部的 SAR Creator互动方案来实现。SAR Creator 是一款基于 TypeScript 的高性能、轻量化的互动解决方案,目前支持了Web和字节内部跨端框架平台,服务于字节内部的各种互动业务,包括但不限于抖音春节、抖音直播礼物、抖音UG活动等。SAR Creator 编辑器支持了图形化界面,提供了各类完善的系统(光照、动画、脚本等)供用户快速便捷...

字节跳动技术团队官方博客 1万+

2024 抖音欢笑中国年(二):AnnieX互动容器创新玩法解析

本文基于24年抖音春节活动业务背景,介绍了字节跨端容器AnnieX在游戏互动套件上的探索,致力于提升容器在游戏互动场景的优化能力。业务背景AnnieX作为字节一方游戏统一容器,服务字节内部电商、直播、UG等跨端场景业务。在字节一方游戏互动场景,有大量的一方游戏业务对容器有特定的流量、端能力和游戏优化的诉求。因此我们不断深入互动游戏业务特点,为字节游戏提供完善游戏端能力和流量运营能力,同时提供游戏互...

字节跳动技术团队官方博客 1万+

2024 抖音欢笑中国年(一):招财神龙互动技术揭秘

字节跳动旗下的抖音等 App 在 2024 年春节期间推出了欢笑中国年系列活动,在实现增长业务目标的同时,为用户带来了全新的体验和乐趣。「招财神龙」是其中的一个重要玩法。前言本次春节活动,使用到了字节内的主要前端、跨端、互动技术产品。主要涉及:跨端框架提供了首屏直出的方案使其具有较短的首屏时间,能够大大提升业务加载成功率。跨端框架也提供了 Canvas 作为 SAR Creator 等渲染引擎的...

字节跳动技术团队官方博客 1万+

Monorepo 解决方案 — 基于 Bazel 的 Xcode 性能优化实践

背景介绍书接上回《Monorepo 解决方案 — Bazel 在头条 iOS 的实践》,在头条工程切换至 Bazel 构建系统后,为了支持用户使用 Xcode 开发的习惯,我们使用了开源项目 Tulsi 作为生成工具,用于将 Bazel 工程转换为 Xcode 工程。但是在使用的过程中,我们发现了一些问题,其中影响较大的是,Xcode 工程卡顿:对于头条这种大型项目来说,Xcode 卡顿一直是本地...

字节跳动技术团队官方博客 1万+

抖音 ANR 自动归因平台建设实践

背景介绍本文在 2024 年初最新一期『抖音客户端基础技术大揭秘』技术沙龙活动中已做过专题分享,本次将内容重新整理文章进行分享。公众号后台回复技术沙龙可查看沙龙回放及 PPT~抖音作为一个超大型的应用,我们在 ANR 问题治理上面临着很大的挑战。首先对于存量问题的优化,由于缺少有效的归因手段,一些长期的疑难问题一直难以突破解决,例如长期位于 Top 1 的 nativePollOnce 问题。同时...

字节跳动技术团队官方博客 2万+

CVPR 2024 | CAMixerSR 动态注意力分配的超分辨率加速框架

背景随着相关技术和应用的发展,比如超高清屏幕、虚拟现实(VR)等沉浸式体验的增加,用户对超高分辨率图像和视频的需求变得越来越强烈。在这些场景中,图像的质量和清晰度对于提供最佳的用户体验至关重要。超高分辨率不仅能提供更清晰、更真实的视觉效果,还能在一定程度上增强人们的互动和沉浸感,在一些VR场景中我们需要8K甚至16K的才可以满足需求。然而要生成或者处理这些超高分辨率的内容,对算力的要求也是与日增长...

字节跳动技术团队官方博客 1万+

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment,BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容,而忽视了实际空域分辨率和时域帧率对视频质量的影响,随着高分辨率和高帧率视频投稿逐渐普及,特别是跨分辨率/帧率视频转码档位画质评估场景中,这种影响变得更加不可忽视。在本文中,我们...

字节跳动技术团队官方博客 1万+

2024 AI & 前端:回首展望,光芒未至,破晓之前!

前言回望 2023 年,ChatGPT 的突然爆火,让 AI 无疑成为最为值得注目的新兴领域之一,我们也一起见证了生成式 AI 的寒武纪大爆发。这一年来,国内外的生成式 AI 、大模型和相关产品以令人眼花缭乱的速度更新迭代,新的创业浪潮风起云涌。在这 AI 浪潮下,也让我们有了新的开发思考,探索着在各个环节中“前端 & AI”的应用场景。勇于探索的前端开发者们已经开始挥舞着 AI 的“魔法...

字节跳动技术团队官方博客 1万+

Kotlin 云端差分缓存技术

本文由字节跳动 Buildinfra 团队出品。在我们的工程上线 Monorepo 全源码后,Kotlin 编译成了整个编译中最耗时的步骤,全源码过程中大量的 BuildCache Miss 导致我们的编译数据落后原来多仓二进制时代很多,且业界没有相关的解决方案。本篇文章我们来具体阐述下 BuildInfra 团队自研的解决方案 - Kotlin 云端差分方案的原理和技术实现。一、Monorepo...

字节跳动技术团队官方博客 1万+

字节跳动基础架构SRE-Copilot获得2023 CCF国际AIOps挑战赛冠军

近日,2023 CCF国际AIOps挑战赛决赛暨“大模型时代的AIOps”研讨会在北京成功举办,活动吸引了来自互联网、运营商、科研院所、高校、软硬件厂商等领域多名专家学者参与,为智能运维的前沿学术研究、落地生产实践打开了新思路。决赛中,从初赛两百多支队伍中脱颖而出的十支入围队伍分别展示了各自的方案,并进行了现场答辩,评审专家从选题方向、创新性、实用性、完整度和实验复现结果等多角度进行了综合评定,最...

字节跳动技术团队官方博客 2万+

字节跳动百万级Metrics Agent性能优化的探索与实践

背景metricserver2 (以下简称Agent)是与字节内场时序数据库 ByteTSD 配套使用的用户指标打点 Agent,用于在物理机粒度收集用户的指标打点数据,在字节内几乎所有的服务节点上均有部署集成,装机量达到百万以上。此外Agent需要负责打点数据的解析、聚合、压缩、协议转换和发送,属于CPU和Mem密集的服务。两者结合,使得Agent在监控全链路服务成本中占比达到70%以上,对Ag...

字节跳动技术团队官方博客 1万+

西瓜视频RenderThread引起的闪退问题攻坚历程

背景影响西瓜之前存在过一类RenderThread闪退,从堆栈上看,全部都是系统so调用,给人的第一印象像是一个系统bug,无从下手。闪退集中在Android 5~6上,表现为打开直播间立即闪退。该问题在2022年占据Native Crash Top5,2023年更是上升到到Top1。因此有必要投入时间和精力再重新审视一下这个问题。在历经多周的源码分析和排查后,逐步明确了问题根因并修复,最终取得了...

字节跳动技术团队官方博客 2万+

字节电商双11 大促容量保障是如何做的?

前言Rhino 简介Rhino是字节自研全链路容量评估产品,致力于构建完整的全链路容量评估解决方案(覆盖:容量预估->资源准备->数据准备->容量验证->监控->分析->决策->处理反馈);围绕容量在稳定性、成本、效率 三方面提供业务全方位基础支撑。Rhino 目前已经成为字节各业务容量评估主流解决方案,并且历年来在业务大型活动稳定性保障中(抖音春节项目、...

字节跳动技术团队官方博客 10万+

使用火山引擎 APMPlus 解决抖音Top 1 Java 崩溃的通用优化方案

背景近3个月,抖音 Android 版面临一个多次触发线上报警的崩溃问题,全量版本和灰度版本的异常数据激增,该问题不仅容易触发报警,更成为了 Java Top 1 崩溃问题,带来巨大困扰,急需攻坚解决。本文展现了具体的分析过程、优化思路和解决方案,同时提供了已集成该方案的实用工具。初步分析多维特征我们以某发版期间数据为例进行分析:机型方面:比较分散,有聚集部分samsung sm-s9180 占比...

字节跳动技术团队官方博客 2万+

用 Addon 增强 Node.js 和 Electron 应用的原生能力

前言Node.js Addon 是 Node.js 中为 JavaScript 环境提供 C/C++ 交互能力的机制。其形态十分类似 Java 的 JNI,都是通过提供一套 C/C++ SDK,用于在 C/C++ 中创建函数方法、进行数据转换,以便 JavaScript / Java 等语言进行调用。这样编写的代码通常叫做 Bindings。此外还有基于 C ABI Calling Convent...

字节跳动技术团队官方博客 2万+

火山引擎 ByteHouse 的增强型数据导入技术实践

作为企业数字化建设的必备要素,易用的数据引擎能帮助企业提升数据使用效率,更好提升数据应用价值,夯实数字化建设基础。数据导入是衡量OLAP引擎性能及易用性的重要标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。作为一款OLAP引擎,火山引擎云原生数据仓库ByteHouse源于开源ClickHouse,在字节跳动多年打磨下,提供更丰富的能力和更强性能,能为用户带来极速分析体验,支撑实时数据...

字节跳动技术团队官方博客 1万+

打造企业级智能问答系统的秘密:如何使用云数据库 PostgreSQL 版实现向量检索

本文就如何利用火山引擎云数据库 PostgreSQL 版和大语言模型技术(Large Language Model,简称 LLM),实现企业级智能交互式问答系统进行介绍。通过本文,你将会了解交互式问答系统的原理,学习 PostgreSQL 的向量化存储和检索技术,以及大语言模型交互技术等。背景在大数据的浪潮下,众多企业建立了自己的知识库,以便于信息检索和知识查询。然而,随着知识库内容的膨胀,传统的...

字节跳动技术团队官方博客 2万+

抖音大型直播的画质优化实践

面临挑战随着抖音内容生态的不断丰富,越来越多的大型赛事在抖音平台进行直播,世界杯/春晚/亚运会等各项赛事节目引来大量用户观看。卡塔尔世界杯期间,抖音提供的稳定高质直播画面为观众带来了完美的观赛体验,决赛的 PCU 高达 3700W+。不同赛事节目涉及链路众多,且不同赛事之间存在差异,如何保障各链路的画质稳定并进一步提升画质,是一个巨大的挑战。如何应对挑战?画质优化链路大型赛事直播涉及链路较长,不同...

字节跳动技术团队官方博客 2万+

抖音直播新一代BVC编码器正式亮相

面临挑战在直播行业发展如火如荼的今天,用户对视频体验的要求也水涨船高。视频基础体验的关键要素包括清晰度、流畅度、低延迟等,而这些要素的“第一性原理”,就是视频本身的编码效率,也就是压缩率。视频编码是整个技术体系的基座,编码效率的显著提升,能够在同等码率下极大提高画质,从而改善用户体验。视频编码效率的重要性不言而喻,但进一步地提升也并非易事,尤其在直播场景中,对编码速度、延迟、码率控制等方面都有很高...

字节跳动技术团队官方博客 7356

Go Metrics SDK Tag 校验性能优化实践

背景Metrics SDK 是与字节内场时序数据库 ByteTSD 配套的用户指标打点 SDK,在字节内数十万服务中集成,应用广泛,因此 SDK 的性能优化是个重要和持续性的话题。本文主要以 Go Metrics SDK 为例,讲述对打点 API 的 hot-path 优化的实践。用户在使用 SDK API 进行打点时,需要传入指标对应的 Tag:tags:=[]m.T{{Name:"foo...

字节跳动技术团队官方博客 1万+

云上智能驾驶三维重建最佳实践

智能驾驶技术的不断发展,正在改变着我们的出行方式和交通系统。作为其中的一个关键技术,三维重建在智能驾驶系统中起着重要的作用。除去车端本身的感知、重建算法,自动驾驶技术的落地与发展需要庞大的云端重建能力支撑,火山引擎多媒体实验室通过行业领先的自研三维重建技术,结合强大的云平台资源与能力,助力相关技术在云端大规模重建、自动标注、真实感仿真等场景的落地与应用。本文重点介绍火山引擎多媒体实验室三维重建技术...

字节跳动技术团队官方博客 6305

火山引擎实时、低延时拥塞控制算法的优化实践

摘要火山引擎智能拥塞控制算法 VICC(Volcano Intelligent Congestion Control)是一种自适应的拥塞控制算法,旨在解决全球不同网络环境下,不同音视频应用对带宽利用率和延时的差异化要求。它结合了传统拥塞控制算法(如 GCC 和 BBR)的优点,并且能够根据不同的网络条件、业务偏好和码率特征进行自适应调整,包括自适应拥塞响应速度、自适应带宽探测幅度、自适应丢包检测策...

字节跳动技术团队官方博客 6735

veImageX 演进之路:Web 图片加载提速50%

背景说明火山引擎veImageX演进之路主要介绍了veImageX在字节内部从2012年随着字节成长过程中逐步演进的过程,演进中包括V1、V2、V3版本并最终面向行业输出;整个演进过程中包括服务端、客户端、网络库、业务场景与优化等多个角度介绍在图像处理压缩、省成本与体验优化的经验与方案;本篇文章重点介绍在web端演进和提供的能力,图片是 Web 站点中的重要元素,图片体积、格式、分辨率以及渲染方式...

字节跳动技术团队官方博客 6589

自研多模态追踪算法 PICO 为「手柄小型化」找到新思路

作者:张韬、林泽一 、闻超 、赵洋研发背景作为头戴的追踪配件,VR手柄可以通过HMD(头戴显示设备)的inside-out光学追踪定位原理,计算出手柄的空间运动轨迹,同时结合6轴传感器实现6DoF空间定位。与此同时,结合手柄控制器的物理按键、马达反馈、摇杆等,用户还能获得逼真、细腻的触觉反馈,进一步增强虚拟现实人机交互的能力以及沉浸感,这也是目前无手柄方案所难以实现的。目前主流VR手柄的追踪技术方...

字节跳动技术团队官方博客 7819

如何利用播放器节省20%点播成本

点播成本节省的点其实涉及诸多部分,例如:CDN、转码、存储等,而利用播放器降本却是很多客户比较陌生的部分。火山引擎基于内部支撑抖音集团相关业务的实践,播放器恰恰是成本优化中最重要和最为依赖的部分。火山引擎的视频团队做了份数据统计,在一个很经典的视频业务中,我们在2022年至2023年大约1年半的时间里,针对这个业务进行了33次成本优化点,其中13次是播放器主导的优化,其余的有12次也是需要播放器强...

字节跳动技术团队官方博客 6176

火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性

背景ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础,推出火山引擎云原生数据仓库ByteHouse。在日常工作中,研发人员经常会遇到业务链路过长,导致流程稳定性和数据一致性难保障的问题,这在分布式、跨服务的场...

字节跳动技术团队官方博客 6900

抖音集团都在用的画质评估工具,确定不试试吗?

导读本文从抖音集团内部画质评估体系的建设历程着笔,主要分享了画质评测对于业务的重要性、主要应用场景和内部产品的一些典型实践案例。通过分享业务视角遇到的一些问题和我们的解决思路,希望能抛砖引玉,为遇到类似困扰的伙伴们提供有价值的参考。画质评估体系建设历程为何评测画质如此重要?我们通过线上业务大量实验发现,图片画质优劣对点击率、 停留时长等消费类指标有正相关影响,间接影响用户收益指标。因此,建设一套行...

字节跳动技术团队官方博客 7940

VLDB 2023 | CDSBen: 字节跳动 veDB 数据库存储系统性能测试模型

背景随着业务爆炸式增长与云原生技术的日渐成熟,大量云原生分布式数据库产品如雨后春笋般涌现,其中一部分主打 OLTP 场景的分布式数据库强调的是从计算-存储分离架构获得弹性收益;对于业界各种计算-存储分离架构的数据库而言,怎么用真实的端到端数据库 workload 去 benchmark 其底层存储系统一直存在以下难题:对于数据库专用存储系统,不存在如 fio 一样的“事实标准” benchmark...

字节跳动技术团队官方博客 5896
上一篇: 西瓜客户端埋点实践:基于责任链的埋点框架
下一篇: 奔跑吧!智能Monkey之Fastbot跨平台
 字节跳动技术团队
字节跳动技术团队 企业官方账号 企业官方账号
博客等级 码龄7年 8153粉丝 316原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值