同时
2020-02-24 13:22
来源:未知
点击数:            

第二是计算资源的管理。这里的计算资源,基本指 gpu,一般来说是 nvidia 的 gpu。七牛云实验室里,现在已经有百台级别的 gpu,里面有各种型号,比如 m4、k80,到 p100、v100 都有。这些资源怎么有效地管理、使用,是个难题。七牛云开始是用非常原始的方式,比如抢占方式,后来再慢慢把资源管理模块化、精细化,最后才做到 ava 这个平台。

第一个部分是数据集管理。这里讲的数据集管理包含几个部分。第一是如何管理 p 级别的云上云下数据,并能及时有效地提供给深度训练。第二是对数据进行加工处理,比如图片裁剪,把数据打包成不同深度训练框架所需的格式,自动挂载入深度训练平台进行训练。还有一种是如何把训练产生的结果自动回传。

深度训练平台有两个核心,一个是数据管理,一个是计算资源管理。首先提数据管理的原因是,从传统意义上使用数据到深度训练访问数据,会发现一个有趣的问题:数据量已经大到没法管理的地步了。李朝光表示,“比如以往,我们用网盘或搭一个 ceph,数据一般都是少数几个 t 的级别,但等到真正运作深度训练的时候,会发现跑一个训练,比如图像分类或视频检索训练,就能消耗几十个 t 的空间。怎么有效把这些数据喂到深度训练里?七牛云 ava 平台的诞生就是要想办法解决这个问题。”

七牛云通过这个流程,把海量数据管理起来。用了这套系统后,大家就不需要频繁倒数据了,因为系统就可以自动把冷数据踢掉,也不会存在空间不够的问题了。以前用 ceph 的时候盘很快会满,很多工程师不知道哪些数据该丢哪些该留,现在不需要考虑这些问题了。ava 会自动把冷数据踢掉,自动把脏数据上传云。

同时,深度训练是平台比较重头的一块,包括对 gpu 资源的管理、存储资源的管理、训练管理, quota 管理、以及跟深度训练相关的联合调度。现在七牛云有比较好的调度系统,比如 kubernetes,但当真正使用的时候,发现 kubernetes 能做的非常有限,调度管理粒度比较粗,只能调度到容器的级别。做到容器级别,可部分解决资源共享问题,比如 100 台 gpu,可以全部用起来。但如果有成千上万的并发训练任务,kubernetes 的管理就有点捉襟见肘了,比如不同机器的 gpu 怎么联合调度、通信怎么管、资源怎么分配更合理等。七牛云现在要做的一件事,就是在 kubernetes 调度之上,细化对 gpu、cpu 的管理,引入 rdma 的技术,把资源管理、通信和调度做深,做细,达到更好的资源共享和使用。

第一,支持多对象存储,海量空间。对七牛云来讲,ceph 按百 t 级别,运维就很难做了。但对对象存储来讲,上 p 都不是问题,可能稍微慢一点,但数据放在这里,总归可以做训练,虽然有时候会慢,但通过其他的手段解决,至少先把空间问题解决了。

第二就是标注。机器其实并不是一上来就能识别图片,很多时候需要人工辅助它,即要人先教会它怎么做。在信息大爆炸的时代,每天进来、出去可能 60% 以上都是图像、视频,这不是现有模型仓库里能准确识别出来的。ava 平台提供一套打标机制(labelx),让非专业或专业人士,通过标注手段,告诉平台这些图片到底是哪种类型,然后输入到训练算法进行模型迭代、更新,最后输出标准模型。基于产生的模型,我们就可以通过推理来判断新输入的图片是属于什么分类了,比如黄色,暴恐的等。目前七牛云对黄图识别的准确率已经达到 96% 以上。

