介紹
機器學習的工程複雜度,除了來自於常見的軟體開發問題外,還和機器學習資料驅動的特點相關,這就帶來了其工作流程鏈路更長,資料版本失控,實驗難以跟蹤、結果難以重現,模型迭代成本巨大等一系列問題。為了解決這些機器學習特有的問題,很多企業構建了內部機器學習平臺來管理機器學習生命週期,其中最有名的是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 Pipeline
看到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複製程式碼
建議您檢查一下/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開發一個完整的機器學習流程。
本文為雲棲社群原創內容,未經允許不得轉載。