《云上新势力 CLOUD IMAGINE》——Part 2 演讲/文章合集——文章8:《OPPO云边端的协同实践》(上) https://developer.aliyun.com/article/1228888?groupCode=videocloudtech
2. 混合云架构
OPPO在StarFire机器学习平台的基础上,构建混合云的架构。
如何把这么庞大的平台部署到混合云上去?
从整体架构来看,底层是OPPO的私有云以及公有云。往上,基于容器化部署,考虑到稳定性、性能等,需要对内核有一定的定制。GPU的切分也非常重要,很多训练,除非是像一些稠密的场景,比如图像、声音等,GPU的使用率较高,在很多其他的场景下,GPU使用率并没有那么高,会造成很大的浪费。
此外,算法工程师80%的时间都在做开发和调试,会用到一些碎片的卡,每个人如果独占一张卡的话,会带来非常高的成本,所以需要对GPU进行切分。
还有存储以及网络等等,再往上是调度、operator的编排以及很多框架。在机器学习领域,用框架是最繁多的,因为框架的场景非常多,在不同的场景里面,不同框架的特点也需要充分的发挥,而OPPO的框架的兼容性非常丰富。
关于GPU的切分,其实很多公有云也有类似的能力,但是OPPO部署了混合云,在OPPO内部有大量的GPU卡,需要跟公有云使用同一套架构。这样,OPPO内部的算法工程师在使用的时候,能够达到无差别的要求。
OPPO的GPU切分技术,主要是从两个方面实现,一个是显存的切分,另一个是算力上的切分,直接在LINUX内核层面做改动。MPS模式会在训练的时候大规模使用,而在算法工程师日常开发阶段,正常用内核态的截获即可。改进之后,整个GPU的使用率提升2倍左右。
数据是训练中很重要的一部分,OPPO的数据量也非常大,但是每一天的训练以及不同训练的场景,对数据的索取程度是不一样的。
基于混合云的架构,OPPO不可能把内部所有的数据都放到公有云上去进行训练,一方面因为成本,另外一方面因为性能,这是没有办法做到的。
因此,OPPO在任务调度的时候,会圈出来要用到哪一部分的数据,去进行预加载或者主动缓存,实现算力在私有云、公有云或者边缘上的卸载以及调度,保证整个训练过程的丝滑。
算法工程师感受不到这种差异,同时实现对算法工程师承诺准点率,也就是说能够保证训练大概在什么时候之前完成。
对很多数据进行预加载,但是数据训练完可能就被销毁了,保证数据在传输以及在公有云上缓存时的加密状态,在训练时才会进行相关的解密。
对AI平台来说,比较重要的是调度。OPPO的调度是把私有云跟公有云混合在一起进行调度,以及跟存储做联动。如果是调度到公有云上的任务,会有一个非常重要的filter,去看数据有没有预加载到,如果没有的话,可能还是会优先调度到私有云上,但是大部分时候命中率还是比较高的。
3. 云边端一体的机器学习
在AI平台基础之上,OPPO利用阿里云的边缘计算部署相关的工作。在训练阶段,OPPO使用阿里云的公有云和自己的私有云做混合的调度,训练之外,很多模型会在边缘或者端上进行部署,形成三级的部署结构,来实现部署的响应。
在手机中,大量的模型需要响应,比如一张照片的增强,功耗与热都需要模型预测,进行最优状态的调整,这些都要通过模型来实现。模型会部署在云、边以及端上,满足弱网或者网络完全不通情况下的用户体验。如果网络状况非常好,那么整体体验就会非常丝滑。
基于云边端一体的机器学习,OPPO实现了业务赋能、生态开放和隐私计算,真正提升了业务价值。