之前数据管理的现状是:大部分的数据会存放在对象存储中,做训练的时候,会把数据拉到本地来。所谓本地,一般指本地的一个集群或本地一台机器,一般玩法,都是搭一个本地 ceph 集群,通过 kubernetes 调度,把 pvc 挂上去,然后训练数据从对象存储导到这里,可以在里面跑训练,跑一两个月或是一两天都可以。这样做的问题是用户数据不能共享,大家如果用过 ceph 就知道,ceph rbd 在 kubernetes 中不能共享读写,ceph fs 可以,但性能有点差距。还有,ceph 提供的存储空间对于深度训练的数据量来说是杯水车薪。

七牛云目前围绕的是数据创新服务。但七牛云是做存储起步的,开始是集中在海量(对象)存储,后面进入了机器学习、智能多媒体服务,这些的共用特点是对数据本身的存储管理,比如对象存储。怎么把这么多数据存储起来?怎么高效地把它放在 cdn 里,快速地进行转发?目前七牛云已经基本实现了第一步:把数据有效地管理起来。第二步,怎么发现数据之间的关系?如何根据数据内容做创新?比如一个视频有几千帧,帧和帧之间有什么关系?一个图片,是否属于黄色或暴恐的?七牛云重点做图片、视频的检索、分类,还有人脸识别等。

视频数据一下占几十 t,其他人没法玩了,这是比较头痛的一个问题。运维空间不够,可以加盘,加了几次以后就没法加了,或者盘位没了,然后再加机器,形成恶性循环。几十t的数据可能前面半个月用了一半数据就不用了,这个时候其实放在云上对象存储里就可以了。但刚开始没有这个机制,大部分的数据都躺着“睡觉”,而其他人又没有空间可用

一个图片过来,不能直接喂到七牛云深度训练系统里,第一步就要做数据处理。之前七牛云有个 dora 系统,是做图片视频处理的,比如裁减翻转、加水印等。这样可以把数据转换成深度训练需要的格式,然后喂到深度训练系统里,这是目前正在做的一块工作。数据喂进来以后,经过深度训练、视频截帧,发现其中的关系,比如判断图片是不是暴力的、恐怖的,再重新把数据放在结构化存储里。然后反过来做一个迭代。做一个基础模型,内容分发,重新进入系统做一个循环。在这个循环的不停迭代中,不停改变训练的精度,输出一个最终想要的结果。这大体上现在 ava 平台想做的事情,它的背景就是从传统的内容服务,慢慢过渡到数据挖掘,这部分就是通过七牛云深度训练平台来实现的。

第二,统一命名空间。通过 alluxio 做,就是一个大系统,做训练的时候,数据放到任何地方照样可以把数据拉过来,导入七牛云的深度训练平台,训练完以后把结果再导回原来的地方。

对 gpu 也是类似,如果一个集群中的 gpu 不能充分利用,到最后会发现运维就是不停加盘、加机器,用户不停倒数据。这过程还会影响带宽,陷入恶性循环。怎么破这个问题?这是七牛云 ava 要解决的问题,ava 首先要解决痛点问题,然后才解决好用的问题。

第四,multipletier 缓存系统。内存可能是几个 t 的级别,现在七牛云本身训练数据已经到了 p 级别,加上后续平台开放出去,可能要到 e 级别,t 级别的内存系统对 e 级别的云上数据肯定不可用,这里就可以做一个多层的缓存系统,内存放不下了可以放在本地的硬盘。这一块可以不落 ceph 空间,因为 ceph 空间可能还要再走一次网络,速度会受影响,七牛云可以直接落到本地缓存系统。

第三,内存分布式文件系统。比如一百台机器,每个机器贡献几百 g 内存形成几个 t 的内存系统,可以把数据放在里面,后续所有训练都是从内存读取,不会从云上读取,这是非常好的一个好处。在实际训练中,七牛云经常用到这个内存文件系统的特性。

最后一个部分,是评估推理。前期的训练做了大量准备工作,准备好了评估模型。推理评估要做的就比较简单,是把新的少量图片加上模型再训练一次,在毫秒级别能够得出结果。这一部分大都与业务结合比较紧密。

