精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

機(jī)器學(xué)習(xí)平臺(tái)在Kubernetes上的實(shí)踐

人工智能 機(jī)器學(xué)習(xí)
本文回顧總結(jié)近一段時(shí)間網(wǎng)易云音樂機(jī)器學(xué)習(xí)平臺(tái)(GoblinLab)在容器化實(shí)踐的一些嘗試。截止今日,音樂機(jī)器學(xué)習(xí)平臺(tái)(GoblinLab)在容器化方面的嘗試,已開展了一段時(shí)間,并且已經(jīng)有了階段性的成果。

背景

過去音樂算法的模型訓(xùn)練任務(wù),是在物理機(jī)上進(jìn)行開發(fā)、調(diào)試以及定時(shí)調(diào)度。每個(gè)算法團(tuán)隊(duì)使用屬于自己的獨(dú)立物理機(jī),這種現(xiàn)狀會(huì)造成一些問題。比如物理機(jī)的分布零散,缺乏統(tǒng)一的管理,主要依賴于doc文檔的表格記錄機(jī)器的使用與歸屬;各業(yè)務(wù)間機(jī)器資源的調(diào)配,有時(shí)需要機(jī)器在不同機(jī)房的搬遷,耗時(shí)耗力。另外,由于存在多人共用、開發(fā)與調(diào)度任務(wù)共用等情況,會(huì)造成環(huán)境的相互影響,以及資源的爭(zhēng)奪。針對(duì)當(dāng)前的情況,總結(jié)問題如下:

  • 資源利用率低:部分機(jī)器資源利用率偏低;無法根據(jù)各個(gè)業(yè)務(wù)的不同階段,在全局內(nèi)快速、動(dòng)態(tài)的實(shí)現(xiàn)擴(kuò)縮容,以達(dá)到資源的合理配置,提升資源整體利用率;
  • 環(huán)境相互影響:存在多人共用、測(cè)試與調(diào)度混用同一開發(fā)機(jī),未做任何的隔離,造成可能的環(huán)境、共享資源的相互影響與爭(zhēng)奪;
  • 監(jiān)控報(bào)警缺失:物理機(jī)模式,任務(wù)監(jiān)控報(bào)警功能缺失,導(dǎo)致任務(wù)無法運(yùn)維,或者效率低。

資源沒有全局統(tǒng)一的合理調(diào)配,會(huì)出現(xiàn)負(fù)載不均衡,資源不能最大化的利用。

Kubernetes的嘗試

在快速的擴(kuò)縮容、環(huán)境隔離、資源監(jiān)控等方面,Kubernetes及其相關(guān)擴(kuò)展,可以很好的解決問題。現(xiàn)將物理機(jī)集中起來,并構(gòu)建成一個(gè)Kubernetes集群。通過分析算法同事以往的工作方式,機(jī)器學(xué)習(xí)平臺(tái)(GoblinLab)決定嘗試基于Kubernetes提供在線的開發(fā)調(diào)試容器環(huán)境以及任務(wù)的容器化調(diào)度兩種方案,其分別針對(duì)任務(wù)開發(fā)和任務(wù)調(diào)度兩種場(chǎng)景。

任務(wù)開發(fā)

為最大化的減少算法同事由物理機(jī)遷移到容器化環(huán)境的學(xué)習(xí)成本,GoblinLab系統(tǒng)中基本將Kubernetes的容器當(dāng)做云主機(jī)使用。容器的鏡像以各版本Tensoflow鏡像為基礎(chǔ)(底層是Ubuntu),集成了大數(shù)據(jù)開發(fā)環(huán)境(Hadoop、Hive、Spark等Client),安裝了常用的軟件。另外,為了方便使用,容器環(huán)境提供了Jupyter Lab、SSH登錄、Code Server(VSCode)三種使用方式。

在GoblinLab中新建容器化開發(fā)環(huán)境比較簡(jiǎn)單,只需選擇鏡像,填寫所需的資源,以及需要掛載的外部存儲(chǔ)即可(任務(wù)開發(fā)的環(huán)境下文簡(jiǎn)稱開發(fā)實(shí)例)。

新建環(huán)境配置后,點(diǎn)擊啟動(dòng)實(shí)例,容器初始化時(shí),會(huì)自動(dòng)啟動(dòng)Jupyter lab、SSH以及CodeServer。

Jupyter Lab:

Code Server:

SSH登錄:

算法可以選擇以上任意一種方式進(jìn)行任務(wù)的開發(fā),或者調(diào)試。由于提供了Code Server(VSCode),所以可以獲得更好的體驗(yàn)。

