门道多:一次MaxCompute PS任务的问题排查之旅
关于PS是什么,可以参考一下以下两个介绍:基于参数服务器的大规模在线学习算法和Parameter Server。更多问题可以咨询玄乐。下面主要总结一下这回遇到一个PS任务跑不起来的问题排查过程。不想看过程的直接看最后一点总结就行。
一 为什么要分享一个问题排查过程
作为初级用户来说只要会基于SDK的编程和命令使用就OK了,但对于广告这种重度高级用户来说,如果还把计算框架和MaxCompute当成黑盒来用,任务跑不起来了或者任务出错了就只能两眼一抹黑了,这次分享一来是By Case解了一个很复杂的问题,二来是摸清了里面的门道,简单是一环扣一环,觉得有必要分享一下,给有需要的同学可做下参考。
二 问题的现象
一个PS任务从提交到最后人工Kill经过了7小时,一直没起起来,而该任务以前是可以正常运行完成的。如下图所示,有两个实例一直处在Ready状态。
三、排查过程
首先,在排查之前有必要交待一些基本信息,PS任务主要角色三个:coordinator/server/worker,如下盗图,
这里面有几个关键点先交待下:
1、coordinator占用资源较少,只会起一个Instance,占用资源基本是1Core + 1G;
2、Server和Worker占用资源较多,根据特征量和样本大小的不同其实例个数也有较大差别,目前大的能到3000个实例(如本Case),每个实例需要10Core + 5~20G;
3、aon:即all-or-nothing,介绍,必须(三个Task)所有的实例都分配到了资源才会开始进行迭代计算;aon模式是采用机器打标预留资源的方式给任务分配资源,会以占满整机的方式分配,照例来个示例:一个任务有120个实例,每个实例要8core,单机是31Core,那么一台机器上就能放3个实例占24Core,剩下7Core则分给其他任务,该任务一共要占120/3=40台机器。
4、中间如果某个实例失败了,整个计算都会暂停,直到所有实例拿够资源才会恢复运行;
5、如下出现数字中如果没有单位,则CPU单位为1核=100个基本单位、内存单位为MB;
【第一轮】:目标直指资源不够。
任务所在的AY87B集群资源:按s10机型(32Core + 128G,实际可用31Core + 110G)推算应该是3600+的机器数,目前分给了两个quota组,alimm_mpi_kgb:2000台,alimm_mpi_k2:1100台(感觉绰绰有余的样子);
该Job被Kill时的基本信息:(为了简化,略去mem信息,因为本Case 内存不是瓶颈)
Task类型 |
实例数(Total/Ready/Running) |
单实例Cpu需求 |
汇总CPU |
coordinator |
1/1/0 |
100 |
100 |
Server |
3000/2/2998 |
1500 |
4500000 |
Worker |
3000/0/3000 |
1500 |
4500000 |
所有汇总 |
9000100 |
PS是在aon模式下工作的(这个判断后面被证实是不完全对的,汗),单机能分配的worker是2个(15 * 2=30core,31core能容下两个),Server单机也是能起2个,这样算下来基本需要3000台机器;
咦,但Job所在的quota组(alimm_mpi_kgb)只分配到了2000台,按理说应该有1000台的缺口会导致有2000个实例处在Ready状态,同时算出来的资源需求是9000100,而神农监控里面发现实际资源需求(request项)只有5400100,如下图
问题出在哪?
【第二轮】:PS内部有玄机
找到玄乐细细了解了一下,得到两个很重要的线索,PS内部有一些默认约束:
- 由于某种原因,Worker的资源申请量会打7折,Server会打5折;
- 单台机器上只能启动1个Server和2个Worker;如下是发给Fuxi的json串
"PSServerTask": {
"MaxAssignCountEachMachine": 1,
"Resource": {
"CPU": 750,// server打了5折
"Memory": 5000} // mem不打折
}
"PSWorkerTask": {
"MaxAssignCountEachMachine": 2,
"Resource": {
"CPU": 1050, //worker打了7折
"Memory": 5000}// mem不打折
}
- PS内部没有使用all-or-nothing,只是他的行为符合aon特征;
这样一来,上述表格需要调整一下
Task类型 |
实例数(Total/Ready/Running) |
单实例Cpu需求 |
汇总CPU |
coordinator |
1/1/0 |
100 |
100 |
Server |
3000/2/2998 |
1500*0.5 |
2250000 |
Worker |
3000/0/3000 |
1500*0.7 |
3150000 |
所有汇总 |
5400100 |
这回资源对上了,单机起2个worker需要1500台机器(能同时起1500个Server),起3000 个server还需要1500台,缺口只有2个Server(2台),但集群明明逻辑上有3600+,为什么持续7个小时分配不到,而集群的整体利用率也不是很高,如下图:
【第三轮】这时你必须知道的物理部署情况
由于一直负责广告的MaxCompute接口,所以马上想到了ay87b集群物理上机器型号有差异,是s10(32core + 128G)和n41(64core + 192G,实际可用63core + 170g)混布的,物理上大概有3040台,这个数字和3000好接近呀,但还是大于3000呀,同时这个时候发现了另外一个现象:虽然最终发现有2个Ready的Server,但实际这7个小时经历了三段:18~20点缺口有53台;20~22点资源是够的;22点到被Kill资源最终差2台;
【第四轮】机器有加黑、资源有碎片
是不是有什么情况导致机器可用数低于3000呀,现在一切应该朝着可用数2998去追踪了。
18~20点:从资源缺口和实际的server实例的start_time算出有53台【(request-used)/(1500 * 0.5)】的机器缺口,基本确定有两个因素:一是华佗加黑了几台机器,二是当时另外一个quota组(alimm_mpi_k2)启动的任务了多个aon类型的xlibmpi任务,有90台左右的机器上剩余资源小于750,导致资源碎片化,如下图中的蓝色部分,正好是8点有个资源使用的下降,说明有个任务跑完了释放出来了部分机器。
最终也找出了这个Xlibmpi任务,其配置如下:
"managedInstanceNum":240,
如按s10机型来看,基本就是占了120台机器,每台机器还剩下700(7Core),刚刚不够这人PS任务的Server用(需要750)。如果按N41机型来看,单机还能剩下6300-2400=3900,所以是够起Server的,这里基本可以判断出该xlibmpi任务占了约90台s10,30来台n41。
20~22点:这期间资源是够的,按理说任务应该能跑起来了,但用户反馈没有看到任务有过运行过的日志记录, 2小时肯定够任务跑好多轮了。
22~01(被Kill):这期间大批量机器被加黑,如下图所示,通过后台日志分析发现共有32台被加黑了。同时上图alimm_mpi_k2在22点左右的空降也说明那个时间机器加黑数较大,同时影响了两个quota组,而alimm_mpi_kgb只被影响了几台,这个时候总的物理上可用机器数应该就定格在2998台了,直到被kill也没有拿够。
【第五轮】coordinator也failover了
对于20~22点任务没执行这个问题实际上是个误判,因此通过玄乐提供的诊断任务工具(Here)发现coordinator在21:59:16发生过failover,如下图
,发生failover时之前的日志就被清空了,所以实际上该Job是运行过2小时左右的。这下整个问题基本也就梳理清楚了。
四 总结的几个收获点
- PS没有设置isAllOrNothing; Ps行为上是aon,但在资源分配上实际没有使用aon;
- 单机默认有2Worker 和1Server限制;
- Worker的CPU会打7折,Server的CPU会打5折,而Mem则不打折。至于原因嘛还是因为Fuxi底层在CPU限制上面没有太死,而Mem上则使用过了就会被Kill。
- 规划任务和资源时一定要留点Buffer;
- 分布式系统下物理部署有时候很难对用户透明;
- PS内部会对coordinator/server/worker做failover;
- PS默认10轮做一次checkpoint;
- 查看任务jobstatus和任务在控制集群上的行为可以参考两个工具:detect和 SLS
- 机器加黑时有发生,而且有时候量还会比较大,如果几十台;可以通过神农监控查看;
五、存在的问题
1、会发现像这回这种大任务资源需求大,设置好plan mem/cpu实际上较难,受物理部署/单机网卡/单机内存和cpu/是否统一机型等多种因素影响,需要测试出一些经验值;
2、Logview里面coordinator failover之后看不到之前的stderr了
3、之前想做的aon/mpi类任务按团队隔离还是会面临物理上相互影响的情况,面临多因素难平衡的问题,一方面希望worker/server 尽量分散(要求机器多),另一方面又需要aon任务不要花时间去攒资源(资源要充足),但同时集群利用率又要保障,现在也在探索一些解决方案,希望大家也多多提提想法。总之,优化这条路还长着呢
门道多:一次MaxCompute PS任务的问题排查之旅相关推荐
- 高级感灰调色LR预设北欧极简风PR FCPX AE PS 手机版APP街拍旅拍人像滤镜
高级感灰调色LR预设北欧极简风PR FCPX AE PS 手机版APP街拍旅拍人像滤镜 高级感灰调色LR预设北欧极简风PR FCPX AE PS 手机版APP街拍旅拍人像滤镜
- 阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171127)
概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速.完全托管的TB/PB级数据仓库解决方案.Ma ...
- 大数据全攻略:10年老兵带你看尽MaxCompute大数据运算挑战与实践
大数据计算服务(MaxCompute,原名ODPS)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决 ...
- ps人像精修照片步骤_ps修图教程:人像精修
今天,上一期干货.ps修图教程之人像精修,大家都知道精修在摄影后期一直是一件很难的事情,why?因为又要保持照片质感还要让你美美哒,又不能修到亲妈都不认识.哦,这可太难了.废话不多说,要开车了,刚上车 ...
- 阿里云数加大数据计算服务MaxCompute文章索引(持续更新201705)
概况介绍: 10年老兵带你看尽MaxCompute大数据运算挑战与实践 什么是阿里云数加大数据计算服务MaxCompute? 一分钟了解阿里云产品:大数据计算服务MaxCompute概述 数加平台如何 ...
- Linux运维跳槽必备的40道面试精华题
过一次年,结婚.存款.父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向,才能实现一步一个脚印的逆袭. 下面是一名资深Linux运维求职数十家公司总结 ...
- 发现一个病毒文件你删了他又自动创建怎么解决
公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况 针对这种情况一般重点查看netstat连接的外网ip和端口. 用lsof -p pid可以查看到具体是那些进程,哪些 ...
- mongodump 失败且导致mongo服务挂掉【本质原因,wt文件损坏】
====================================================== 标题遇到的问题是我要解决的问题的中间环节. 原本问题是:需要在之前standlone的Mo ...
- 企业运维经典面试题汇总(2)
1.写一个脚本查找最后创建时间是三天前,后缀是*.log的文件并删除 find .-ctime +3 -name '*.log' | rm -rf 2.统计ip访问情况,要求分析nginx访问日志,找 ...
最新文章
- LSTM为何如此有效
- 专访浪潮王虹莉 探互联网服务器市场的未来
- oracle和dba,oracle db、dba和rdba
- 1086 Tree Traversals Again (25 分)【一般 / 建树 树的遍历】
- bzoj 3055礼物运送 floyed + 状压DP
- 25个实用编程小技巧
- 《草原安魂曲》《自由意志》及其他我喜欢的电影海报
- html表ge模板_精选甘特图模板,丰富又好用
- linux netty udp服务端,Netty实现UDP服务端
- 《Python Cookbook 3rd》笔记(5.6):字符串的 I/O 操作
- python3.5 连接mysql_python3.5 連接mysql本地數據庫
- 4014-基于邻接表的长度为k的简单路径的求解(C++,附思路)
- ThinkPHP3.2.3 的异常和错误屏蔽处理
- Django代码部署
- 阿里云服务器Centos7 安装 pycuda报错:Could not build wheels for pycuda which use PEP 517 and cannot be install
- error Code:410 Error Message:appid and openid not match 威富通技术支持,兴业银行微信支付接入支持
- 2020年重磅喜讯!热烈祝贺王家林大咖大数据经典传奇著作《Spark大数据商业实战三部曲》 畅销书籍第二版 清华大学出版社发行上市! 前浪致 Spark + AI 后浪
- vue实现预览pdf组件(vue-pdf插件使用)
- 使用itext和freemarker来根据Html模板生成PDF文件,加水印、印章
- js修改对象数组⾥的对象名字
热门文章
- vb.net 设置打印纸张与页边距_装订文档时不想让文字被挡住?在Excel中你可以这样设置打印!...
- Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(2)
- amd为什么还用针脚_为什么AMD不取消cpu上的针脚?
- 多GPU运行Deep Learning 和 并行Deep Learning(待续)
- (转)MySQL自带的性能压力测试工具mysqlslap详解
- 【公共类库】加密解密
- [学习总结]7、Android AsyncTask完全解析,带你从源码的角度彻底理解
- python selenium自动化(三)Chrome Webdriver的兼容
- mediawiki禁止注册
- ASP.NET2.0数据操作之创建业务逻辑层