精品欧美一区二区三区在线观看 _久久久久国色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)

av免费观看一区二区| 免费在线观看黄视频| 3d欧美精品动漫xxxx无尽| 国产人妖乱国产精品人妖| 国产日韩欧美中文| 国内偷拍精品视频| 欧美自拍一区| 欧美日韩国产区一| 东北少妇不带套对白| 国产污视频在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美成人合集magnet| 国产成人av无码精品| 国产91在线播放精品| 一区二区三区日韩精品| 欧美精品一区二区三区久久| 一卡二卡三卡在线观看| 激情久久久久久| 在线看日韩av| 国产黑丝在线观看| 色综合一区二区日本韩国亚洲| 午夜精品一区二区三区免费视频 | 97超级在线观看免费高清完整版电视剧| 亚洲一区欧美在线| 99国产**精品****| 日韩激情av在线免费观看| 8x8x成人免费视频| 欧美成人性网| 亚洲成人激情自拍| 中文字幕av久久| 国产中文字幕在线观看| av一区二区三区四区| 91欧美精品成人综合在线观看| 黄色片中文字幕| 亚洲乱码久久| 欧美黄色免费网站| 国产精品国产精品88| 国产免费播放一区二区| 日韩成人在线电影网| 丰满人妻一区二区三区53视频| 男人亚洲天堂| 欧美亚洲国产怡红院影院| 欧美a在线视频| 高h视频在线播放| 一区二区成人在线| 男人日女人的bb| 国产原创精品视频| 国产精品久久久久影院亚瑟| 日韩精品福利视频| 黄色片在线免费观看| 91蜜桃在线免费视频| 国产综合18久久久久久| 熟妇高潮一区二区三区| 久久99国产精品免费网站| 国产精品av网站| 日本视频免费观看| 久久大逼视频| 国产精品电影在线观看| 性高潮视频在线观看| 久久一区二区三区四区五区| 国产成人精品亚洲精品| 久久久黄色大片| 久久久久久网| 国产精品偷伦视频免费观看国产 | 久久免费视频99| 狠狠入ady亚洲精品| 久久理论片午夜琪琪电影网| 久久综合色综合| 亚洲区欧美区| 日本久久久久久久久久久| www毛片com| 蜜臀av性久久久久蜜臀aⅴ | 久久久亚洲成人| 亚洲一区欧美在线| 天堂成人国产精品一区| 欧美有码在线观看| 国产成人精品一区二区色戒| 久久精品99久久久| 99re视频| 牛牛影视精品影视| 国产精品日产欧美久久久久| 先锋影音男人资源| 大菠萝精品导航| 欧美综合视频在线观看| 国产欧美激情视频| 国产一区调教| 夜夜嗨av一区二区三区免费区| 青青操在线播放| 在线成人h网| 国产精品九九久久久久久久| 99久久久国产精品无码网爆 | 欧美狂野另类xxxxoooo| 丰满人妻一区二区三区大胸| 老司机aⅴ在线精品导航 | 最近中文字幕免费视频| 一区二区三区视频免费观看 | av剧情在线观看| 欧美系列一区二区| 中文字幕一区二区三区人妻在线视频 | 久久精品国产亚洲av麻豆| 欧美日一区二区| 欧美激情图片区| 波多野结衣爱爱| 国产suv精品一区二区6| 色99中文字幕| 黄色视屏在线免费观看| 欧美性三三影院| 中文字幕乱视频| 欧美第十八页| 国产97人人超碰caoprom| aaa级黄色片| 久久久不卡网国产精品一区| 蜜桃网站在线观看| 成人午夜在线| 日韩精品在线第一页| 国产天堂av在线| 三级不卡在线观看| 国产精品美女诱惑| 黄色av电影在线播放| 欧美午夜片欧美片在线观看| 久草福利在线观看| 日韩夫妻性生活xx| 性色av一区二区三区免费| 97超碰人人模人人人爽人人爱| 国产v综合v亚洲欧| 中文字幕成人一区| 欧美性xxx| 亚洲第一福利在线观看| 国产三级国产精品国产国在线观看| 久久婷婷麻豆| 久久久久久高清| 久久香蕉av| 日韩亚洲欧美成人一区| 国产wwwwxxxx| 日本人妖一区二区| 欧美美乳视频网站在线观看| 9999热视频在线观看| 欧美日韩一二三| 日本精品在线观看视频| 久久狠狠一本精品综合网| 国产精品自拍首页| 欧洲在线视频| 日韩一级大片在线| 免费中文字幕在线| 国产乱妇无码大片在线观看| 中国人体摄影一区二区三区| 久久久久久久性潮| 色综合伊人色综合网| 中文字字幕在线中文乱码| 国产视频不卡一区| 午夜激情在线观看视频| 成人av资源电影网站| 国产成人久久久精品一区| 欧美女v视频| 日韩人体视频一二区| 精品无码人妻一区| 久久蜜桃资源一区二区老牛| 欧美性天天影院| 深夜视频一区二区| 神马国产精品影院av| 国产农村老头老太视频| 亚洲精品五月天| 亚洲精品第二页| 国产精品美女久久久浪潮软件| 美女被啪啪一区二区| 美女福利一区二区| 中文字幕亚洲一区在线观看| 国产乱码精品一区二三区蜜臂| 一区二区在线免费观看| www.17c.com喷水少妇| 国产精品久久久久毛片大屁完整版 | 久久久天堂国产精品女人| 丝袜+亚洲+另类+欧美+变态| 狠狠色狠狠色综合日日五| 美女爆乳18禁www久久久久久| 日本欧美在线观看| 久久久久久久免费视频| 国产厕拍一区| 日韩美女av在线免费观看| av资源种子在线观看| 欧美日韩国产精选| 九九热这里有精品视频| www激情久久| 欧美美女一级片| 亚洲毛片网站| 亚洲精品自在在线观看| 97久久亚洲| 国产精品久久久久999| 亚洲妇熟xxxx妇色黄| 亚洲欧美第一页| av网站免费大全| 欧美午夜精品伦理| 欧美黄片一区二区三区| 26uuu精品一区二区| 亚洲精品免费一区亚洲精品免费精品一区| 欧美午夜一区| 亚洲三区视频| 欧美顶级毛片在线播放| 国产日韩中文字幕| 美女网站在线看| 久久久国产视频| 精品av中文字幕在线毛片| 日韩午夜在线观看| 免费精品一区二区| 亚洲国产aⅴ天堂久久| 国产在线免费av| 97se亚洲国产综合自在线观| 三级黄色片免费看| 久久久久久久高潮| 男人插女人视频在线观看| 日韩免费特黄一二三区| 国内精品久久国产| 欧美经典影片视频网站| 国产精品福利小视频| 不卡的av影片| 麻豆国产精品va在线观看不卡 | 中文字幕欧美日韩一区| 艳妇乳肉豪妇荡乳xxx| 国产伦精品一区二区三区免费迷| 日本999视频| 亚洲精品综合| av在线免费观看国产| 99久久精品国产亚洲精品| 色吧亚洲视频| 国产一区二区三区电影在线观看 | 国产在线超碰| 亚洲毛片在线观看.| 色呦呦视频在线| 日韩欧美国产系列| 一级片视频网站| 欧日韩精品视频| 99re热视频| 91福利资源站| 无码人妻一区二区三区线 | 中文字幕第315页| 色偷偷成人一区二区三区91| 97久久久久久久| 亚洲国产视频直播| 久久久久亚洲AV| 夜夜夜精品看看| 九九热国产精品视频| 亚洲免费观看高清完整版在线| 91av手机在线| 中文字幕在线不卡| 性色国产成人久久久精品| 欧美国产乱子伦 | 无码国产伦一区二区三区视频 | 欧美色偷偷大香| 怡春院在线视频| 欧美日韩成人一区| 97成人免费视频| 欧美一区二区三区婷婷月色| 国产福利资源在线| 日韩精品一区在线| 成人毛片在线免费观看| 亚洲第一精品电影| 五月婷婷丁香网| 亚洲人成网站777色婷婷| 国产黄色片在线播放| 主播福利视频一区| 麻豆视频在线观看免费| 久久91精品国产| 92久久精品| 日本欧美黄网站| 欧美综合影院| www.一区二区三区| 精品少妇3p| 欧美一区1区三区3区公司| 精品一区二区三区在线 | 在线免费观看麻豆| 亚洲国产成人午夜在线一区| 侵犯稚嫩小箩莉h文系列小说| 亚洲精品国产精华液| 日韩久久久久久久久| 一本到一区二区三区| 中文字幕第99页| 日韩欧美中文一区| 五月天福利视频| 在线观看不卡av| 伊人222成人综合网| 97精品国产97久久久久久| 精品日韩视频| 9a蜜桃久久久久久免费| 亚洲婷婷影院| 成人手机视频在线| 夜久久久久久| 欧洲成人综合网| 高清av一区二区| yy1111111| 日本一区二区三区dvd视频在线| 538精品视频| 成人6969www免费视频| 欧美伦理视频网站| 欧美一区二区视频17c| 中文字幕视频一区二区| 一区二区三区亚洲变态调教大结局| 久久久久久电影| 国产精品久久久久一区二区| 久久偷拍免费视频| 俄罗斯一级**毛片在线播放 | 国产精品免费成人| 蜜桃传媒麻豆第一区在线观看| 青娱乐精品在线| 久久久久9999亚洲精品| 欧美精品色哟哟| 色综合天天综合网天天狠天天| 国产三级精品在线观看| 亚洲美女av黄| 麻豆蜜桃在线| 91九色精品视频| 免费观看久久av| 国内少妇毛片视频| 日本特黄久久久高潮| 日韩精品视频一区二区| 中文字幕一区二区三区不卡| 一区二区三区在线观看av| 日韩亚洲欧美在线观看| 欧美老女人性开放| 久99九色视频在线观看| 成人国产精品一区二区免费麻豆| 国产精品区一区二区三含羞草| 欧美韩国日本在线观看| 男女高潮又爽又黄又无遮挡| 国产成人在线看| 国产精品综合激情| 91国产成人在线| 久久米奇亚洲| 91精品国产777在线观看| 亚洲亚洲一区二区三区| 特级毛片在线免费观看| 日本在线不卡一区| 丰满圆润老女人hd| 狠狠躁天天躁日日躁欧美| www日本视频| zzijzzij亚洲日本成熟少妇| 国产成人毛片| 先锋影音欧美| 日韩二区在线观看| 级毛片内射视频| 在线视频一区二区三| 国产在线一在线二| 奇米四色中文综合久久| 天堂一区二区三区四区| 久久久亚洲精品无码| 国产91高潮流白浆在线麻豆 | 欧美在线1区| 久久综合桃花网| 伊人性伊人情综合网| 国产夫绿帽单男3p精品视频| 久久久精品日本| 精品视频一区二区三区在线观看| 在线观看免费黄色片| 国产一区二区三区视频在线播放| www.av成人| 欧美一级二级在线观看| 1区2区3区在线视频| 91精品入口蜜桃| 欧美天天视频| 亚洲一级Av无码毛片久久精品| 亚洲一区二区av在线| 男人天堂手机在线观看| 777精品视频| 国产综合久久久| 天天综合网日韩| 中文字幕综合网| 亚洲毛片欧洲毛片国产一品色| 久久久在线视频| 亚洲精品推荐| 91小视频网站| 亚洲女同女同女同女同女同69| 不卡视频在线播放| 91成人福利在线| 欧美一区二区性| 久久精品一二三四| 亚洲成人av电影在线| 男生女生差差差的视频在线观看| 国产精品露脸自拍| 亚洲欧美一级二级三级| 日本一区二区在线免费观看| 91久久精品日日躁夜夜躁欧美| 日本黄色片在线观看| www.久久艹| 日韩不卡在线观看日韩不卡视频| 午夜爽爽爽男女免费观看| 精品国产乱码久久久久久夜甘婷婷 | 欧美日韩播放| 日本特黄在线观看| 大伊人狠狠躁夜夜躁av一区| avav免费在线观看| 成人动漫视频在线观看完整版| 香蕉国产精品偷在线观看不卡| 永久免费未视频| 日韩精品999| 国产一区二区久久久久| 国产精品网站免费| 亚洲同性同志一二三专区| 四虎永久在线观看| 国产有码在线一区二区视频| 国产欧美69| 日韩a级片在线观看|