可以给大家分享一些关于KBS集群上面的混布还有最远利用率相关的一些事情首先简单的做一个自我介绍我叫陈鹏浩来自蚂蚁金服系统部然后现在主要做的一些工作是KBS集群的一个调度还有最远管理还有一些混布相关的事情然后另外一位speaker是来自阿里云的合建他今天身体不舒服然后没到现场来我们今天想分享的内容大概是分下面的这样一个过程首先是我们给大家介绍一下我们在大规模的落地KBS集群之后遇到的一些自愿利用率的一些问题包括我们的一些思考然后接下来我们会给大家介绍一下我们的集群里面的运行的任务的一些分类接下来我们怎么样在KBS上面做混布的这个可能是一些技术细节的一些东西最后想给大家分享一下我们现在做的一些结果首先是我们的集群的规模然后现在蚂蚁所有的生产集群都全部被KBS接管了大概有十几个集群然后最大的话一个集群可能有上万台的一个node然后其中会有数百台的是GPU的node然后这些GPUnode是和GPUnode是在同样一个集群里面的然后在这些集群里面我们运行大概数十万的pods其中会有上万的是drops就是说大家平时可能会接触到的一些计算类的一些任务然后这么大的一个集群规模然后带来的一个资源的成本是非常大的所以说当我们在落地了KBS之后我们遇到的一个很明显的问题就是说我们的资源利用率的问题然后提到资源利用率然后这边给大家看了两张图左边是trigger的一个资源利用率的情况然后右边是google的然后这个图是我从网上找的然后是几年前的一个数据它的横坐标就是一个CPU的利用率从0%一直到100%它的纵络标就是一个时间片段可以认为是它时间占了一个比例从这样的图里面可以看到tintel这边大概是在20%左右的一个CPU利用率然后它会有一个4到5倍的一个提升空间当然是按照100%的算然后google这边大概是在30%到40%的一个利用率的情况会有一个3到5倍的一个提升空间这个是大概几年前的一个数据他们现在的利用率肯定是比这张图里面的应该是要高的然后我们落地玩KBS之后遇到的一个比较明显的问题就是说我们整体的利用率是比较低的大概在一两年前我们遇到的这样一些问题然后我们这边总结了一下为什么说我们集群的利用率比较低第一点就是说为了保证一些延迟敏感的任务不受到一些影响我们最开始的做法就是说把一个大的集群人为的划分出来很多的逻辑的池子然后每个池子里面单独跑某一类的一个任务这样的话它的隔离虽然说是最好的但是整体的利用率并不是很理想然后第二点就是说我们发现资源的分配还有资源的使用它就有很大的一个概谱的就是说你虽然说集群的资源都被分配出去了但是它的一个利用率的效果并不是很理想大家看到集群的水位就说已经分不出来新的容器了但是它实际上在用到的资源是比较低的第三点就是说我们运行的这些任务的利用率它是随着时间变化然后有一个比较明显的一个波风波谷的这样一个现象举个例子就是说我们那些在线的一些随着这个白天流量的起来之后它的一个利用率就很明显就上来了到了晚上没有流量的时候利用率很明显就降下来了最后一点就是想给大家表达的一个意思就是说我们的硬件设备是eGo的包括它的一个大小它的一个类型还有它的一个性能都是不太一样的同样的一个任务可能跑在不同的硬件平台上面跑出来的一个利用率的效果也是有差异的然后我们刚才也提到了我们有了一个大规模的集群然后诞生了它的利用率非常低即使你提高一个资源利用率对整个集群的成本的解决是非常明显的像你有一个烧万台的规模的话你提高百分之十的利用率其实可以节省的一个成本是非常巨大的就是数千万或者说上亿的这样一个规模刚才就是给大家分享了一下我们落地484然后遇到的一些利用率的一些问题然后接下来想跟大家聊一下目前在集群上面运行的一些任务就是说我们想提高利用率的前提就是说我们要熟悉我们集群里面运行的是什么样的一些任务这边给大家裸立了两种任务的分类就是在我们这边会把集群里面运行的任务分成这样两种一个叫long running的一个service然后另外一个叫drops然后不同的维度然后我们来看一下这两种任务的一个分类有什么样的特点service其实它就是一些在线的一些应用它一般是承载了一些在线的一些流量比如说一个电商的一个网站或者是一个支付的系统它其实都是一些在线的一些应用然后它的一个latency的一个敏感性是非常高的就是说当你延迟比较敏感的时候对用户来说就是一个比较卡顿的一个现象然后它的一个优先级也是比较高的就是说当你在调度或者说在做资源分配的时候它是最高优先级来分配的它的一个流量的特点刚才也跟大家讲过了就是说它在白线的时候是有一个很明显的峰值的到了晚上的时候它的一个利用率就很快就降下来然后它对一个错误的容忍也是有自己的一些要求的就是它一般是不太容忍不太能容忍说失败然后它就是说需要一个比较高的一个可用性然后drops这边给大家举了些例子就是比如说我们一些数据的处理Spark还有Link 还有Chart Boost它有一些AI模型的训练其实都是一些drops类的应用然后它其实对延迟不是那么敏感的它一般是按照一个机线的一个提起来运作的比如说它提交了一个drop它告诉你说我只要明天早上8点你能把这个计算的结果告诉我就可以了它不关心你中间是什么时候给它真正的跑起来然后它的一个优先级也是比较低的它可以容忍说我在整个调度的时候喷领在那里然后当你有资源的时候就可以当你有资源的时候就给我调度出来就可以了然后它的一个流量的峰值其实跟在线的不太一样然后它其实一旦运行起来它就很明显就会看到它对资源的需求是比较疯狂的然后很明显的一个峰值就会起来了但是它有一个好处就是说它可以容忍失败就是说我一次运行失败了之后我可以通过retry或者什么的最终防我运行成功就可以了这个是我们集群里面运行的大概大概这样两种类型的一个任务分类我们了解了我们集群里面的任务分类然后我们也了解了我们现在集群的一个虽然利用力比较低的这样一个情况然后我们怎么样来解决这个问题我们首先考虑到的可能跟大家平时接触到的也差不多就是说我们能不能做超卖超卖就是说我让这个集群分配更多的任务跑上来这样的话是不是说我的利用力就会上来了其实超卖是一个比较危险的事情这边给大家简单的聊一下就是一个不可控的超卖其实是比较对集群来说是比较危险的然后你不能说我随便的就把集群给超卖掉然后第二个就是说你超卖要根据你动态的一个弄的上面的一个负载情况然后来做超卖比如说当它负载比较高的时候其实你是不应该来做超卖因为它已经随便比较紧张了当它负载比较低的时候你就可以适当的去做一些超卖超卖的时候其实也是看你资源类型来生的有些资源是可以被压缩的比如说CPU大家都知道它是可以被压缩抢占这样一些特性在里面的但是其他一些资源比如说磁弹还有内存其实是不可压缩的资源在这种不可压缩的资源上面你说超卖的话其实也是比较危险的下面一个大的一个预告就是说auto memory这样一个事情就是说平时大家可能在生产的时候也会遇到这样一些情况你把内存超卖多了之后其实你会发现机群里面很多的任务都被OMQ掉了刚才聊了就是说我们通过超卖其实是可以部分的提高资源利用率的但是它不是一个比较好的方法然后我们经过我们的思考其实我们更推荐是从资源的维度然后来做一些等级的划分这边就是说我们会把资源分为两个等级一个叫高优先级的资源一个叫低优先级的资源然后高优先级的资源就给一些在线的service来用低优先级的资源就给一些离线的drops来用这个是我们这边做资源利用率的一个原则吧就是我们首先是要把资源划分成不同的等级的不同的资源等级然后来应对不同的场景然后这两种资源等级中间的一个隔离是一个关键点然后下面会给大家详细的介绍一下这边就是我们两类资源等级的一些特性嘛然后左边是一个production的一个级别它是用来给在线的service来用的右边是一个proemptable的一个资源等级它是给离线的一个业务来用的它们两个的区别其实还是比较明显的左边其实是有一个SLO的保障就是说你一旦申请了这种资源的话然后你是可以保障说你一定能用到这么多资源然后它是不可以被驱逐的就是说你一旦用了这个资源之后它是不能抢你的这个是一个它的特点再就是在调度的时候它是一个高优先级的调度然后右边的一个proemptable的一个资源就是说我是没有SLO还有保障的就是说我当机群有的时候当机群里面空险资源多的时候你可以给我但是当它没有的时候没有资源分配给我也无所谓只要你最终在我的机线之前能把资源给我就可以了然后这样一些资源的一些特点就是说它上面运行的任务是随时可以被杀掉的就是当你机群紧张的时候我可以把一些proemptable的一些任务给杀掉然后来让度给一些在线的应用来用然后在调度的时候它也是一个低优先级的一个调度这边其实还少画了一个内容就是说左边的PRODUCTION的资源是要济费的在我们这边是要申请預算的就是说你不是说任何一个业务来了都说我要用这个生产级别的这样一个资源因为大家都知道左边的资源比较好但是这边是要有预算的就是说你要花钱你可能要用左边的资源右边的资源是我们不用花钱不用预算的就是说你只要你机群里面有的话你能给我跑下来就可以了所以说这个是比较大的一个区别连完了资源的分类就是有高优先级的资源也有低优先级的资源然后他们上面的任务是怎么样来做隔离其实我们跟大家的做法也差不多都是利用了内核的sqlub的一些技术但是可能蚂蚁跟阿里这边它的一个特点就是说它的内核是自己做的它的一些里面很多东西可能就是自己在里面加了一些特性我们这边用到的一些sqlub隔离的参数大概有这么几个维度GPU上面我们会用到一些sales和quota它有一些cost的一些概念就是绑合的一些概念Malry可能就会去设一些它的一些limit的限制然后disk也会通过Block IO的一个设置然后来做到不同的等级的一个区分然后网络上面我们会根据网络的优先级然后还有它的不同的带宽然后来做一些配置这个就是具体到内核里面的一些参数的设置这个其实都是一个经验值可能有些参数在我们这种场景下面是可以的但是可能在别的一个场景可能就不一样了这个是需要去调的参数这边我们做的一个比较大的一个特点就是说我们会在根组上面就做一些文章刚才给大家讲了就是说我们的任务是去分为两个等级的一个叫sales一个叫drops所以说我们在node-level的这个sqlub上面就给它划分出了两个根组这边大家可以看到这边左边是CPU的一个根组然后右边是Malry的一个根组然后在它下面直接划分出来两个目录一个叫sales一个叫drops然后内存这边也是一样的然后sales这边的CPU可能我们会给它分配70%这样一个比例然后drops会给它分配30%这样一个比例就通过刚才讲的那些sqlub的拆数然后来具体来设的这里面一些细节可能大家需要下去自己去看一下因为这个技术已经比较重塑了然后右边是内存的一个分配它就是1比1的这样一个比例然后这些拆数其实都是可以配的就是用户或者说集群的管理者可以自己来定义的就是当你发现说哪个比例高了哪个比例低了的时候你可以自己去动态的调整然后我们有了任务的分类还有一个资源的一个等级的划分然后这个时候我们就可以来做这个混沌了然后我们这边有一些做混沌的原则第一个就是说drops是不应该来影响到service的就是说你既然是一个低优先级的任务你就不要再瞎搞事情就是不要把我在线的service给搞挂掉了第二个就是说刚才也跟大家聊到了就是说service它拿到的是一个guaranteed的一个资源drops它拿到的是一个没有保障的一个资源第三点就是说我们在service这个资源的纬度上面我们是不会做超卖的因为这个对我们这个金融级的一些应用来说它的稳定还有可靠是第一位的然后它的那个就是说我们如果做了很多超卖然后造成一些资损就是说你付款的时候或者什么时候你的企业算丢了这个其实是责不偿失的一个事情然后第三最后一点就是说drops其实它虽然说是可以被任意的杀掉然后它也可以任意的被压制但是它也不希望自己就是一点资源也没有它也不是很开心如果您给它杀得太厉害的话对所以在后面我们会通过一些动态的负载的一个技术来帮它避免掉这样一个现象OK之前都是一些背景就是说我们在大规模机群众地的时候遇到了一些资源利用率的问题然后我们通过一些内核的seagloob的技术然后来解决这样一些问题对主要的一个原则就是说我们会把资源分为高右线级和低右线级两个等级然后当我们就在蚂蚁还有阿里大概三五年前就已经成熟了然后但是我们最近是在做KVS所以说我们要在KVS上面把这一整套东西落定又是另外一个话题然后这边给大家裸裂了一些现有的KVS的一些功能然后我们都会在接下来给大家一一的介绍一下一个是Cublet里面有一个CPU Manager的功能不知道平时大家有没有用到有用到的飞机下不是很多因为这个功能其实当你真正在用的时候其实不是那么好好用这个是功能然后第二个就是它一个Device Manager的一个功能就是说它可以你自己定义一些扩展的资源这个其实用起来非常好用然后另外就是APS Solar里面我们会在它的一个admission阶段然后来做一些工作第三个组建我们设计到的就是调度器因为调度器它我们没有用社区的调度器我们是自己写的调度器有兼容社区的那一套API然后它也支持这种扩展资源的调度最后一点就是我们会探讨它的一个POS Class的一个设计然后继续聊一下POS Class不知道大家平时有没有关注到它那三个POS Class还说大家就用的时候就不太关心这个POS Class就随便用其实它的那个POS Class就是是一个怎么说它是一个影视的声明可能很明显的告诉计从说我这个POS到底是用的是Bass Effort的资源还是说一个Garantee的资源它其实是这样来区分的大家如果用过的话应该是知道的就是说当你的Request和Limit都不设置或者说都是零的时候它就认为你是一个Bass Effort的一个POS这个大家应该都了解吧OK这个其实在用起来的时候我们发现不是那么的方便然后下面会罗列一些它的一些问题具体到一个POD下面的CPU的一些C Group参数的设置它是根据你的Request和Limit来设的这个大家应该都知道吧对因为它的Limit是零然后导致的一个问题就是说它可以当你没有一个上限就是说它是可以当一个POD它那个比较暴力的时候它是可以把你整个机器的资源给滑满的尤其是一些AI的训练或者什么它们是没有一些现成数的限制或者什么所以在这一线它能看到POD和它一下的把现成数就起得非常高然后这个就会对我们的一个单几点的一个稳定性造成比较大的一个问题然后第二点就是说它的Request也是零这个会有什么问题呢大家如果做过调度的话都知道就是调度器是通过Request值来进行调度的就是说它一个节点上面可以分配多少资源是按照Request值来进行这个资源的一个统计的Request是零会带来一个什么问题呢就是在Node上面我到底分配了多少的Bass Effort的POD虽然说它在Node上面有一个POD最大限制的那样一个数量比如说它默认的是110个POD这样但是它其实用起来也不是那么的方便然后再就是它里面的根据POS Class然后到具体的POD下面的一个C Group的一个配置它是一个隐释的一个配置就是说你是不能自己去定义一些参数的其实在那个社区里面那个CPU Manager里面是这样实现的就是它对这个Bass Effort这样一个POD它具体到C Group配置的时候它的那个CPU Shares说的这个是2在那个CPU quota它说的是-1就是说quata就限制一个上限然后shares是限制一个下限这个其实这样两个写死的值然后对我们真正在落地上要去调的时候其实就是很方便然后我们为了解决这个问题就是说我们这边就通过在POD上面加上一个标签然后来显示的告诉系统说我这个POD到底是不是一个Bass Effort的POD这个就是比较简单的一个实验就是Label的名字就叫Costome点QoS然后等于Bass Effort然后为了解决刚才提到的就是说社区里面QoS的一些问题就是我们用起来的时候感觉不是那么方便的地方我们在下面会有一些自己的一些手段一个就是我们扩展出来一个新的资源我们这边叫红布CPU或者叫Colour Patience CPU这样一个新的资源它是通过Device Plugin然后注册到Qoblet里面的我们为什么要做这样一个事情呢其实下面会有两个解释一个就是说我们刚才也聊到了CPU是一种可以压缩的资源那么既然它可以压缩的话我们是不是可以认为CPU资源是一个无限的资源就是说我可以把CPU分得很满然后因为分得很满的话只要我隔离做得好的话它其实之间的影响是一个可控的状态我把一个Node的CPU都分得很满然后这样的话我就把一个两维的一个资源分配或者叫三维的一个资源分配就统一到了一个内存或者磁盘的这样一个不可压缩的资源上面去就是说我在分配一个资源的时候我就不需要关心它CPU到底够不够了我只需要关心它的内存够不够了就可以了这一点大家能不能介绍这个是我们这个设计里面的一个关键点然后用户其实在用的时候它是不知道说我用的到底是混沌的CPU还是说是正常的CPU然后我们通过它打上标签然后我们会在APS Serial的Admission阶段自动的帮它修改掉它的资源的请求值然后因为我们扩展出来了这样一个混沌的CPU所带来的好处就是说调度器它可以根据这个扩展出来的资源来做一个调度具体调度到每台node上面的一个drop的数量是可控的所以说我调度器里面其实是知道说我到底分配多少资源给破的然后最后一个就是说我们刚才也聊了就是说社区里面的对cgroup还有下面具体到容器上面的一些参数的设置是一个默认值就是说你没法修改的我们这个方案很大的一个需求就是说这个参数我们是要能自己来修改的之前都是给大家聊的一下我们做的一些思路这边就是一些具体的实现然后首先是在APS server里面我们会在admission的 mutating阶段会给它加一个plugin然后这边做的事情就是左边大家可以看到这边有一个port然后port上面我们打了一个BassApple的一个标签然后它正常的资源还是一样的就是说request.cpu12然后它的limit的cpu是4然后经过这个Mutating阶段我们会给它在port的amountation里面设置很多的cgroup的一些参数比如说我们这边会有一个cgroup parent的一个设置就是根组的设置根组就对应了刚才讲到的我们在物理机上面cgroup下面直接会有话分出来两个目录这个就是那个目录的名字然后cpu-sys就是根据它的一个request值然后来说的cpu-cota就根据它的一个limit值来设置然后resource下面的一些修改就是说我们会把它原来正常申请的cpu都修改为0然后给它扩展出来扩展出来这种稳固的cpu就是它不会去占用在线的那样一些cpu这个大家可以理解吗这个还是比较简单的然后第二点就是说我们在cubelet里面然后扩展了cpu-manager这样一个policy它原来那个policy就是那个letic的policy其实就是一个限制比较多的一个用法然后我们扩展的就是说cubelet就只需要帮我把我在annotations里面定义好的这些拆数给我刷到容器上面就可以了我在annotations里面给你写什么东西你就无脑的往下面刷就完了你不需要关心具体的这个拆数是怎么来的这样的话我们做到的就是说cubelet是在生产的时候其实是不应该被经常的升级的就是说它的升级会带来一个比较大的问题就是因为你要把所有的弄都刷一遍这个周期是比较长的然后但是我们这些cgroup参数可能是经常要改的当我们要改的时候只需要在刚才APS-ROW那个地方给它就改掉然后具体到下面去刷的时候它就会帮你无脑的给你刷上去就可以了然后左边就是刚才经过APS-ROW扭推艇阶段就改完了一个坡的然后右边就是具体到每个容器上面的一个host config的一个配置然后容器的那个round time就是根据你这个host config值去把你具体的每个容器刷到不同的这个cgroup跟着下面OK然后另外一点就是说刚才也给大家介绍了我们会扩展一个叫Colocation CPU的一个资源它也是通过一个叫Resource Agents的一个组件然后来实现的它其实就是实现了一套社区里面比较的plug in的这样一个接口它其实主要做两件事情第一件事情就是根据每台node的动态的负载然后来上报它就有一个混沌CPU的一个资源的大小比如说当它负载比较高的时候我就把混沌CPU可能就不上报了我不让这台node再来调度一些drop上来了因为它的负载已经很高了我不需要再用drop然后来拉发的这个TPU利用率当它负载比较低的时候这个时候我可能就上报的混沌的CPU就比较多一点这样的话我调度上来的drops就会比较多OK然后它做的另外一件事情就是说它会根据我们一个configmap里面的配置然后来把物理机下面的那个sigloof根组的参数给刷到机器上面去就是说我们刚才不是讲了吗就是在物理节点上面我们会有这样70%或者30%的一个配置右边是比如说50%对50%这个配置其实是写在一个configmap里面的我们会根据不同的机型然后根据不同的内核还有一些不同的什么版本然后可能这些参数都会不一样然后这边resort agent要做的事情就是说它去读取configmap里面的这些具体的参数然后给它刷到物理机上面然后它是通过demonset来部署的就是每个node上面都会部署一个这个也是一个比较关键的组建就是它主要是为了做我们在每个node上面可以动态地观察到我每个node的一个负载情况然后根据负载情况然后来上报我不同的一个资源这张图想表达的意思就是说左边当我机器的负载比较低的时候我上报的可以恐怖的资源就比较多这个时候我调度上来的drop就比较多一右边就是当它的负载比较高的时候我可能上报的一个恐怖的资源就比较低这个时候它可以调度上来的drop就比较少主要想表达的就是这个意思还有一个就是说我们会在通过这个组建在每个node上面去做一些auto-profiling的一些事情是什么意思呢就是我们会去采集一段时间的这样一个这台node上面的一个利用率的一个情况然后根据一些画像值然后来历史值然后来做一些预测或者说这样一些事情这个是正在做的一件事情OK上面给大家聊的就是我们在开白色上面怎么做混布包括我们遇到的一些问题然后还有一些解决这些问题的思路还有怎么样在开白色上面落地这样一些技术然后怎么样在兼容社区API的情况下然后扩展出来一些自己的一些特性当你想要做drop调度或者说做计算类的调度然后在开白色上面的时候其实还有一些额外的一些工作我这边给大家简单的介绍一下一个就是我们会通过CRB来实现一些自己内部会用到的一些功能一个叫CRUSTLE LAW的一个Quota社区里面的Quota是Name Space级别的然后我们在用的时候其实我们要多的一个场景就是说我们需要跨Name Space的一个Quota因为当你在做优先级调度或者是抢占调度的时候Quota是一个必要的一个输入这就是Job它其实对GunScape就领是一个比较大的需求当它的AI训练或者说Spark这种计算类的业务它可能一下子就调度从百上线起来的quad现在的调度器社区里面调度器性能是比较差的我们这边通过Quota Group的一个概念实现了一些GunScape就领的一些功能第二点就是刚才也给大家提到了我们会做资源画像会采集整个集群每台Node的在一段17内的一个资源利用率的动态的一个情况包括每个应用的一个资源利用率的情况这个其实当我们有了这些数据之后后面我们想做VPA或者HPA的时候就有了很多数据的支撑第三点就是刚才也讲到了我们这边自己做的一个调度器它是支持優先级还有抢占调度的这边就是给大家再把今天的话题整个串起来我们是怎么样做的就是说每个Node上面会有一个Resource Agent在这边会有Resource Agent它会动态的去商到一个符合的资源它也会把每一个Node下面的Cgroove根组的参数给配置好它商报出来的资源之后我们就多出来了一种CPU的资源这种CPU资源是专门给Drobs来用的然后左边用户提交了两种不同的类型的应用一个叫Drobs一个叫Service然后我们通过APS Server的一个Mutating的一个功能然后自动的把它的一些资源值给修改掉就是用户是没有感知的比如说我们把Drobs就修改成了这种混布的CPU资源然后经过调度器的一个调度其实就可以把整条列录给串起来了这个是一个整体的思路OK 这个是我们的一个效果然后这个是Service如果说只是它自己单独跑的话大概是一个10%到15%的这样一个利用率是一个比较低的一个状态然后当Drobs它单独跑的时候其实可以达到20%到30%但是我们觉得也不是很理想因为我们想做的一件事情就是说要打破整个机群里面划分的各种各样的小池子就是说让整个机群都统一的来调度然后当我们把它两个混不到一起的时候其实是可以达到一个30%到50%的这样一个效果就是这个收益还是比较明显的就是说我们在不采购新的机器的情况下我们可以在机群里面运行更多的任务我们想要达到就是这样一个效果然后我今天的分享大概就这样上面的这些内容然后再给大家安利一个项目就是我们跟阿里云一起搞的一个OpenCross的一个项目就是后面的我们现在做的一些可插靶式的这样一些divide plug-in还有一些admission的插件其实后面都会慢慢的往这个项目里面去挪然后谢谢大家我大概今天分享这些还有五分钟的时间大家可以提一下问题吧这我的微信让大家感兴趣可以加一下我想问一下对Scheduler的扩展是做成了一个extender是吗不是 我完全重写了完全重写了吗对 因为吊子器它重建起来很容易它其实吊子器也是一个砍头那儿只不过它做的事情就像一般是完全意害的方式来写吊子器对 因为我们这边在落地的时候有这样一个背景就是我们不是以下的完全就是通灵然后跳到KBS的我们要兼容以前的一些Sigma的一些系统OK所以说吊子器是中间的一个桥梁所以说我要做到这个平滑的顺地你好 我有两个问题一个问题是它讲的co-location的CPU是只是给job用的吗还是service会用吗service都不会用就是给job的吊头场景用的对然后那个GunSketling跟Software的互联系有联系吗没有联系没有联系刚好大家都叫Port of Graph对因为我们做的时候可能还不知道很了解社区里面已经叫这个名字然后就也叫这个名字碰巧看到大家的手脚谢谢你没有放肯定一下你好 我想问一下就是co-location的CPUSoftware根据Node的负担会做变化吗如果一开始它调度这些job的时候它那个service的负担比较低所以你可能调度了比较多的job上面然后如果它之后service的负担变多了它的负担变高了之后那么也是通过你们result agent的上报就改co-location的这个CPU results再去preemptive kill掉那些job是吧是吧你说这个问题会有一个实验的一个问题确实会有的怎么样能快速的做到一个响应一个响应这个是我们现在重在优化的一个点对其实我的问题跟刚才比较相似就是在做超慢的时候就比较重要一个就是怎么做evision对对那你这个evision跟就是开完自己本身的evision策略之间怎么配合或者有什么不同的因为你我会说你这个你co-locate的那个什么invice plugin如果说动态网上报扫的话那一份位子本要来做一个evisionevision在网上报来怎么样的就是说你们这两个怎么配合好像那不冲突我们evision不会在本地做我们都是在调度器里面做的就是说所有的判断逻辑都会放到调度器里面然后我们对evision是一个非常非常谨慎的一个态度就是说因为我们的很多在线的业务是不能被杀的一旦杀的话就会出很大的锅了就是这样一个问题所以我们在evision这边会单独的会去做一个evision的一个组建就是说我们会加很多的checks比如说label或者说一个属性或者什么各种各样的checks当一层一层的checks过了之后我们才会真正去pure它这个就是一个取舍就是说你要的是快还是说要的是一个稳我们这边选择的是稳就是说我们可以容忍它在一两天之内可能是一个利用力比较低的一个状态但是当我发现之后可能在两天之后就新的作品上来了这样的一个对你好我刚好就是粉布的这块比较感兴趣就讲说是一个深度学习的训练你们是现在放到你们粉布的场景里面了吗是的那么深度学习训练的时候它大量的分用到GPU我们的显存还有大量的memory还有大量的进程数这样的一个开销对对 那么这个开完之后换到你线上里面去绕然后绕着绕着的时候需要把它杀掉吗突然在线子的时候过来一般不会杀的我们杀的时候是会根据这个任务它已经运行的段时间然后来它的一个资源请求然后来计算的就是说当它已经运行了很长的时间的话我肯定是优先去去杀一些刚刚起来的一些任务同样的证据的话那杀完之后你还会帮它再起吗是的杀完之后会进入到一个喷顶的队列里面的当有心的资源的时候它又会重新给运行起来的然后这个喷顶队列又是给你一个极限系系统来对接的因为AI的训练它是有一个极限的不知道您有没有这个概念对 我记得做深度学习系统的对我明白这个事情对但你杀深度学习训练的时候实际上是很难杀的因为它大量起一个任务的时候它会起很多的将士进城一块去跑你杀的时候这个实验我们杀的时候其实是这样的首先是我们需要我们的平台方在KBS上面的ctrl然后来对接我们的系统我们要杀的话我们会在port上面打一届标签然后让它主动来杀当它主动的杀不掉的时候过一段时间我们才会去强制的去杀它会有一个交互的一个过程所以你因为它寻减的机制跟寻减也关系也不是很大我们把杀的权力先让给业务方或者说让给AI的训练方他们来杀他们如果一段时间杀不掉的话我们才来杀它这样的他们来杀的时候他们就需要处理好你刚才说的那些问题就是怎么样把一些东西给回收掉然后怎么样把一些东西资源给释放掉杀的权力在他们你只是告诉他们你该杀了对然后我们会有一个保底就是说一段时间他们如果杀不掉我们就直接就杀了你因为提前告诉他你杀不杀这个也是没办法的因为我们肯定要做这样一些事情因为如果你不做一些动态的这种杀的话其实整个机群的资源是没法释放掉的就这样谢谢大家有问题我们现在在交流因为时间已经到了