《何穎鵬-唯品會如何基于Volcano與AI訓練場景提高集群利用率_0708(GOTC上海會場)(15頁).pdf》由會員分享,可在線閱讀,更多相關《何穎鵬-唯品會如何基于Volcano與AI訓練場景提高集群利用率_0708(GOTC上海會場)(15頁).pdf(15頁珍藏版)》請在三個皮匠報告上搜索。
1、CNCF分論壇專場何穎鵬 2021年07月10日唯品會如何基于Volcano與AI訓練場景提高集群利用率概況1.使用helm發布tfjobs,由tf-operator管理訓練任務流程2.使用volcano對tfjobs的任務容器進行批量調度3.對tf-operator進行改造,按業務劃分volcano隊列,并支持任務優先級4.改造kubelet實現資源超賣,提高容器部署密度5.通過自研的vpa,實現在容器運行時動態調整資源HelmVolcanoTf-operatorKube-apiservertfjobpodGroupqueuekubeletkubeletps0workerps1workerw
2、orkerworkerworkerworkervpavpaTf-operator部署與使用apiVersion:kubeflow.org/v1kind:TFJobmetadata:namespace:_NAMESPACE_ name:_NAME_“spec:runPolicy:schedulingPolicy:queue:priorityClass:tfReplicaSpecs:Chief:replicas:1 template:Evaluator:replicas:1 template:PS:replicas:1 template:Worker:replicas:1 template:Hel
3、mTf-operatorKube-apiservertfjob3tfjob2tfjob1informercontrollerpsevaluatorchiefworkerspsevaluatorchiefworkerspsevaluatorchiefworkerspodgroup3podgroup2podgroup11.tf-operator管理訓練任務流程,同步tfjob狀態到我們的valyria管理平臺2.參考社區實現,修改tf-operator,支持創建podgroup時指定queue和priorityClassValyriaVolcano原理與部署Volcano架構https:/volc
4、ano.sh/en/docs/architecture/使用Volcano實現對tfjobs容器的批調度https:/volcano.sh/en/docs/schduler_introduction/Allocate具體流程初始化namespaceQueue和JobQueueMapnamespacesOrderFnNamespaces.empty()從當前namespace中挑選queue!queueOverUsed,queueOrderFnPop namespaceNo queue 從當前queue中挑選job jobOrderFnget queuePush namespaceget job
5、 構建待調度的tasks隊列 taskOrderFnNo jobtasks.empty()為task選取節點 predicatesFn,nodeOrderFnPop taskjob.ready()emptyemptycommitdiscardYesNoend任務隊列apiVersion:kubeflow.org/v1kind:TFJobmetadata:spec:runPolicy:schedulingPolicy:queue:priorityClass:tfReplicaSpecs:apiVersion:scheduling.volcano.sh/v1beta1kind:Queuemetad
6、ata:name:rec-queuespec:weight:400apiVersion:scheduling.volcano.sh/v1beta1kind:Queuemetadata:name:search-queuespec:weight:200 actions:enqueue,allocate,backfill tiers:-plugins:-name:drf -name:priority -name:gang -name:conformance -plugins:-name:proportion -plugins:-name:nodeorder -name:predicatestfjob
7、queueconfigmap1.當單一業務組訓練任務較多時,可以使用整個集群的所有資源按業務組拆分隊列2.當多個業務組訓練任務較多時,按queue的權重分配資源,保證資源不被單一業務組搶占Queue Overused:derserved allocated,其中desearved=min(totalResource*queueWeight)/totalWeight,request)request=sum(pod resources)allocated=sum(allocated pod resources)任務優先級apiVersion:kubeflow.org/v1kind:TFJobmet
8、adata:spec:runPolicy:schedulingPolicy:queue:priorityClass:tfReplicaSpecs:actions:enqueue,allocate,backfill tiers:-plugins:-name:drf -name:priority -name:gang -name:conformance -plugins:-name:proportion -plugins:-name:nodeorder -name:predicatesapiVersion:scheduling.k8s.io/v1kind:PriorityClassmetadata
9、:name:p0-privalue:1000apiVersion:scheduling.k8s.io/v1kind:PriorityClassmetadata:name:p1-privalue:100tfjobqueueconfigmap優先級低優先級高1.Gang插件優先級最高,優先調度未ready的批任務:2.priority其次,保證優先級較高的任務先調度;3.drf最后,在同等優先級下,需要資源較少的任務優先調度如何提高集群利用率1.對訓練任務進行批調度,需要等待足夠資源來調度容器,可能會導致部分宿主機空閑問題2.業務對訓練任務的計算量估算不準確,申請過多資源導致宿主機空閑通過使用Vo
10、lcano的批調度功能,實現了tfjob容器的全量執行,避免了任務碎片化的問題解決方案1.改造kubelet,對宿主機CPU資源進行超賣,提高集群的容器部署密度2.實現VPA,監控宿主機上容器的資源利用率,實時動態調整容器資源集群資源超賣通過定制kubelet,增加超賣參數(cpu-overcommit-time),修改上報到kube-apiserver的宿主機cpu數量,實現CPU超賣通過CPU超賣,我們可以實現:1.抹平不同CPU的性能帶來的異構問題2.提高容器部署密度,因此提升CPU使用率資源超賣導致CPU熱點問題Kube-apiserverNode148coreskubelet24co
11、res2.2GHzcpu-overcommit-time=2cAdvisorkubelet32cores2.6GHzcpu-overcommit-time=3cAdvisorNode296coresVPA介紹VPA設計方案1.以Daemonset形式部署,去中心化2.實時監控本宿主機容器的cgroup秒級指標3.可定制化的handler處理容器和宿主機事件4.通過configmap動態配置策略參數5.調用docker api實時調整容器資源,無需重啟容器VPA介紹VPA對訓練任務容器的處理策略操作說明獲取當前宿主機真實cpu使用率和目標cpu使用率當前宿主機48c,真實cpu使用率95%,過載
12、線90%,警戒線80%,即目標使用率是85%計算從真實使用率壓制到目標使用率需要壓制的核數(95%-85%)*48c=4.8c將宿主機上的容器按訓練優先級(P2|P1|P0)及真實cpu使用率倒序排序podA(P0)20c,podB(P1)10c,podC(P2)6c,podD(P2)4c排序后:podC-podD-podB-podA按排序后按Max(目標壓制核數,50%*容器真實cpu使用率)的標準選擇需要壓制的容器先選取podC進行壓制,其cpu使用量50%為3c,則壓制3c,還需要壓制1.8c,因此需要將podC的cpu limit調為3c再選取podD進行壓制,其cpu使用量50%為2
13、c,但只需壓制1.8c即可,因此需要將podD的cpu limit調為2.2c修改容器cpu limit并且添加annotation標志容器被壓制每個容器只進行一次壓制當宿主機的CPU使用率過高時,對容器的CPU limit進行縮容壓制VPA介紹VPA對于在線流量容器的操作情況操作宿主機有足夠資源時,某個容器的資源使用率到達閾值對容器的資源進行暫時擴容,當容器的資源使用率下降后回收宿主機資源到達告警閾值時不再對容器進行臨時擴容宿主機CPU/網絡使用率達到熱點閾值時調用上游LB接口,按優先級降低容器流量宿主機內存使用率到達熱點閾值時Cordon宿主機現狀與未來工作方向現狀工作方向1.每日運行約200個訓練任務,運行時間平均為75分鐘,資源等待時間平均為40秒2.宿主機CPU使用率平均為50%,90分位到達75%1.訓練任務容器資源監控加強 記錄各角色容器資源使用率,以此建議用戶優化資源申請量2.Volcano支持按照label選取宿主機 生產集群按照label劃分宿主機的用途,volcano應該只考慮用于訓練任務的宿主機資源3.VPA功能增強 在宿主機資源充足的情況下,對需要資源的容器進行臨時擴容,提升資源使用率THANKS