天天看點

像Google一樣建構機器學習系統 - 在阿裡雲上搭建Kubeflow Pipelines

本系列将利用阿裡雲容器服務,幫助您上手Kubeflow Pipelines.

介紹

機器學習的工程複雜度,除了來自于常見的軟體開發問題外,還和機器學習資料驅動的特點相關。而這就帶來了其工作流程鍊路更長,資料版本失控,實驗難以跟蹤、結果難以重制,模型疊代成本巨大等一系列問題。為了解決這些機器學習固有的問題,很多企業建構了内部機器學習平台來管理機器學習生命周期,其中最有名的是Google的Tensorflow Extended,Facebook的FBLearner Flow,Uber的Michelangelo,遺憾的是這些平台都需要綁定在公司内部的基礎設施之上,無法徹底開源。而這些機器學習平台的骨架就是機器學習工作流系統,它可以讓資料科學家靈活定義自己的機器學習流水線,重用已有的資料處理和模型訓練能力,進而更好的管理機器學習生命周期。

像Google一樣建構機器學習系統 - 在阿裡雲上搭建Kubeflow Pipelines

談到機器學習工作流平台,Google的工程經驗非常豐富,它的TensorFlow Extended機器學習平台支撐了Google的搜尋,翻譯,視訊等核心業務;更重要的是其對機器學習領域工程效率問題的了解深刻,

Google的Kubeflow團隊于2018年底開源了Kubeflow Pipelines(KFP), KFP的設計與Google内部機器學習平台

TensorFlow Extended

一脈相承,唯一的差別是KFP運作在Kubenretes的平台上,TFX是運作在Borg之上的。

什麼是Kubeflow Pipelines

Kubeflow Pipelines平台包括:

  • 能夠運作和追蹤實驗的管理控制台
  • 能夠執行多個機器學習步驟的工作流引擎(Argo)
  • 用來自定義工作流的SDK,目前隻支援Python

而Kubeflow Pipelines的目标在于:

  • 端到端的任務編排: 支援編排群組織複雜的機器學習工作流,該工作流可以被直接觸發,定時觸發,也可以由事件觸發,甚至可以實作由資料的變化觸發
  • 簡單的實驗管理: 幫助資料科學家嘗試衆多的想法和架構,以及管理各種試驗。并實作從實驗到生産的輕松過渡。
  • 通過元件化友善重用: 通過重用Pipelines群組件快速建立端到端解決方案,無需每次從0開始的重新建構。

在阿裡雲上運作Kubeflow Pipelines

看到Kubeflow Piplines的能力,大家是不是都摩拳擦掌,想一睹為快?但是目前國内想使用Kubeflow Pipeline有兩個挑戰:

1.Pipelines需要通過Kubeflow部署;而Kubeflow預設元件過多,同時通過Ksonnet部署Kubeflow也是很複雜的事情。 2.Pipelines本身和谷歌雲平台有深度耦合,無法在運作其他雲平台上或者裸金屬伺服器的環境。

為了友善國内的使用者安裝Kubeflow Pipelines,阿裡雲容器服務團隊提供了基于Kustomize的Kubeflow Pipelines部署方案。和普通的Kubeflow基礎服務不同,Kubeflow Pipelines需要依賴于mysql和minio這些有狀态服務,也就需要考慮如何持久化和備份資料。在本例子中,我們借助阿裡雲SSD雲盤作為資料持久化的方案,分别自動的為mysql和minio建立SSD雲盤。

您可以在阿裡雲上嘗試一下單獨部署最新版本Kubeflow Pipelines。

前提條件

在Linux和Mac OS環境,可以執行

opsys=linux  # or darwin, or windows
curl -s https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest |\
  grep browser_download |\
  grep $opsys |\
  cut -d '"' -f 4 |\
  xargs curl -O -L
mv kustomize_*_${opsys}_amd64 /usr/bin/kustomize
chmod u+x /usr/bin/kustomize           

在Windows環境,可以下載下傳

kustomize_2.0.3_windows_amd64.exe
  • 在阿裡雲容器服務建立Kubernetes叢集, 可以參考 文檔

部署過程

1.通過ssh通路Kubernetes叢集,具體方式可以參考

2.下載下傳源代碼

