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

談到機器學習工作流平台,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。
前提條件
- 您需要安裝 kustomize
在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管理控制台
如果使用自簽發證書,會提示此連結非私人連結,請點選顯示詳細資訊, 并點選通路此網站。
請輸入步驟2.2中的使用者名admin和設定的密碼
這時就可以使用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開發一個完整的機器學習流程。