門道多:一次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任務,其配置如下:

"Resource":{"CPU":1200,"Memory":50000},
? ? "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任務不要花時間去攢資源(資源要充足),但同時集群利用率又要保障,現在也在探索一些解決方案,希望大家也多多提提想法。總之,優化這條路還長著呢



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258551.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

源碼安裝Bazel

有時候我們需要源碼安裝tensorflow,這時逃不過的第一步就是安裝Bazel,如果沒有root權限的時候,這時我們就需要源碼安裝Bazel了。下面是安裝步驟,參考:https://docs.bazel.build/versions/master/install-compile-source.html 1. E…

234. Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 先找到鏈表中點,將第二部分反轉,然后比較兩部分鏈表的值。 /** * Definition for singly-linked list. * public class ListNo…

當查找名字的時候通過外圍作用域向外查找(如何理解)

int a;//#1int b;//#2namespace A{int c;//#3void fun(){int a;//#4使用(a);//從里查找已經聲明名字首先尋找內層花括號之內a找#3//會繼續查找使用(b);//從里查找已經聲明名字//首先尋找內層花括號之內沒有聲明b//繼續外層花括號(namespace A)內尋找沒有…

python 服務注冊_將python程序注冊為Ubuntu系統服務,并開機啟動的方法。

一、系統環境操作系統:ubuntu 18 (該版本已默認使用systemd作為init)python版本:3.6二、步驟(一)準備python程序1、在 /usr/bin/ 下新建python程序 svc-test.py# nano /usr/bin/svc-test.py#! /usr/bin/python3import timewhile True:f open(/tmp/svc-t…

源碼安裝NASM,無root權限

首先說明我的系統是redhat linux64位。沒有root權限。我們想安裝nasm2.13. 下面介紹具體的安裝步驟。 1. 下載源碼: https://www.nasm.us/pub/nasm/releasebuilds/2.13/ 選擇nasm-2.13-xdoc.tar.gz下載在本地目錄下 2. 解壓,tar -xvzf nasm-2.13-xdoc.tar.gz &…

Volley簡單學習使用五—— 源代碼分析三

一、Volley工作流程圖: 二、Network在NetworkDispatcher中須要處理的網絡請求。由以下進行處理:NetworkResponse networkResponse mNetwork.performRequest(request);看一下mNetwork的定義:(定義在NetworkDispatcher中&#xff0…

html5 - history 歷史管理

參考文章: w3c : http://www.w3.org/html/ig/zh/wiki/HTML5/history 張鑫旭 : http://www.zhangxinxu.com/wordpress/2013/06/html5-history-api-pushstate-replacestate-ajax/ zawa : http://zawa.iteye.com/blog/1271031  Demo : Demo 截圖&#xff…

源碼安裝libjpeg-turbo1.2.1,無root權限

首先說明我的系統是redhat linux64位。沒有root權限。我們想安裝libjpeg-turbo. 下面介紹具體的安裝步驟。 本來想安裝最新的版本,但是最后失敗了,無奈安裝成1.2.1. 1. 下載源碼: https://zh.osdn.net/projects/sfnet_libjpeg-turbo/download…

Android開發學習---使用Intelij idea 13.1 進行android 開發

Android開發學習---使用Intelij idea 13.1 進行android 開發 原文:Android開發學習---使用Intelij idea 13.1 進行android 開發1.為什么放棄eclipse?太卡!! 實在受不了eclipse的卡了,運行WEB項目還好,但android開發實在太慢,太慢!經常卡死,CPU經常被占滿! 看網上很多人都說比I…

python滑動條來設置閾值houghcircle_OpenCV Python,為什么Hough Circle Transform找不到所有圓圈?...

我搜索了很長時間可能出錯但我并不真正了解參數和預處理的影響我無法發布圖片,但是在一張非常清晰的歐元照片上,該程序識別出一些圈子,而不是其他一些圈子,甚至可以像其他人一樣清楚.這是我的代碼:‘$’import cv2import numpy as npfilename rC:\Users\roseline\D…

Logcat打印調試信息

Android Logcat調試中的V、D、I、W、E的分別代表什么? Log.v -- 黑色 -- verbose infoLog.d -- 藍色 -- debug infoLog.i -- 綠色 -- infoLog.w -- 橙色 -- warnLog.e -- 紅色 -- error info//Log.ASSERT -- 斷言 //Log.wtf() (1、Log.v 的調試顏色為黑色的&#xf…

opencv中的橢圓擬合

首先貼一個最簡單的程序:訪問:https://blog.csdn.net/guduruyu/article/details/70069426 //創建一個用于繪制圖像的空白圖 cv::Mat image cv::Mat::ones(480, 640, CV_8UC3); //設置藍色背景 image.setTo(cv::Scalar(100, 0, 0)); //輸入擬合…

unix c 11

多線程(thread) 操作系統支持多進程,進程內部使用多線程。 進程是 重量級的,擁有自己 獨立的內存空間。 線程是 輕量級的,不需要擁有自己 獨立的內存空間,線程的內存空間:1 共享進程的內存空間 2 每個線程擁有…

C# .net core 使用自定義的WebProxy

為什么80%的碼農都做不了架構師?>>> 因為.net core 的System.Net 中沒有提供WebProxy這個方法,所以可以根據需求實現一個. public class CoreWebProxy : IWebProxy{public readonly Uri Uri;private readonly bool bypass;public CoreWebProxy(Uri uri,…

2015年08月

2015年07月 - 2015年09月 ● 一般而言。。。 一般而言,牙周病輕者有口臭、牙齦紅腫疼痛、刷牙流血等癥狀,嚴重時會造成牙齦萎縮、牙齒敏感、牙齒搖動等情況。口腔沒有在飲食后30分鐘清潔就會逐漸轉化為酸性環境(PH值約5.5)&#x…

python類匯總_Python 類總結

Python可以繼承多個父類,多重繼承。類支持多個對象的產生,命名空間的繼承,運算符重載1)、類產生多個實例對象Python OOP模型中的兩種對象:類對象和實例對象。類對象提供默認的行為,是實例對象的工廠。實例對象是程序處…

matlab ,python,c++關于格式化輸出數字的表達

我們想要格式化輸出1,2,3,...為001,002,003 ... 那么在matlab,python,c該如何表達呢? matlab: >> filedirsprintf(%03i,10)filedir 010 or >> imagenamenum2str(10,%03d)imagename 010 python: index_str %03d % 10index_str Ou…

讀取Exchange的用戶未讀郵件數的幾種方法

【http://www.cnblogs.com/nbpowerboy/p/3539422.html】 可以使用ExchangeServiceBinding獲取郵件,他相當于outlook, 來獲取服務器的未接受的郵件. 至于 “該帳戶無權模擬所請求的用戶 ” ,是由于在exchange服務器上面沒有配置模擬賬戶. 需要在Exchange Management …

IOS第七天(2:UiTableView 加上數據分離)

****加上數據分離 #import "HMViewController.h" #import "HMStudent.h"interface HMViewController () <UITableViewDataSource> property (weak, nonatomic) IBOutlet UITableView *tableView;/** 數據列表 */ property (nonatomic, strong) NSArr…

觀點:Linux 上的殺毒軟件

剛剛進入二月&#xff0c;在360安全衛士 for Linux瞬間更名為360安全衛士國產系統專版。緊接著不久&#xff0c;Dr.Web 宣布發現一款可能源自 ChinaZ 的 Linux 系統的后門程序。加之又被朝內媒體炒作起來的 OpenSSL 基金會事宜&#xff0c;不由得思緒飄溢&#xff0c;再看看 Li…