yum install -y git
git clone --recursive https://github.com/aliyunContainerService/kubeflow-aliyun           

3.安全配置

3.1 配置TLS證書。如果沒有TLS證書,可以通過下列指令生成

yum install -y openssl
domain="pipelines.kubeflow.org"
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.key -out kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.crt -subj "/CN=$domain/O=$domain"           
如果您有TLS證書,請分别将私鑰和證書儲存到

kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.key

kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.crt

3.2 配置admin的登入密碼

yum install -y httpd-tools
htpasswd -c kubeflow-aliyun/overlays/ack-auto-clouddisk/auth admin
New password:
Re-type new password:
Adding password for user admin
           

4.首先利用kustomize生成部署yaml

cd kubeflow-aliyun/
kustomize build overlays/ack-auto-clouddisk > /tmp/ack-auto-clouddisk.yaml           

5.檢視所在的Kubernetes叢集節點所在的地域和可用區,并且根據其所在節點替換可用區,假設您的叢集所在可用區為

cn-hangzhou-g

,可以執行下列指令

sed -i.bak 's/regionid: cn-beijing/regionid: cn-hangzhou/g' \
    /tmp/ack-auto-clouddisk.yaml

sed -i.bak 's/zoneid: cn-beijing-e/zoneid: cn-hangzhou-g/g' \
    /tmp/ack-auto-clouddisk.yaml           
建議您檢查一下/tmp/ack-auto-clouddisk.yaml修改是否已經設定

6.将容器鏡像位址由

gcr.io

替換為

registry.aliyuncs.com

sed -i.bak 's/gcr.io/registry.aliyuncs.com/g' \
    /tmp/ack-auto-clouddisk.yaml           

7.調整使用磁盤空間大小, 比如需要調整磁盤空間為200G

sed -i.bak 's/storage: 100Gi/storage: 200Gi/g' \
    /tmp/ack-auto-clouddisk.yaml           

8.驗證pipelines的yaml檔案

kubectl create --validate=true --dry-run=true -f /tmp/ack-auto-clouddisk.yaml           

9.利用kubectl部署pipelines

kubectl create -f /tmp/ack-auto-clouddisk.yaml           

10.檢視通路pipelines的方式,我們通過ingress暴露pipelines服務,在本例子中,通路ip是112.124.193.271。而Pipelines管理控制台的連結是:

https://112.124.193.271/pipeline/
kubectl get ing -n kubeflow
NAME             HOSTS   ADDRESS           PORTS     AGE
ml-pipeline-ui   *       112.124.193.271   80, 443   11m           

11.通路pipelines管理控制台

如果使用自簽發證書,會提示此連結非私人連結,請點選顯示詳細資訊, 并點選通路此網站。

像Google一樣建構機器學習系統 - 在阿裡雲上搭建Kubeflow Pipelines

請輸入步驟2.2中的使用者名admin和設定的密碼

像Google一樣建構機器學習系統 - 在阿裡雲上搭建Kubeflow Pipelines

這時就可以使用pipelines管理和運作訓練任務了。

像Google一樣建構機器學習系統 - 在阿裡雲上搭建Kubeflow Pipelines

Q&A

1.為什麼這裡要使用阿裡雲的SSD雲盤?

這是由于阿裡雲的SSD雲盤可以設定定期的自動備份,保證pipelines中的中繼資料不會丢失。

2.如何進行雲盤備份?

如果您想備份雲盤的内容,可以為雲盤

手動建立快照

或者

為硬碟設定自動快照政策

按時自動建立快照。

3.如何清理Kubeflow Piplines部署?

這裡的清理工作分為兩個部分:

  • 删除Kubeflow Pipelines的元件
kubectl delete -f /tmp/ack-auto-clouddisk.yaml           
  • 通過 釋放雲盤 分别釋放mysql和minio存儲對應的兩個雲盤

4.如何使用現有雲盤作為資料庫存儲,而避免自動建立雲盤?

請參考

總結

本文為您初步介紹了Kubeflow Pipelines的背景和其所要解決的問題,以及如何在阿裡雲上通過Kustomize快速建構一套服務于機器學習的Kubeflow Pipelines,後續我們會分享如何利用Kubeflow Pipelines開發一個完整的機器學習流程。

繼續閱讀