任務(wù)開發(fā)所用的容器化環(huán)境,在底層Kubernetes上是通過StatefulSet類型實(shí)現(xiàn),對(duì)應(yīng)資源編排文件如下(已精簡(jiǎn)細(xì)節(jié)): 

  1. kind: StatefulSet 
  2. apiVersion: apps/v1 
  3. metadata: 
  4. name: ${name
  5. namespace: "${namespace}" 
  6. spec: 
  7. replicas: 1 
  8. selector: 
  9. matchLabels: 
  10.   statefulset: ${name
  11.   system/app: ${name
  12. template: 
  13. spec: 
  14.   <#if (gpu > 0)> 
  15.   tolerations: 
  16.       - effect: NoSchedule 
  17.         key: nvidia.com/gpu 
  18.         value: "true" 
  19.   </#if> 
  20.   <#if usePrivateRepository == "true"
  21.   imagePullSecrets: 
  22.     - name: registrykey-myhub 
  23.   </#if> 
  24.   volumes: 
  25.     - name: localtime 
  26.       hostPath: 
  27.         path: /etc/localtime 
  28.     <#if MountPVCs?? && (MountPVCs?size > 0)> 
  29.     <#list MountPVCs?keys as key
  30.     - name"${key}" 
  31.       persistentVolumeClaim: 
  32.         claimName: "${key}" 
  33.     </#list> 
  34.   containers: 
  35.     - name: notebook 
  36.       image: ${image} 
  37.       imagePullPolicy: IfNotPresent 
  38.       volumeMounts: 
  39.         - name: localtime 
  40.           mountPath: /etc/localtime 
  41.         <#if readMountPVCs?? && (readMountPVCs?size > 0)> 
  42.         <#list readMountPVCs?keys as key
  43.         - name"${key}" 
  44.           mountPath: "${readMountPVCs[key]}" 
  45.           readOnly: true 
  46.         </#list> 
  47.         </#if> 
  48.         <#if writeMountPVCs?? && (writeMountPVCs?size > 0)> 
  49.         <#list writeMountPVCs?keys as key
  50.         - name"${key}" 
  51.           mountPath: "${writeMountPVCs[key]}" 
  52.         </#list> 
  53.         </#if> 
  54.       env: 
  55.         - name: NOTEBOOK_TAG 
  56.           value: "${name}" 
  57.         - name: HADOOP_USER 
  58.           value: "${hadoopUser}" 
  59.         - namePASSWORD 
  60.           value: "${password}" 
  61.       resources: 
  62.         requests: 
  63.           cpu: ${cpu} 
  64.           memory: ${memory}Gi 
  65.           <#if (gpu > 0)> 
  66.           nvidia.com/gpu: ${gpu} 
  67.           </#if> 
  68.         limits: 
  69.           cpu: ${cpu} 
  70.           memory: ${memory}Gi 
  71.           <#if (gpu > 0)> 
  72.           nvidia.com/gpu: ${gpu} 
  73.           </#if> 

目前GolbinLab已提供基于Tensoflow各版本的CPU與GPU通用鏡像11個(gè),以及多個(gè)定制化鏡像。

任務(wù)調(diào)度

算法同事在使用容器化環(huán)境之前,任務(wù)的開發(fā)調(diào)度都是在GPU物理機(jī)器上完成,調(diào)度一般都是通過定時(shí)器或crontab命令調(diào)度任務(wù),任務(wù)無失敗、超時(shí)等報(bào)警,以及也沒有重試等機(jī)制,基本無相關(guān)的任務(wù)運(yùn)維工具。

在介紹容器中開發(fā)的任務(wù)如何上線調(diào)度之前,先簡(jiǎn)要介紹一下GoblinLab的系統(tǒng)架構(gòu)。

上圖為GoblinLab簡(jiǎn)化的系統(tǒng)架構(gòu),其中主要分為四層,由上到下分別為:

  • Application-應(yīng)用層:提供直接面向用戶的機(jī)器學(xué)習(xí)開發(fā)平臺(tái)(GoblinLab)
  • Middle-中間層: 中間層,主要是接入了統(tǒng)一的調(diào)度、報(bào)警、以及配置等服務(wù)
  • Wizard-執(zhí)行服務(wù): 其提供統(tǒng)一的執(zhí)行服務(wù),提供包含Kubernetes、Spark、Jar等各類任務(wù)的提交執(zhí)行。插件式,支持快速擴(kuò)展
  • Infrastructure-基礎(chǔ)設(shè)施: 底層的基礎(chǔ)設(shè)施,主要包含Kubernetes集群、Spark集群以及普通服務(wù)器等

GolbinLab為了保障調(diào)度任務(wù)的穩(wěn)定性,將任務(wù)的開發(fā)與調(diào)度拆分,改變之前算法直接在物理機(jī)上開發(fā)完任務(wù)后,通過定時(shí)器或者crontab調(diào)度任務(wù)的方式。如上圖所示,在開發(fā)完成后,任務(wù)的調(diào)度是通過任務(wù)流中的容器化任務(wù)調(diào)度組件實(shí)現(xiàn),用戶需填組件的相關(guān)參數(shù)(代碼所在PVC及路徑,配置鏡像等),再通過任務(wù)流的調(diào)度功能實(shí)現(xiàn)任務(wù)調(diào)度。與任務(wù)開發(fā)不同,每個(gè)調(diào)度任務(wù)執(zhí)行在獨(dú)立的容器中,保證任務(wù)間相互隔離,同時(shí)通過后續(xù)介紹的資源隔離方案,可以優(yōu)先保障線上調(diào)度任務(wù)所需資源。

任務(wù)調(diào)度執(zhí)行的一般流程如下:

任務(wù)調(diào)度執(zhí)行時(shí)在Kubernetes上資源編排文件(已精簡(jiǎn)細(xì)節(jié)): 

  1. apiVersion: batch/v1 
  2. kind: Job 
  3. metadata: 
  4. name: ${name
  5. namespace: ${namespace} 
  6. spec: 
  7. template: 
  8. spec: 
  9.   containers: 
  10.     - name: jupyter-job 
  11.       image: ${image} 
  12.       env: 
  13.         - name: ENV_TEST 
  14.           value: ${envTest} 
  15.       command: ["/bin/bash""-ic", "cd ${workDir} && \ 
  16.         ${execCommand} /root/${entryPath} ${runArgs}"] 
  17.       volumeMounts: 
  18.         - mountPath: "/root" 
  19.           name"root-dir" 
  20.       resources: 
  21.         requests: 
  22.           cpu: ${cpu} 
  23.           memory: ${memory}Gi 
  24.           <#if (gpu > 0)> 
  25.           nvidia.com/gpu: ${gpu} 
  26.           </#if> 
  27.         limits: 
  28.           cpu: ${cpu} 
  29.           memory: ${memory}Gi 
  30.           <#if (gpu > 0)> 
  31.           nvidia.com/gpu: ${gpu} 
  32.           </#if> 
  33.   volumes: 
  34.     - name"root-dir" 
  35.       persistentVolumeClaim: 
  36.         claimName: "${pvc}" 
  37. backoffLimit: 0 

權(quán)限控制

容器化開發(fā)環(huán)境配置啟動(dòng)后,用戶可以通過SSH登錄、CodeServer或JupyterLab等其中一種方式使用。為了避免容器化開發(fā)環(huán)境被其他人使用,GoblinLab給每種方式都設(shè)置了統(tǒng)一的密鑰,而密鑰在每次啟動(dòng)時(shí)隨機(jī)生成。

1、隨機(jī)生成密碼

2、設(shè)置賬號(hào)密碼(SSH登錄密碼)

  1. echo "root:${password}" | chpasswd 

3、設(shè)置Code Server密碼 (VSCode) 

  1. #設(shè)置環(huán)境變量PASSWORD即可 
  2. env:      
  3. namePASSWORD        
  4. value: "${password}"  

4、設(shè)置Jupyter Lab密碼 

  1. jupyter notebook --generate-config,~/.jupyter 目錄下生成jupyter_notebook_config.py,并添加代碼 
  2. import os  
  3. from IPython.lib import passwd 
  4. c = c  # pylint:disable=undefined-variable  
  5. c.NotebookApp.ip = '0.0.0.0'  # https://github.com/jupyter/notebook/issues/3946 c.NotebookApp.port = int(os.getenv('PORT', 8888)) c.NotebookApp.open_browser = False 
  6. sets a password if PASSWORD is set in the environment 
  7. if 'PASSWORD' in os.environ:    
  8. password = os.environ['PASSWORD']    
  9. if password:      
  10.  c.NotebookApp.password = passwd(password)    
  11. else:      
  12.  c.NotebookApp.password = ''      
  13.  c.NotebookApp.token = ''    
  14. del os.environ['PASSWORD']  

數(shù)據(jù)持久化

在Kubernetes容器中,如無特殊配置,容器中的數(shù)據(jù)是沒有進(jìn)行持久化,這意味著隨著容器的刪除或者重啟,數(shù)據(jù)就會(huì)丟失。對(duì)應(yīng)的解決方法比較簡(jiǎn)單,只需給需要持久化的目錄,掛載外部存儲(chǔ)即可。在GoblinLab中,會(huì)給每個(gè)用戶自動(dòng)創(chuàng)建一個(gè)默認(rèn)的外部存儲(chǔ)PVC,并掛載到容器的/root目錄。另外,用戶也可以自定義外部存儲(chǔ)的掛載。

除了自動(dòng)創(chuàng)建的PVC外,用戶也可以自己創(chuàng)建PVC,并支持將創(chuàng)建的PVC只讀或者讀寫分享給其他人。

另外,在Goblinlab上也可以對(duì)PVC里的數(shù)據(jù)進(jìn)行管理。

服務(wù)暴露

Kubernetes集群中創(chuàng)建的服務(wù),在集群外無法直接訪問,GoblinLab使用Nginx Ingress + Gateway訪問,將集群內(nèi)的服務(wù)暴露到外部。

容器化開發(fā)環(huán)境的Service資源編排文件如下(已精簡(jiǎn)細(xì)節(jié)): 

  1. apiVersion: v1 
  2. kind: Service 
  3. metadata: 
  4. name: ${name
  5. namespace: ${namespace} 
  6. spec: 
  7. clusterIP: None 
  8. ports: 
  9. name: port-notebook 
  10.   port: 8888 
  11.   protocol: TCP 
  12.   targetPort: 8888 
  13. name: port-sshd 
  14.   port: 22 
  15.   protocol: TCP 
  16.   targetPort: 22 
  17. name: port-vscode 
  18.   port: 8080 
  19.   protocol: TCP 
  20.   targetPort: 8080 
  21. name: port-tensofboard 
  22.   port: 6006 
  23.   protocol: TCP 
  24.   targetPort: 6006 
  25. <#if ports?? && (ports?size > 0)> 
  26. <#list ports as port> 
  27. name: port-${port} 
  28.   port: ${port} 
  29.   targetPort: ${port} 
  30. </#list> 
  31. </#if> 
  32. selector: 
  33. statefulset: ${name
  34. type: ClusterIP 

每當(dāng)用戶啟動(dòng)一個(gè)容器化開發(fā)環(huán)境,GoblinLab將通過接口自動(dòng)修改Nginx Ingress配置,將服務(wù)暴露出來,以供用戶使用,Ingress轉(zhuǎn)發(fā)配置如下: 

  1. apiVersion: v1 
  2. kind: ConfigMap 
  3. metadata: 
  4. name: tcp-services 
  5. namespace: kube-system 
  6. data: 
  7. "20000": ns/notebook-test:8888 
  8. "20001": ns/notebook-test:8080 
  9. "20002": ns/notebook-test:22 

資源管控

為提高資源的利用率,GoblinLab底層Kubernetes中的資源,基本都是以共享的方式使用,并進(jìn)行一定比例的超售。但是當(dāng)多個(gè)團(tuán)隊(duì)共享一個(gè)資源總量固定的集群時(shí),為了確保每個(gè)團(tuán)隊(duì)公平的共享資源,此時(shí)需要對(duì)資源進(jìn)行管理和控制。在Kubernetes中,資源配額就是解決此問題的工具。目前GoblinLab需要管控的資源主要為CPU、內(nèi)存、GPU以及存儲(chǔ)等。平臺(tái)在考慮各個(gè)團(tuán)隊(duì)的實(shí)際需求后,將資源劃分為多個(gè)隊(duì)列(Kubernetes中的概念為namespace),提供給各個(gè)團(tuán)隊(duì)使用。 

  1. apiVersion: v1 
  2. kind: ResourceQuota 
  3. metadata: 
  4. name: skiff-quota 
  5. namespace: test 
  6. spec: 
  7. hard: 
  8. limits.cpu: "2" 
  9. limits.memory: 5Gi 
  10. requests.cpu: "2" 
  11. requests.memory: 5Gi 
  12. requests.nvidia.com/gpu: "1" 
  13. requests.storage: 10Gi 

在集群中,最常見的資源為CPU與內(nèi)存,由于可以超售(overcommit),所以存在limits與requests兩個(gè)配額限制。除此以外,其他資源為擴(kuò)展類型,由于不允許overcommit,所以只有requests配額限制。參數(shù)說明:

  • limits.cpu:Across all pods in a non-terminal state, the sum of CPU limits cannot exceed this value.
  • limits.memory: Across all pods in a non-terminal state, the sum of memory limits cannot exceed this value.
  • requests.cpu:Across all pods in a non-terminal state, the sum of CPU requests cannot exceed this value.
  • requests.memory:Across all pods in a non-terminal state, the sum of memory requests cannot exceed this value.
  • http://requests.nvidia.com/gpu:Across all pods in a non-terminal state, the sum of gpu requests cannot exceed this value.
  • requests.storage:Across all persistent volume claims, the sum of storage requests cannot exceed this value.

可以進(jìn)行配額控制的資源不僅有CPU、內(nèi)存、存儲(chǔ)、GPU,其他類型參見官方文檔:https://kubernetes.io/docs/con ... otas/

資源隔離

GoblinLab的資源隔離,指的是在同一Kubernetes集群中,資源在調(diào)度層面的相對(duì)隔離,其中包含GPU機(jī)器資源的隔離、線上與測(cè)試任務(wù)的隔離。

GPU機(jī)器資源的隔離

在Kubernetes集群中,相對(duì)于CPU機(jī)器,GPU機(jī)器資源較為珍貴,因此為了提供GPU的利用率,禁止CPU任務(wù)調(diào)度在GPU機(jī)器上。

GPU節(jié)點(diǎn)設(shè)置污點(diǎn)(Taint):禁止一般任務(wù)調(diào)度在GPU節(jié)點(diǎn) 

  1. key:    nvidia.com/gpu  
  2. value:  true  
  3. effect: NoSchedule   

Taint的effect可選配置:

  • NoSchedule:Pod不會(huì)被調(diào)度到標(biāo)記為taints節(jié)點(diǎn)。
  • PreferNoSchedule:NoSchedule的軟策略版本。盡量避免將Pod調(diào)度到存在其不能容忍taint的節(jié)點(diǎn)上。
  • NoExecute:該選項(xiàng)意味著一旦Taint生效,如該節(jié)點(diǎn)內(nèi)正在運(yùn)行的Pod沒有對(duì)應(yīng)Tolerate設(shè)置,會(huì)直接被逐出。

GPU任務(wù)設(shè)置容忍(Toleration):讓GPU任務(wù)可以調(diào)度在GPU節(jié)點(diǎn) 

  1. <#if (gpu > 0)>    
  2. tolerations:        
  3. - effect: NoSchedule          
  4. key: nvidia.com/gpu          
  5. value: "true"    
  6. </#if> 

線上與測(cè)試任務(wù)隔離

線上與測(cè)試任務(wù)(GolbinLab中線上任務(wù)與測(cè)試任務(wù)為業(yè)務(wù)層面的定義,指的是周期調(diào)度任務(wù)和開發(fā)測(cè)試任務(wù))使用同一Kubernetes集群,但為了保障線上任務(wù)的資源,會(huì)特殊設(shè)置一些機(jī)器節(jié)點(diǎn)為線上任務(wù)的專有資源池。線上任務(wù)執(zhí)行時(shí)優(yōu)先調(diào)度在線上節(jié)點(diǎn)上,線上資源池?zé)o資源時(shí),也可調(diào)度于非線上節(jié)點(diǎn)。

線上資源池節(jié)點(diǎn)設(shè)置污點(diǎn)(Taint):禁止一般任務(wù)調(diào)度在線上資源池 

  1. key:    node.netease.com/node-pool  
  2. value:  online  
  3. effect: NoSchedule  

線上任務(wù)添加容忍(Toleration):允許線上任務(wù)調(diào)度于線上資源池,但不是必須調(diào)度于線上資源池中 

  1. tolerations:        
  2. - effect: NoSchedule          
  3. key: node.netease.com/node-pool          
  4. value: "online"          
  5. operator: Equal 

線上資源池中機(jī)器節(jié)點(diǎn)設(shè)置標(biāo)簽 + 線上任務(wù)設(shè)置節(jié)點(diǎn)親和性(nodeAffinity):優(yōu)先將線上任務(wù)調(diào)度在線上資源池中,但如果線上資源池中無已資源,此時(shí)也可以調(diào)度在其他節(jié)點(diǎn)上

線上資源池中節(jié)點(diǎn)設(shè)置標(biāo)簽:為了方便,標(biāo)簽與污點(diǎn)同名:

  1. node.netease.com/node-pool: online 

線上任務(wù)設(shè)置節(jié)點(diǎn)親和性(nodeAffinity):線上任務(wù)優(yōu)先調(diào)度在線上資源池中 

  1. affinity:      
  2. nodeAffinity: 
  3. preferredDuringSchedulingIgnoredDuringExecution: 
  4.   nodeSelectorTerms: 
  5.     - matchExpressions: 
  6.     - key: node.netease.com/node-pool                
  7.     operator: In                
  8.    values:                  
  9.     - online 

目前Node affinity有以下幾種策略,官方文檔affinity-and-anti-affinity:

  • requiredDuringSchedulingIgnoredDuringExecution表示Pod必須部署到滿足條件的節(jié)點(diǎn)上,如果沒有滿足條件的節(jié)點(diǎn),就不停重試。其中IgnoreDuringExecution表示Pod部署之后運(yùn)行的時(shí)候,如果節(jié)點(diǎn)標(biāo)簽發(fā)生了變化,不再滿足Pod指定的條件,Pod也會(huì)繼續(xù)運(yùn)行。
  • requiredDuringSchedulingRequiredDuringExecution表示Pod必須部署到滿足條件的節(jié)點(diǎn)上,如果沒有滿足條件的節(jié)點(diǎn),就不停重試。其中RequiredDuringExecution表示Pod部署之后運(yùn)行的時(shí)候,如果節(jié)點(diǎn)標(biāo)簽發(fā)生了變化,不再滿足Pod指定的條件,則重新選擇符合要求的節(jié)點(diǎn)。
  • preferredDuringSchedulingIgnoredDuringExecution表示優(yōu)先部署到滿足條件的節(jié)點(diǎn)上,如果沒有滿足條件的節(jié)點(diǎn),就忽略這些條件,按照正常邏輯部署。
  • preferredDuringSchedulingRequiredDuringExecution表示優(yōu)先部署到滿足條件的節(jié)點(diǎn)上,如果沒有滿足條件的節(jié)點(diǎn),就忽略這些條件,按照正常邏輯部署。其中RequiredDuringExecution表示如果后面節(jié)點(diǎn)標(biāo)簽發(fā)生了變化,滿足了條件,則重新調(diào)度到滿足條件的節(jié)點(diǎn)。

策略生效后效果如下圖所示, 線上任務(wù)優(yōu)先執(zhí)行與線上資源池節(jié)點(diǎn)中,但當(dāng)線上資源池沒有空閑資源后,線上任務(wù)Job5也可以去使用普通節(jié)點(diǎn)的資源。

階段性結(jié)果

截止今日,音樂機(jī)器學(xué)習(xí)平臺(tái)(GoblinLab)在容器化方面的嘗試,已開展了一段時(shí)間,并且已經(jīng)有了階段性的成果。

集群建設(shè)

經(jīng)過近一段時(shí)間的嘗試,目前音樂數(shù)據(jù)平臺(tái)的Kubernetes,隨著承載的業(yè)務(wù)越來越多,以及基于Kubernetes的大數(shù)據(jù)計(jì)算平臺(tái)(Flink等)的落地,后續(xù)將有大量的CPU資源加入, 其穩(wěn)定性將會(huì)成為比較大的挑戰(zhàn)。

用戶使用

  • 任務(wù)遷移:目前協(xié)助算法同事已完成80%任務(wù)遷移

任務(wù)開發(fā)

  • 用戶情況 : 已有60%算法同學(xué)使用開發(fā)實(shí)例的容器化環(huán)境;其中用戶來源包含音樂推薦算法、社交視頻推薦算法、搜索算法、音視頻、數(shù)據(jù)應(yīng)用、實(shí)時(shí)計(jì)算算法等團(tuán)隊(duì)
  • 開發(fā)實(shí)例:平臺(tái)鼓勵(lì)組內(nèi)共用開發(fā)實(shí)例,限制了每人最多創(chuàng)建3個(gè)開發(fā)實(shí)例
  • 任務(wù)調(diào)度: 覆蓋云音樂音樂推薦、社交視頻推薦算法、搜索算法、音視頻、數(shù)據(jù)應(yīng)用、實(shí)時(shí)計(jì)算算法等多個(gè)團(tuán)隊(duì)

容器化的好處

對(duì)于算法同事,由物理機(jī)遷移到機(jī)器學(xué)習(xí)平臺(tái)提供容器化的環(huán)境,能夠帶來的好處是:

  • 更多資源:由于整理資源利用率的提高,將有機(jī)會(huì)獲取到比之前單獨(dú)使用物理機(jī)更多的資源;另外資源擴(kuò)縮容的周期由之前的以天為單位減少到秒級(jí)別即可完成
  • 更好體驗(yàn):通過打通大數(shù)據(jù)、Git環(huán)境,提供多樣化的使用方式(SSH和在線IDE),由機(jī)器學(xué)習(xí)平臺(tái)統(tǒng)一維護(hù)環(huán)境鏡像,避免了每個(gè)團(tuán)隊(duì)需自己搭建、運(yùn)維環(huán)境的苦惱
  • 更完善的任務(wù)調(diào)度:GoblinLab的調(diào)度,提供了更完善的報(bào)警、重試、依賴檢查等功能,并且能夠與之前已有PS、Ironbaby任務(wù)的整合,實(shí)現(xiàn)在一個(gè)任務(wù)流的統(tǒng)一調(diào)度
  • 更好的隔離:環(huán)境隔離是容器化的天然優(yōu)勢(shì)。另外資源在調(diào)度層面的隔離,可以更好的保障線上任務(wù)
  • 統(tǒng)一的入口:統(tǒng)一了開發(fā)的入口后,可以有更大的操作空間。例如將通用的服務(wù)抽象后由平臺(tái)直接提供(依賴檢查、調(diào)度、報(bào)警監(jiān)控等等)、數(shù)據(jù)的共享、鏡像的更新以及后面持續(xù)的支持服務(wù)等

后續(xù)規(guī)劃

目前音樂機(jī)器學(xué)習(xí)平臺(tái)已能提供完整的容器化開發(fā)基礎(chǔ)能力,為進(jìn)一步提高集群的資源利用率、提升運(yùn)維效率,后續(xù)計(jì)劃從資源調(diào)度策略優(yōu)化(搶占等)、更豐富的資源監(jiān)控等方面入手,進(jìn)一步優(yōu)化。

作者:網(wǎng)易云音樂數(shù)據(jù)智能部數(shù)據(jù)平臺(tái)組王軍正

 

責(zé)任編輯:未麗燕 來源: 小石頭的碼瘋窩
相關(guān)推薦

2016-12-23 09:09:54

TensorFlowKubernetes框架

2021-06-05 06:52:16

Kubernetes

2021-01-08 13:42:28

愛奇藝機(jī)器學(xué)習(xí)深度學(xué)習(xí)

2022-10-09 08:08:02

人工智能機(jī)器學(xué)習(xí)平臺(tái)

2022-02-21 16:05:26

機(jī)器學(xué)習(xí)優(yōu)勢(shì)Python

2023-10-23 07:13:04

2023-02-20 07:46:45

機(jī)器學(xué)習(xí)AI 技術(shù)

2018-07-19 10:35:12

機(jī)器學(xué)習(xí)數(shù)據(jù)平臺(tái)

2018-12-16 16:21:08

HadoopKubernetes容器

2019-08-16 11:48:53

容器云平臺(tái)軟件

2024-03-18 00:00:04

AIKubernetes機(jī)器學(xué)習(xí)

2023-01-26 11:56:31

Kubernete虛擬機(jī)k3s

2022-05-10 08:27:15

小紅書FlinkK8s

2025-07-31 01:22:00

2022-12-29 14:25:22

2019-04-23 09:48:21

KubernetesPostgreSQL

2019-07-12 14:41:31

微服務(wù)Kubernetes容器

2022-04-14 10:29:57

機(jī)器學(xué)習(xí)時(shí)間技術(shù)

2018-10-05 23:26:00

機(jī)器學(xué)習(xí)算法數(shù)據(jù)

2021-01-26 09:46:59

PythonStacking機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

free性欧美| 婷婷丁香花五月天| 欧美jjzz| 亚洲精品成a人在线观看| 欧美激情成人网| 麻豆传媒在线完整视频| 丁香啪啪综合成人亚洲小说| 日韩av理论片| 精品无码av在线| 精品一区二区三区在线| 欧美不卡视频一区| 午夜免费一区二区| 18aaaa精品欧美大片h| 国产精品私人影院| 精品乱子伦一区二区三区| 97精品人妻一区二区三区在线| 亚洲精品婷婷| 久久黄色av网站| 欧美大波大乳巨大乳| www.成人网| 色婷婷久久综合| 野外做受又硬又粗又大视频√| 国模精品一区二区| 99麻豆久久久国产精品免费 | 热色播在线视频| 亚洲视频每日更新| 日韩高清三级| 色视频在线观看免费| 国产suv一区二区三区88区| 国产精品美乳一区二区免费| 中文字幕在线欧美| 狠狠爱www人成狠狠爱综合网| 中文字幕免费精品一区高清| 欧美无人区码suv| 91精品久久久久久综合五月天 | 亚洲四区在线观看| 日本视频精品一区| 亚洲av片一区二区三区| 成人高清免费观看| 国产激情一区二区三区在线观看| 一女二男一黄一片| 捆绑紧缚一区二区三区视频| 国产精品福利在线| 日韩 国产 欧美| 亚洲影视综合| 欧美尤物巨大精品爽| 看片网址国产福利av中文字幕| 国产专区一区| 高清视频欧美一级| 日韩av女优在线观看| 欧美天天视频| 欧美激情国产精品| 国产亚洲欧美久久久久| 影音先锋久久| 91精品国产亚洲| 台湾佬中文在线| 久久久久久夜| 国产精品欧美风情| 中文字幕你懂的| 美女脱光内衣内裤视频久久网站 | 日本一区二区三区久久久久久久久不 | 欧洲精品在线视频| 69亚洲精品久久久蜜桃小说| 久久午夜影视| 国产免费一区二区三区在线能观看| 高潮毛片又色又爽免费| 日韩精品福利网| 国产欧美一区二区三区四区| 国产乱码久久久| 粉嫩aⅴ一区二区三区四区| 国产精品区二区三区日本| 亚洲欧美另类视频| 99精品欧美一区二区三区综合在线| 国产经品一区二区| 精品视频二区| 自拍偷拍国产亚洲| 在线观看18视频网站| 丁香花在线观看完整版电影| 日韩欧美高清视频| 啊啊啊国产视频| 国产情侣一区在线| 亚洲电影成人av99爱色| 白白色免费视频| 久久精品青草| 91av福利视频| 中文人妻熟女乱又乱精品| 精品一区二区三区免费| 国产精品大全| 第九色区av在线| 亚洲激情一二三区| 久久久999视频| 成人午夜sm精品久久久久久久| 在线不卡免费欧美| 人体私拍套图hdxxxx| 国产一区二区三区四区五区| 欧美wwwxxxx| 青青草视频在线观看免费| 激情综合色播激情啊| 国产精品一区视频网站| 超碰在线国产| 洋洋av久久久久久久一区| 国产成人精品无码播放| 麻豆国产一区| 国产一区二区三区直播精品电影 | 东热在线免费视频| 亚洲高清不卡在线| 91精品999| 竹菊久久久久久久| 久久久欧美一区二区| 中文av免费观看| 91影院在线观看| 97在线免费视频观看| 91p九色成人| 亚洲精品99久久久久中文字幕| 精品亚洲乱码一区二区| 久久久久久久尹人综合网亚洲| 99视频免费观看| 美女免费久久| 欧美午夜寂寞影院| 国产中文字幕一区二区| 亚洲激情一区| 99porn视频在线| 免费网站成人| 欧美性淫爽ww久久久久无| 黄色av网址在线观看| 欧美在线免费一级片| 国产欧亚日韩视频| 激情小说 在线视频| 偷拍一区二区三区| 大尺度在线观看| 欧美激情91| 91九色单男在线观看| h网站视频在线观看| 色视频成人在线观看免| 草草影院第一页| 国产视频一区在线观看一区免费| 国产厕所精品在线观看| a天堂中文在线官网在线| 欧美精选一区二区| 少妇高潮惨叫久久久久| 美女视频一区在线观看| 一区二区不卡视频| 国产成人精选| 精品国产美女在线| 亚洲专区第一页| 国产精品国产三级国产a | 一级黄色大片视频| 久久蜜桃av一区二区天堂 | 久久99久国产精品黄毛片色诱| 三区精品视频| 97人人做人人爽香蕉精品| 在线成人中文字幕| 在线视频免费观看一区| 亚洲图片激情小说| 天堂网成人在线| 欧美三级黄美女| 国产精品日韩一区二区三区| 69av成人| 国产一区二区三区免费视频| 懂色av蜜臀av粉嫩av喷吹| 欧美高清在线精品一区| 亚洲欧美自偷自拍另类| 亚洲国产精品久久久天堂 | 国产成人鲁鲁免费视频a| 福利视频在线导航| 欧美日本在线一区| 欧美极品视频在线观看| 99视频热这里只有精品免费| 国产91对白刺激露脸在线观看| 教室别恋欧美无删减版| 国产日韩在线精品av| 永久免费网站在线| 亚洲激情电影中文字幕| 高潮毛片又色又爽免费| 日韩美女久久久| 无码任你躁久久久久久老妇| 久久精品首页| mm131午夜| 欧洲亚洲成人| 国产精品一香蕉国产线看观看| 顶级网黄在线播放| 日韩av中文字幕在线免费观看 | 日韩欧美中文字幕制服| 国产乡下妇女做爰| 欧美高清在线一区二区| 69xxx免费视频| 日本成人在线不卡视频| 男人天堂网站在线| 精品国产91| 波多野结衣成人在线| 午夜日韩成人影院| 久久成人一区二区| 玖玖综合伊人| 日韩欧美一级二级三级| 久久人人爽人人爽人人片av免费| 亚洲免费在线播放| 小早川怜子久久精品中文字幕| 国产成人免费视频网站高清观看视频| 久久无码高潮喷水| 91精品国产调教在线观看| 欧美日韩电影一区二区| 亚洲成人五区| 国产免费亚洲高清| 中文字幕在线视频网站| 久久人体大胆视频| 黄色片视频在线观看| 亚洲精品一区二区精华| 国产精品无码专区av免费播放| 色乱码一区二区三区网站| 中文字幕免费在线观看视频一区| 日韩av一卡二卡三卡| 六月天综合网| 日韩欧美不卡在线| 亚洲综合五月| 亚洲国产欧美日韩| 亚洲三级精品| 国产乱人伦精品一区二区| 亚洲伦理网站| 国产精品视频99| 在线能看的av网址| 亚洲3p在线观看| 成人无遮挡免费网站视频在线观看| 亚洲免费高清视频| 人成网站在线观看| 欧美va在线播放| 国产日韩免费视频| 欧美老肥妇做.爰bbww| 久久精品国产亚洲av麻豆蜜芽| 黑人巨大精品欧美一区二区| 久久久久久久久久综合| 18成人在线观看| 任你操精品视频| 国产精品污污网站在线观看| xxxxx在线观看| 久久久久国产免费免费| 熟女人妻在线视频| 成人黄色网址在线观看| 国产视频精品视频| 成人一区二区三区| 日本少妇xxxx软件| 丁香五精品蜜臀久久久久99网站| 在线播放黄色av| 国产老肥熟一区二区三区| 一级黄色在线播放| 国产一区二区三区四区五区入口| 日本精品一区在线| 国产一区999| 欧美午夜精品一区二区| 国产91露脸合集magnet| 香蕉视频污视频| 99国产精品久久久久| 一区二区黄色片| 日本一区二区三区四区在线视频| 黄大色黄女片18免费| 亚洲视频在线一区二区| 永久免费看黄网站| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美亚洲在线视频| 日韩在线影院| 国产一区二区在线免费视频| 国产精品日本一区二区三区在线| 亚洲精品欧美极品| 爱爱精品视频| 免费一区二区三区| 久久影院一区| 992tv快乐视频| 亚洲免费高清| 国产精品久久久毛片| 国产一区视频导航| 国产麻豆剧传媒精品国产av| 国产欧美日韩三级| 永久免费观看片现看| 亚洲精品国产一区二区精华液 | 成人天堂资源www在线| 国产精品久久久免费观看| 国产三级精品视频| 日韩三级在线观看视频| 欧美日韩激情小视频| 最新在线中文字幕| 精品精品国产高清a毛片牛牛| 亚州男人的天堂| 久久韩国免费视频| 少妇视频在线观看| 国产日韩精品视频| 欧美理论电影在线精品| 亚洲一区二区在线观| 亚洲国产一区二区三区a毛片| 一本久道中文无码字幕av| 国产高清在线精品| 中字幕一区二区三区乱码| 亚洲精品视频在线看| 久久青青草视频| 欧美一区二区久久| 国产日韩精品在线看| 欧美大片免费观看在线观看网站推荐| 樱桃视频成人在线观看| 成人在线小视频| 国产日韩欧美一区二区三区| 免费一级淫片aaa片毛片a级| 免费在线视频一区| 老熟妇精品一区二区三区| 成人欧美一区二区三区1314| 在线观看日本视频| 欧美成人激情免费网| 免费大片在线观看www| 日本一区二区不卡| 国产乱人伦精品一区| 伊人久久大香线蕉精品| 亚洲欧美日韩精品一区二区| 91精品人妻一区二区三区四区| 欧美国产亚洲另类动漫| 国产高潮久久久| 精品av久久707| 成人直播在线| 国产噜噜噜噜久久久久久久久| 天堂俺去俺来也www久久婷婷| 国产成人三级视频| 麻豆国产精品777777在线| 91久久免费视频| 疯狂蹂躏欧美一区二区精品| wwwav在线播放| 久久九九国产精品怡红院| 69堂精品视频在线播放| 欧美中日韩一区二区三区| 国产日韩专区| 日韩精品视频一区二区| 夜夜嗨av一区二区三区中文字幕 | 国产三级av片| 亚洲国产精品悠悠久久琪琪| 激情av在线| 99国产高清| 欧美日本不卡| 台湾佬美性中文| 亚洲人成精品久久久久久| 伊人网免费视频| 中文字幕精品网| 777午夜精品电影免费看| 视频一区二区精品| 麻豆精品在线视频| 手机看片国产日韩| 欧美日韩视频一区二区| 午夜国产福利在线| 成人观看高清在线观看免费| 99re66热这里只有精品8| 日本中文字幕精品—区二区| 国产精品女人毛片| 一区二区日韩在线观看| 久久精品国产一区| 欧一区二区三区| 免费视频爱爱太爽了| www.日韩大片| 国产午夜无码视频在线观看| 国产亚洲欧美一区| 久久麻豆视频| 三级在线免费观看| 成人听书哪个软件好| 中文字幕激情小说| 中文字幕亚洲图片| 国产亚洲高清一区| 日韩精品一区二区三区四| www.爱久久.com| 久久久精品视频网站 | av人人综合网| 蜜桃久久精品乱码一区二区| 蜜桃av一区二区| 成年人av电影| 日韩精品免费一线在线观看| 国产精品久久久久av电视剧| 致1999电视剧免费观看策驰影院| 国产精品资源在线| 天天操天天摸天天干| 最近的2019中文字幕免费一页| 麻豆精品一区| 日本精品www| 日韩一区中文字幕| 日韩一级中文字幕| 国产精品久久久av久久久| 伊人色**天天综合婷婷| 亚洲图片综合网| 欧美日韩国产精品成人| 欧美韩日亚洲| 视频一区二区在线观看| 国产成人免费av在线| av毛片在线免费观看| 美女撒尿一区二区三区| 亚洲第一福利专区| 少妇性l交大片7724com| 色综合亚洲欧洲| sm国产在线调教视频| 欧美日韩一区二区三区在线视频| 国产一区美女在线| 在线观看日本网站| 欧美第一黄网免费网站| 精品久久综合| 精品人妻伦一二三区久| 884aa四虎影成人精品一区| 免费成人直播| 色欲色香天天天综合网www| 国产精品久久久久影院亚瑟| 日韩av资源站|