原来七牛云内部从业务角度出发,也做了一个分布式的训练系统 espp,用于图像和视频训练,其中也用到了 kubernetes 和一些训练框架,但是针对于特定业务系统的。现在七牛云准备把原来的业务系统都收编到 ava 平台。 rdma 这一块也是要重点考虑的,正在跟厂家做一些沟通交流,马上就要布上去,加上分布式调度系统,以后训练会比现在快很多。

训练开始的时候,可以对数据预热,读取到本地 alluxio 集群缓存起来,大部分框架都有这样的预取功能。或者不做预热,这样训练速度可能受损,但训练完全没有问题。ram 充满以后,会把数据下沉到下一层的 ssd 盘。通过 fuse 系统,训练所在的 pod 可以直接读取 alluxio 的数据,就像读取本地文件系统文件一样。读取的其实不是云上的内容,内容已经存在集群内部了。这个集群容量完全可以替代原来的 ceph 集群,另外的好处是数据不用的时候可以自动剔掉,大部分在使用的数据,在这个集群里都可以找得到,相当于把加速性能发挥到了极致。

上面一层是七牛云 ai 实验室主打的方向,是对外部可见的业务层,大部分的业务都是围绕图像、视频定制化,包括鉴黄产品、目标检测等。因为网络上充斥的黄色图片太多,很多客户每天有几千万张甚至上亿张图片存到七牛云。根据国家的法规,这些图片可能会有相当一部分是不适宜在网上出现的。但有时候客户也不知道,不可能靠人把这些图搜出来,我们怎么把这样的图片拎出来?这就需要做一个自动化处理,把图片自动识别。在七牛云这端,把图片清理掉,网站就不会把黄色图片或敏感图片放出去。这是通过深度训练平台,利用算法识别出不同的模型,然后在毫秒级别把图片识别出来。下面一层提供基础的服务功能,即 ava 深度训练平台。

虽然说现在 ava 有了分布式的调度机制和 rdma 机制,但从算法模型的生产角度讲,还处在一个手工阶段,大家还是通过手工方式不停的调整参数,然后不停的跑训练,以期调试出一个满意的模型。目前 google 已经通过 automl 的方式自动能产生出很好的模型,七牛云还有很多路要走。七牛云正在和算法团队一起研究,如果让模型训练变得更高效,更自动化,更智能化。

而对写也是一样,但写七牛云有个不一样的地方。为了保证数据安全,写的话可以直接穿过 ram 写入 ceph,最终 ram 或 ceph 空间到达高水位了,可以自动把写入数据推到云上。训练完以后,异步的把一些干净数据淘汰,脏数据送回云上。

ava 平台最初是直接服务于算法工程师的。通过引入 ceph,屏蔽掉存储管理细节,引入 kubernetes 屏蔽容器管理细节,并把不同的深度训练框架打包到 docker 镜像中,方便算法工程师使用。算法工程师可以聚焦于算法本身的设计,不用关心下面资源如何提供的。开始的时候机器比较少,gpu 资源有限,大家使用方式基本是独占模式,直接面对存储和 gpu 资源。后来随着业务量增大,机器资源增多,平台的灵活性和扩展性越发显得重要。ava 平台重点从对资源的包装到对资源的灵活调度转变。算法人员已经解除对资源的直接依赖,一个简单的命令或 gui 操作就能启动训练。除了针对算法人员,目前这套系统也开始提供给外部用户使用,首先会给高校学生提供一个免费尝试深度训练的平台,后面将会具体介绍。

去年七牛云搭了一个 100t 的集群,在真正用的时候感觉还是比较吃力,会碰到各种问题。一个训练,就可能有几十 t,把 ceph 会一下子撑爆。这只是七牛内部一个正常的训练,算上对外开放的用户,还有内部上百号人同时使用,这个集群明显不能满足要求。

Copyright © 2012-2013 .All rights reserved.http://www.pwgfcs.cn 版权所有