大家好,因为时间的关系最稀疼大家一点休息的时间,咱们就开始下一个我们的topic是主要是介绍一下现在在Messos里面对于GPU作为一个可以调动资源的支持情况我先介绍一下我自己吧我叫李宇博,我是来自IBM的中国研究院其实我自己的工作设计的内容是比较广的其实可能从方向方面计设计到OpenState,又设计到Messos,还有United但是大多数机售一个就是我们如何把GPU的资源去应用到云当中无论是我们的Ice层的云,或者是我们的鸡云里头这个就是我主要的工作部分但是今天可能我们主要介绍的内容就是我们在Messos里面做的对GPU作为一种可以调动的资源的支持的情况这个是一方面是出于我们IBM自己有一些项目的需求等会我后面会想去的介绍再一点就是我们和Messos Fair以及和Media的TV一块是合作真正把这套东西去做到我们的Messos社区里头这个就是我在讲之前先调研一下大家就是有多少我们有多少同学会在自己的云里面想要或者已经去支持了一些有关Cognitive、认知计算或者是低分明相关的应用,或者有这种需求谢谢看来其实人数还是挺多的大概有超过三分之一的人就是说因为也是随着近两年吧因为深度学习包括AI一些技术现在这两年爆发式的增长所以可能我们很多的公司会有将深度学习或者认知计算的这些API去提供到云端给其他的用户去使用有这种需求那么但是从另一方面来说就是因为深度学习这个东西特别是深度学习好多认知计算现在后台的API也是继续深度学习它是一个计算量非常大的一个应用所以说用CPU去算的话如果大家是有纪念的同学可能很清楚这个做一次Inference就是在纪念户数比如说我去实际上图片可能用CPU是要若干秒钟如果我做一个吹命的过程去训练一个深度学习的模型可能需要短折若干的小时长折几天上月特别是一些语言的模型可能会去跑若干的月去做一个模型那么对于这个产品的迭代来说就会非常的慢另外就是因为我们的做现场识别的话这个API可能我过好几小时才能返回这个对于其他的用户也不可接受的所以继续这一点我们在深度学习里面这两年用到的一个我的技术就是用Amelia的主要是Amelia的GPU进行一个加速所以从现在来看GPU其实用了最多的领域还是Deplaning但是也包括这个也有一些其他的这个地方去用比如说我们传统的科学计算领域以及一些就是我们比较专业的领域比如说经济的比如说对于股票的预测对于单版式序列的一些分析也大量用到了GPU的加速所以GPU现在没看错是做这种深度学习或者认知计算一种很重要的资源因为它可以有效的去解放CPU的复杂而且它的计算速度会比CPU会快很多倍我们下一个也可以看出来这个就是GPU和CPU现在的一个计算能力的比较大家看左边那张图绿色的线就是当然这里已经不是最新的GPU了就是K80这一款没带的GPU大家可以看到它无论是从计算能力还是从看到Memory的带块来看已经超越了CPU弱干贝然后大家再看这边就是靠左边的这张图你们右边的这张图就是大家可以看到最右边这个用GPU这个绿色的最短的这个线条这个是GPU去执行一个深度学习然后这个蓝的相比这个是一个特别典型的深度学习的一个任务大概有10倍左右的想法提升所以就是说对于做深度学习来说可以说用GPU或者类似的这种加速器来做的是现在或者可以说是唯一的一种选择Metals对于GPU的支持其实在深度学习活起来之前也有很多的拥护在2011年其实最近最早已经有用户去问什么时候Metals能够去支持一些特殊的执行的一些设备去在Metals里面能够去在Metals里面的任务能够去有个sense这件事情很早就提出来了当然在最近随着深度学习的发展这两年所以用户的去求越来越多包括我们IBM自身因为IBM现在也做很多Cognitive相关的一些应用我们自己比从来加购也需要我们能够支持对于GPU这种资源跟支持从而对深度学习以及深度学习模型的部署提供加速所以这也是我们做Metals对于GPU支持的一个出发点这个就是我们想干的事情就是大家可能不用穿个自器了就是相当于是上到下一层其实我们想做的事情从整个加购的情况下来看很简单就是我能够把除了CPU以外的计算资源这里主要是现在做的是GPU以后我们还会做FTG把这种加速器的资源能够暴露给容器里面一方面就是我容器里面起的task能够有效地去利用这些GPU的资源另一方面我的调动器能够对这些资源进行一个统一的管理和现在管理CPU和所有人资源一样以及对对于GPU和其他加速器的资源进行有效的一个额利这样我一个task的任务我就只能用分给它的有效的这些GPU的资源什么样的资源是不允许它访问的其实就是完成一个这样的工作这句话是讲的是GPU的允许溢化的一些历程因为其实无论GPU在VM里面的支持或者在容器特别是dalker里面的支持其实都牵扯一个GPU的迅速化的过程那么以往以往传统的做法就是在VM里面GPU是常用这种PCM PAS的方式去直接透传到我的容器里面这样子透传到我的虚机里面这样子做的话一个最大的缺点就是说当我一个GPU去PAS到我的一个特定的虚机里面的话我热虚机里面无论应用是否在跑这个GPU就已经绑死了可能再会被分到另外一个虚机里面除非我前面这个虚机消费这样子的话GPU的利用率其实是比较低的那么随着现在容器的具体的发展其实对于容器来说它GPU使用就非常流火了因为其实容器只是对于一个进程提供了一个它的资源的约属以及一个运行的环定所以它并不会像VM那样把GPU相当于绑死到一个虚机里面我如果可能的话我有多个容器可以同时利用统一块GPU但是这个从技术上可以实现的因为微量的GPU本质也是支持多个进程同时去访问的但是这里面我们想提到是我们并不想让多个进程去共享GPU因为这里面有性能问题也有一些稳定性的问题但是我们可以做到一点是我们当一个任务结束的时候我可以迅速的把这个资源去release出来这样的话但是这样用的话就是如果我们手动区管理包括我们Messos也支持现在是支持这种资金预资源使用的包括我从马拉松也可以去往下透传我自己的比如说我用Dalpercomputerrider的话我可以去透传Dalper的那个gambang device这个命令我可以把这个设备硬克到容器里面我也可以去用GPU这样没有问题的但是其实真正用起来会有很多的限制因为一方面就是说我们这样的话是人为的手动区管理哪一个GPU分给哪个任务我任务完了以后我可能分给另一个GPU这个过程完全是我人为或者是上层的软件我自己写的这个软件需要去控制的这样就很不利用另一方面就是说我对GPU访问的这个控制就是比如说我是否一个任务是不占了一个GPU别的任务会不会去乐权去访问我这个GPU也完全需要用户自己去控制的所以这样做的话会有很多问题有很多不管是稳定性或者是安定性的问题所以基于以上考虑我们需要在Messos里面做一些扩展使得这个GPU真正它的隔离性能它的调度性能调度方式完全用Messos去掌管起来这样的话我上层用户只需要指定我需要哪个需要GPU的资源这样的话我的Messos方向会自动的把这个资源调度给你上层的软件不需要去关心我到底是用了哪台服务器的哪一个GPU这样的话对于我们上层软件来说就解除了很多这种资源管理的问题这个其实就是一部分是我们的需求还一部分是现在我们接触的一些购购的需求就是因为我们GPU也不是最近两天太诞生的之前其实就广泛的被使用其实大部分的时候可能是这种HPC的机群里面会有很多GPU的应用但是随着今年点现在整体的这个系统架构的发展大家可能现在不会再去用传统的这种单接点非常庞大的架构大家可能都会用Mable Surace都会用容器用这种更加Distributed的这种为架构的形式去去搭整套的系统所以就是说这样子要求我们其实对于GPU的使用的方式有一些改变因为传统上我们可能找维护一个GPU机群这样子就相当于我申请任务的时候我去要你的资源然后跑完了释放这传统的传统的HPC的这些小电影是可以做到的但是现在因为就是我们可能更多的是用这用MassosL或者用MassosL对这些任务进行对容器进行调谱这种无微粗的形式去起所以其实我们GPU的支持做到Massos的面式现在非常无论对于我们MBM来说还是对于外面我们的客户来说很重要的一件事情在这里面我们其实还是去选择对于Docker主要是对于Docker进行一个支持当然我们后面会讲我们现在其实提供了对于MassosComponentRider和DockerComponentRider都有支持但是我们的真正使用的GPU的镜像还是两者都是使用的是现在现成的Docker的镜像因为Docker其实大家知道还有很多的好处一个是应用非常广泛大家在很多人在生产环境里面也确实都现在正在使用Docker容器的技术另一方面就是对于Docker来说我们现在有很多现成的虚极包括Madea自己也做了很多GPU相关的镜像为我们去使用所以说我们自然而然想到我们会去兼容Docker镜像去做相关的事情这一块提及一下就是MadeaDocker这个工具这个工具相当于是Madea官方提供的一款对于Docker就是对于在容器那时候GPU支持的软件它本身是一个单体版本的东西它就是说它规定了一些容器Docker镜像一些生成的一些方式包括它也给出了官方的一些包含GPU里面的库大Library库大就相当于是GPU使用的一个Runtime的Library回提供这种官方的镜像然后它又提供了这种软件包叫MadeaDocker相当于是对于我单机单机的容器可以对GPU进行访问的一些一些控制这里面我们其实在Massos里面所做的很多工作也是参考了MadeaDocker里面的一些特性这个我们在下面会说然后再一点就是现在其实随着Docker现在很火所以有很多现成的深度学期的框架所以我们可以如果我们接受到Docker的镜像可以直接的去用起来比如说我们现在常用的有Coffee啊TensorFlow这种深度学期的框架我们都可以直接从Docker Hub里面拿到这一块其实还是说我们为什么不用Docker就是说从IBM内部的脚步上来因为首先一方面我们IBM内部其实期待了很多就是做各种深度学期框架包括优化的包括配置的这种里面有很多就是已经现成的一些Docker的emage包括DockerFam我们想把它重用起来这样子的话我就可以免去了这个新鲜迁移的这个工作的负担另一方面就是其实可能对于大家也一样就是我们开发者来说对于Docker是非常的熟悉所以这也是我们的一个出发点为什么我们会去这种形象就是先去无论是用Docker的形象还是Docker的形象都是以Docker的形象去入手这种方式去做深度学期的工作因为其实这部分深度学期的这些软件和其他我们的一些应用还是不一样的因为它其实对于很多的Library包括的VIAGPU的Library以及第三方软件Library的依赖是很重的所以说其实我们更期望用这种这种形象的方式去为我每一个应用提供一个可以运行的环境所以说如果直接在物理机上去装这些框架或者什么就是用传统的Visuals可能Norizer的形式去跑这个应用的话物理机就需要装我乱七八糟的框架可能还会有兼容性或者其他的问题这也是我们的一边考虑这个就是我们其实想做的事情就是相当于就是把NVIADocker去通过Visuals去扩展成多机的一个版本把中间的这个Docker的demo去换成Visuals的整个的Visuals包括它的Pulter去做替换掉这个就是前面都是介绍了一些背景知识然后下面就是我们真正的去介绍我们在Visuals现在做的一些工作首先就是说是其实对于GPU来说做支持没有想象的那么简单其实这里面存在的一个比较大的问题因为因为因为它和今天设备相关所以其实它没有那么的跑火就是没有那么牛火因为对于我们的接下来说可能如果里面装上一个和今天无关的这个应用的话它其实是放到任何系统上去跑是没有问题的因为Docker本身它的机制保证了它可以跨平台的去运行但是对于对于和GPU相关的应用来说就不是这样子为什么就是需要用到它本身的一个cernal module就是这个是在我们装上GPU驱动的时候它就会在主机去插入一个cernal module而这个cernal module必须与我们容器内的cernal module的版本是相同的否则老爸说应用其实这个Docker里面的应用是在这台主机上是跑不起来的这个其实本身也是Docker自己自身有的现在存在的一个问题因为它的内核其实还是依赖于物理主机的内核的一些机制所以说我们如果和内核相关的一些Library如果装到容器里面就会有这种兼容性问题所以这个其实是我们需要解决的一个最大的一个最严重的一个问题就是说刚才说的一样大家看这个图就是说如果我的镜像内的Library和主机的这个cernal module所支持的Library版本如果不一样的话这个镜像里面的应用程序是没有办法去跑起来的所以为了解决这个问题我们相当于是需要去做一个做一个类似于共享这个cernal module的一个工作我们并不打算把cernal module装到容器里面而是在主机里面当它这个容器起来的时候我们会把真正的这些VDL,Driver,Library直接插入到这个容器里面去做这个是一方面就是我们需要做的就是如何对于这些GPU进行一个资源有效的隔离因为其实我们想把GPU的管理和CPU Library一样就是用多少我给你多少也不允许你约权去访问你不允许访问的部分所以我们另一方面需要做一个GPU资源的隔离的工作这话就是我们相当于是刚才说的一点就是我们应对于这个cernal module匹配的问题我们相当于是把物理机的这个主机的可能主机的这些Library相当于我动态的去加载到这个容器容器的环境当中而不是在容器里面另外去装任到Library这样的话对于我的多多节点的继续来说我不论这个任务调度在哪一个节点上也许这些节点的GPU区谋的版本都不一致也没有任何问题因为相当于我都会把主机的一个Library去插入到你的这个容器里面保证我容器里面对于GPU能够正确的访问这个这个cernal module是个什么一样就是这个插入的这个专门是个大概是个什么样子大家可以看一下这个文件路径这个其实也是MVM Docker Plagin就是MVMT提供的宽软件它本身做的做的一件事情我们相当于相当于把这个功能去重新的去实现里面并且把它去集成到里面因为这段我们当时也讨论过是直接去把MVM Docker Plagin集成进来还是我们自己做一套这最终决定还是自己做一套因为这个其实设计一些第三方软件包的这个我们不想把更多的就是依赖于直接依赖于第三方厂商的一些东西去集成到Massos的内部所以我们选择了重新做了它的一个迷你的版本相当于我在Massos起来的时候它会检测我的我心中里面的GPU所相关的这些Library然后把它收集起来去收集到一个固定的路径就是相当于每一点差差点差差就是相当于我GPU的一个版本就是我把它全部收集到了一个特定的文件加下然后当我的一个需要用到GPU的进向起来以后我会把这个文件加下这个路径直接作为一个方向发布到这个容器里面这样的话GPU它就相当于我容器里面的应用程序就可以去访问GPU的顶级的GPU的Library从而达到对GPU资源的一个访问那么这块来说我们怎么知道什么时候去把这个进向去把这个Volume插进去什么时候不插呢这个其实我们会去检查到个Image的一个Label当然这个Label也是就是为两官方提供的进向它都是以这种即时去实现什么情况下去插这个Volume什么时候不插就是它会紧谈这个Label如果有这个NVIDIA 专门式的Label我就会把这个进向插进去同样经过这个就是具有这些Label的进向我必须在容器里面确定一些事情就是我插进去的这些Library什么在容器里面的环境里面它能够正确地找到这些Library所以需要我们在容器里面去把相应的这些这些Library的攻击去加上容器的环境里面如果我们要是自己去做这个GPU的进向的话我们需要进行下面这一点需要按照这个按照这个要求去写就是相当于把我的Mount这个点的全局路径我需要去写到它的环境面量里面以保证我这个Volume插入的话我的我的应用能够确定能够找到这些Library当然如果我们用Volume进向的话就没有任何问题因为它要做这一点这个就是我们现在对于GPU的做的隔离方面的一些就是我们能够实现的部分和不能实现的部分就是我们现在能够做到的可以说是对于物理的核心可以做到一个隔离就是说比如说我有两块GPU卡那么我只分给第一个容器一块GPU卡这个事情我们是能够做到的然后再一点就是对于可能有两块一个板子上的这种卡比如说这个特斯拉黑巴林这块卡就是一块板子上就有两个GPU核心那么我也可以做到把一个GPU的东西分进去但是另一方面就是我们做不到的是我只把卡内的一部分的东西分给你比如说这块铺搭炮的概念就是它和那个CPU比如说有4盒有8盒的概念一样当然GPU的盒非常多了现在最新的GPU可能有3天多的盒就是说巴里面的一部分它叫铺搭炮我把连四分之一的铺搭炮分给其中的一个任务这个事情我们是不支持的这个最根本的原因是因为现在微调的驱动本身都做不到这一点就是微调现在它的驱动允许多个应用跑败统一块卡上这个是没有问题的但是它不提供这些进程之间的资源的隔离包括我对铺搭炮的隔离和Memory和Memory的一些隔离Memory的隔离是支持的就是铺搭炮的一些隔离是不支持的所以来说我们这里做的这个GPU的share其实我们没有做GPU的share就是说我们允许的这个调布的异度只是单个物理的核心因为这样可以保证我们在使用的时候不会越界去使用到我们不希望的脑子资源当然微调它本身也是支持对于大部分的应用是不推荐GPUshareGPUshare唯一推荐的使用场景就是比如说我们用MPI或者OpenMP的这个任务我们会用到GPU的share所以在这里面为了就是还是为了说是对于资源之后有一个非常严格的掌控所以我们现在的社区版本是不支持GPUshare的当然我们自己还变的内部我们有自己的版本我们就是在我们自己的Floroco控的时候其实我们发现GPUshare是在某些在某些场景下其实是有挺大的形成提升这个当然大家也可以根据自己的需求可能做一些相应的感动其实对于GPU这个GPU这个它本身这个设备的硬设其实是这样的就是GPU这个东西如果是装到系统里面而且把驱动装上以后其实它出现可能是这几个设备就是我们上台DV底下在DV的路径下可能看到这些设备其中有三个东西是必须的Control InterfaceUnified我说UVM以及UVM POOF这三个是必须的然后它是通过这个微调灵魂微调一当然这是两块卡的情况三块卡可能还有微调二它拿这个东西去做GPU真正去做核心的隔离所以其实做隔离真正需要做的就是我们只把相应的微调的Data的Interface去放入容器中然后大家剩下的这些当然它的Control Interface还有其他UVM的一些东西是每一个容器如果我要用GPU都必须放进去否则它是不是有办法去工作的然后另外还有一点就是我们因为我们现在做的这个版本需要去需要去检测GPU的一些功能比如说我们会有Auto Discovery的功能就是我Metals起来以后我会自动地去检测系统的多好GPU还会去检测一些其他的信息我需要一个很微调的一个酷叫NVMM的酷所以的话这样的话就涉及编一个版本如果我编成NVMM了我把这酷编进去以后我其实更希望它既能够咱有GPU的机器上跑也可以咱没有GPU的机器上跑所以这里面我们其实现在是可以支持的是用了一个Dynamic Loading的一个技术就相当于同样的我把NVMM酷编到Metals里面编一个GPU的版本那么这一个编好的二级纸文件是既可以在有这个酷的有GPU的机器上跑也必在没有GPU的机器上跑所以真正上Metals是编一一编它就可以在我们所有的机群上去用同一套的二级级代码去把这个应用淘起来然后这个是我们现在的一些工作的进度就是现在的GPU的隔离其实我们想过的事情是既支持Metals Container Rider和Docker Container Rider而现在的进度是Metals Container Rider在Metals 1.0版本的基本功能以及玩片都做好了就是它能够做到GPU资源的自动的检测能够起一个任务去比如说我使用两个GPU资源然后我们的Metals与Qture可以去支持把GPU真正放到这个容器里面而且能够做到GPU的隔离以及我可以拿Metals Container Rider去起一个Docker的镜像去起这个现在然后对于Docker Container Rider来说现在只有现在这个功能在社区最新的代码里面还没有完全Murder进去只Murder一部分的功能这个大概很快很快代码就会进去就是以后Metals Container Rider和Docker Container Rider两者的功能其实是一样的只是可能随着大家的喜好去使用这里面就是我们需要去铲一下为什么我们需要去支持这两种方向其实这个这个也是从这个我们也和Metals Container Rider其实做过很多的讨论因为大家也都知道Metals Container Rider其实是以后未来的发展方向以后可能就叫Unified Container Rider但是从我们自己的角度上来说因为我们之前一直是用的Docker Container Rider而且我们从我们自己的限制就是当前的情况来说我们不想那么快的去转移到Metals Container Rider因为我们很多其实现在的已经用于生产环境内部的生产环境所以我们不想去冒这个陷阱就换所以当然还有另外的一些因素就是说是现在可能毕竟Unified Container Rider才当出来它还需要时间才能达到稳定所以相当于Docker Container Rider是作为我们一个过渡阶段的产品我们也是在衡量在不断的去衡量Unified Container Rider这个输出情况一旦它觉得它已经可以用于Docker的部署我们就会把我们的任务全部去迁移过去然后这块就是说是对于GPU的资源的用我们还需要注意的一点就是如果我们自己去写Framework或者去真正在上面跑用Framework的话我们给给了一个叫GPU Resources这个Framework的一个输出了一个Capabilitated Label这个是干什么呢就是说只有你指定了GPU Resources这个Capabilitated Label你上面的就上面的框片时候指定了这个Label它才能看才能收到有GPU的No的Final Offer其实这里是GPU这样一个考虑因为其实特别是在现续的在我们的集群里面并不是所有的机器都有GPU可能有GPU的机器只是少数那么这样来说我们希望的是我一旦有GPU的珍贵的机器被别的没有GPU的任务把它全都盛满这样我GPU的任务要跑的时候可能发现没有资源了这个事我们不需要不希望看到当然这个应该最好的最合理的解决方式我从我可能会制定相应的针对于GPU的调布算法但是现在因为这个事情还没有来得及所以作为一个最简单或者最有效的就是说我们去制定了一个GPU Resoutless的这个cabinability label就是我的方向时候指定了这个 label我才能去拿到就GPU资源但这些这些no的提的这个offer这样的话我任务才可能去调布到这些节点上然后另外就是我们在现在并没有提供对于这个GPU就是标label的功能但是并不意味着我们不支持整个集群里面有eGo的GPUk40有的机器是k80的GPU这个时候其实我们可以用简单的这个Agent的Antribute这种方式去实现就相当于我可以去检测这个GPU的Antribute然后把它作为一个label去打到这个Agent的上面这样的话比如说用马拉风去调布的时候我可以设Constrate让某一个人物质跑到某一个有GPU需求机器因为这个事情其实是需要的因为GPU型号不同它的显能可能差别很大甚至有一些GPU它的显存会比较少我一些大显存的任务可能在上面根本就跑不起来这样的话我们就可以用这种要Antribute的这种方法去把它解决怎么那么出了这么多现在这个我们如果想去用Massos的GPU的功能我们怎么样做呢就是说是首先我们的物理机需要装GPU的驱动这个是肯定的当然机器上也要有GPU然后再下来有Massos的这个东西其实主要是提供了我们刚才说的NVM L就是做GPU检测的那个投温键当然如果大家用比较新用版的驱动比如说敷大8.0以上的话这个东西就是Massos已经把它寄送到这个驱动里了这个东西就不需要单独装了装完以后就是我们在Massos的时候需要指定指定它的投温键的位置就是要指定一个GUNV的NVM L把这个指定以后现在就是Massos边域完以后GPU并且所有GPU的功能就会开启了然后再下来我们可能需要去准备GPU的Image这个我们根据Media Docker里面我无论是用它里面边域好的就是先程的这些倾向也好或者就是说我去按照Media Docker里面它有何Docker fare我们按照它的规则去写也好然后去失措自己的经向然后我去跑的话就是现在当然到关Cocker Rider现在还真正没有代码没有完整全份的进去如果完整进去的话它使用和我们使用其他的这个起Docker的任务没有什么区别只是资源上你可以去指定就是GPU就是GPU-S就是只配额外的CPU memory这些资源以外支持叫GPU-S这种资源你指定一个这个task就会其他有GPU的机器上而且把一个GPU去扣传到的容器里头然后对于MassageCocker Rider我们需要去指定两个flagAssociation of Flags就是CPU-SDevices和GPU-Media因为对于MassageCocker Rider的话我们的CPU的隔离其实是用CPU-S去做的所以我们给了两个flags去做一件事情然后就是说现在既有MassageCocker Rider又有Docker Rider那么我们两个东西怎么样去结合起来能走结合起来去用我们这个系统是怎么设计的这个其实是有一些渊源的就是我们整个从当时做这套GPU支持的这个眼睛的角度上来给大家说做一下因为最早的话其实我并没有在这个项目里面这个是Pilot就是Massage Faire的一位同事去真正去Innisfree这个工作的当时最初的版本是只做了MassageCocker RiderMassageCocker Rider一部分支持所以当时的其实这个架构大概是这个样子的就是说在这个系统里面会引入了两个额外的模块一个叫Volume ManagerVolume Manager它的作用就是它从后台相当于去管理这个GPU的使用以及为什么的情况它会从它会记录哪一个GPU已经被使用了哪一个GPU没有使用然后如何一个它可来了我把那个GPU分配给你去做这个事情然后InnisfreeVolume Manager它的作用就是我会去真正看哪一个哪一个容器我需要的GPU就是我会检测那个Dopper Label然后我会把它的Driver动态的插进去然后以及在Massage刚起来的时候我会去把所有的Innisfree的这些Libraries全部收集到一个不定的路这个是InnisfreeVolume Manager做的事情在最早的半分钟这两部分全部是在NVIDIA GPOS Later里面做的而NVIDIA GPOS Later它本身是在Massage Container Riders里面的一个组件然后先我们为了支持到NVIDIA Container然后我们相当于把这两个组件去真正剥离了出来就是把NVIDIA GPO Editor和Volume Manager真正的去从Massage Container Riders里面剥离出来现在它是两个独立的文化这两个文化其实可以被Massage Container Riders和Docker Container Riders所共享的现在最终的架构就是这种形式就是说我的Docker Container Riders和Massage Container Riders会共享这个 GPO Editor这样子的话简而一件的一个好处就是我在Massage里面即可一起Massage Container Riders的任务也可以一起Docker Container Riders的任务这样的话两个任务可以去Sale GPO的资源工作而不会出现说我可能一边把GPU用了另外一边还不知道就不会出现这种情况当然我的Volume Manager现在也是两方面可以去共享的这个就是对于Docker Container Riders我们做的一些工作因为这个工作也是最近一直在做所以这里面我们做的和Massage Container Riders不同点就是我们对于一方面是对于GPU的还有一部分就是对于我们GPU Driver的卷的加载完全都是用Docker Demo成熟的这种方式去做的比如说我们对于GPU Device的一些Escalation的Control我们是用Docker的这个命令去做的然后我们对于Volume对于Volume的管理是通过Gammaolume这个命令去真正把它漏了进来的相当于我用了Docker的方案去做这样一件事情所以这样的就是在至少在现阶段可以很快的达成一个满足生产完全要求非常稳定的一套系统而对于Massage Container Riders来说它的GPU Escalation是用是用Safe Objects去做的然后Volume的话也是相当于用Massage原整的一些方案去做的然后现在的就是我们GPU一部分就是Massage Container Riders这个刚才已经说了基本上现在所有的功能都已经支持了是在Massage 1.0以后就已经完全支持了包括它也可以使用Docker的经向去真正去起的任务然后对于Docker Container Riders支持现代Massage的部分的代码剩下代码在Volume中应该也快就是我们可能会在Massage 1.1或者在1.2版本真正release然后当然我们还在Ecosys里面做了一些其他的知识比如说马拉松马拉松我们现在对于Massage Container Riders现在马拉松是支持使用GPU的这个是在马拉松1.3版本里面支持的然后对于Docker Container Riders的话其实现在前代码也是支持的因为我们Massage ContainerMassage的Docker Container Riders现在其实没有代码没有真正闷的进去所以马拉松相当于我设置了一个Fuelter把他这个功能给进用掉了所以一旦Massage支持以后马拉松我只要把这个Fuelter取掉就可以完全提供支持然后再下来就是我们的Massage and Messages这个其实我们现在明年明年也有去支持这个GPU的打算因为我们相当于会用这个东西现在也正在设计中看看怎么样去对这个GPU提供支持然后这里还想说的一点就是Massage 1.0以后就是包括我们GPU的这些Features现在除了支持X86的服务器外面也支持IQM Power 8以及Women Power的服务器这个现在都是碗片兼容的包括Massage 1.0以后的版本对于Power 8的服务器是完全支持的就是编辑方法都一样大家在X86上怎么编辑在Power上怎么编辑怎么跑就行了然后在Power上的话这是我们System Team的一些试测的结果它还是有一些性能要是优势的因为其实Power的机器它主要的主要的比X86的优势就在于它的单核的多线程的处理能力所以当像Massage这种标度框架去处理比较就是负载比较重的多级程的任务的话它其实还是相对有比较大的优势然后这些就是外面的衣服大家也用太想去的去看可能关注的一点就是中间那个就是相当于如果大家是用GPU的话就是考虑在自己的新的机器里面想添加GPU的服务器的话可以考虑还变Power这款服务器因为它是支持现在最新的NVLinkNVLinkNVLink是NVLink里面的技术就是说它的代表会比现在传统的PCIe的3.0要拍2.5倍所以现在在X86上面就是GPU和GPU之间是NVLinkGPU和CPU之间是PCIe 3.0然后在Power最新的这个8L C4 HPC上面就是CPU和GPU之间也是否则VLink相当于大大提升了内存的带官这个是我就是想特别感谢的一些合作者其实这里面列出来的当然不分先后顺序了我可能只是平时交流的有的比较多有的少一些开了是真正是这个项目的这个相当于发起人包括Messus Container Riders也基本上是他做的然后Ridic和我是一块做了Double Container Riders的一些工作当然后面还有其他的包括IBM以及Messus Fiat Twitter的一些同事还有Media的一些同事去做了做了一些这个项目的问题包括很多的工作所以这里特别感谢他们最后就是我给大家带来一个小的Demo当然就是我们也是产用录像的形式因为也受现场的这个场地限制就是这个就是一个很简单的一个应用就是我们去利用Messus和马拉松去起一个利用GPU的Cognitive一个一个小的Demo大家可以跟随我看这个显示有两个问题不过没事也不影响大家看现在我把GPU编译进去以后这一格我们就会在Ugent包括在手机上就会看到有GPU资源的信息比如说我这台GPU有两个GPU我就会看到现在有两个GPU没有用然后就是可以去使用这样的话我们在马拉松里面我去起一个任务当然这马拉松我们用的也是支持GPU的一个版本一台机器然后我去在马拉松上面去Pose的一个任务而且这块再解释这个整个Demo是在我们的Power环境下去跑的其实在X86环境也是一样的对这个是我们马拉松的Yaml文件大家需要注意看这块其实是GPUGPU就指定了有一个GPU就这样的话我们就可以真正的去使用机器的GPU资源了然后我们把这个应用去Pose的上去Pose的话Pose上然后大家现在马拉松的机面上我们还没有做出修改就是在机面上其实是看不到用多少GPU的但是它的后台会记住然后这个应用就真正的现在已经Rawning了Rawning以后我们可以看到这个GPU已经有一个是Use的了就相当于还剩了一个空前的GPU这个时候我们从福利默克也可以看到这个任务赞成了一个GPU的资源Agent的这一页也可以看到就是总共是两个现在分配了一个资源然后我们就可以去访问一下这个应用这个应用其实是一个小dialog就是大家能不能看看就知道了听到意思就是我们做的一个小dialog就是它背后用一个深度训计的模型我们去上海让我自己的照片电脑会给你一些比如说你猜测你喜欢看什么电影看什么喜欢那些歌手之类的信息其实后台它是根据你的年龄和性别做的一些推测不好意思说错了这个是另外一个应用这个应用其实是看你和哪个明天两个对象我好像最像一个韩国的明星对 这句话用的是这个dialog这句话就是我们也会在CPU和GPU共同跑当然这个值不是说是真正可能性能上差别就那么大其实因为我们越不是去集体去衡量CPU和GPU的性能对比只是访问这个API它后台还有其他的一些操作但是一般来说使用GPU和不使用GPU它比对深度学性一般是有10-20倍的性能提升然后这个微电SMI就是一个小伙伴有微电屁股的命令我可以看到上面任务是真正是起到了GPU上就是说我容器里面真正是用到GPU的这个就是我真正起的TAS在那能看到对 然后我把这个任务删掉以后我再去看微电SMI底下那个任务就没了上两个因为这台机器相当于是还有别人在用还有它就释放掉了那这就是DEMO也就这么多也就是说今天呢我的眼点也都到这了就是大家有什么问题吗我看时间好像还正好大概有五分十分钟那个您好因为我之前在刀客上也用过GPU然后也看过NVIDIA刀客的那个插件然后用的情况我有几个小问题想跟你沟通一下第一个就是GPU监控的时间然后目前看起来的话在物理机上监控是很正常的然后在容器里边的话因为NVIDIA那个驱动它PID监控用的是物理机的PID所以在容器里面监控是有点问题的所以不知道你们这个有没有解决因为监控的问题我们在本身在MISOS里面现在还是没有做的就是MISOS里面我们想就是也应该就是不久吧就是我们把刀客可能出来的功能做完我们会就是把MISOS那一块去暴露GPU的一些使用的信息别说这个问题我们也遇到了其实就是因为在容器里面它的那个PID值和物理机看到PID不一样所以你超越NVIDIASIMI是看不到任何东西的这个我们浪费在公司单上解决了就是还是从主机相当于主机场景区前空如果从里面的话建议可以使用好像是浪就是在刀客里面它有一个专属对抗PID对因为这种方式因为现在暂时来看也没有够好的方法那个刚刚你只是提到过GPU组网的事情就是OpenMP还有MPI的这些然后我想问一下你们组网上有什么经验分享吗因为我们这边就是有用过万招网卡和Infinity Bomb的卡然后想听一下你们是不是有这方面的经验组网的话其实我倒是没有去做过但是GPU来说组网我觉得用的比较多的还是这个Infinity Bomb的吧就是我没有相关的这些测试数据刚刚你分享刚开始的时候说那个Isolation是有Percard和Percode然后我不清楚这两个的区别是什么因为我这边用的时候都是Device就是Device隔离的那种其实我说的PercardPercode其实就是你说的你的Device因为可能有一些有一些朋友可能对于GPU他本身就是可能没有接触过就是因为有的卡它是一块卡里面就一个盒了大多数卡可能像比如说K40那么一个卡插上以后你看的就是一个Device但是比如说K80它是一块卡里面其实是两个盒形它插到上面就是两个Device其实就是对于Device你好我问一下因为Messure StudioMessure 仪式电机就是从开咖啡店从Messure 站起来的新电机它在一个机制里面现在的GPU 迫爆迫爆应该怎么去进行这一套机制的话因为UnifiedNessure Studio的仪式电机没部分代码其实我没有去看过但是如果从C功夫本身来说我觉得应该是说就是可能需要的通购量能也不见得很大从技术上也应该支持因为我们现在也在 United 上做过类似的东西它那个炮的其实也有点像那个我们也是做类似的方法你好刚才我听了您的那个讲座里做的然后就是说我们的做法原来都是就是说CPU和就是Lower 这种方式挂这个GPU和那个运贩什么的挂GPU这边现在已经实现了两个功能互相指导现在这个技术是说是开点的还是能稍微这个技术其实是开点的只是现在代码还在review中所以当时跑程的Rider这一部分代码现在没有完全的就是进引Massos的Massive Grant但是应该我觉得在在半个月到一个月之内吧应该这部分东西就能够进去就大概就真的能用脑但是中国这把来说就是包括我们内部去使用了是有这个版本就是两百多支持其实不远的将来会两百多支持的朋友有问题吗其实我这里想再多说一点就是刚才就那个oppa的问题其实现在我们在里面还有一个工作后面想做的就是对于GPU的那个拓补结构的一个Valence因为这个也是我们实际遇到的一个问题比如说两块GPU从现在来看如果他们不在意的PCI Bridge上的话他们屁股屁股其实有问题的这样的话有一些应用可能比如说现在的咖啡他会用到两个GPU这样跑的话就会有问题所以这一步但这一步的Massos上设计可能不是那么容易这一部分可能会花些时间但是这也是现在存在的一个问题如果没有问题就谢谢大家