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

介紹
機器學習的工程複雜度,除了來自於常見的軟件開發問題外,還和機器學習數據驅動的特色相關,這就帶來了其工做流程鏈路更長,數據版本失控,實驗難以跟蹤、結果難以重現,模型迭代成本巨大等一系列問題。爲了解決這些機器學習特有的問題,不少企業構建了內部機器學習平臺來管理機器學習生命週期,其中最有名的是Google的Tensorflow Extended,Facebook的FBLearner Flow,Uber的Michelangelo,遺憾的是這些平臺都須要綁定在公司內部的基礎設施之上,沒法完全開源。而這些機器學習平臺的骨架就是機器學習工做流系統,它可讓數據科學家靈活定義本身的機器學習流水線,重用已有的數據處理和模型訓練能力,進而更好的管理機器學習生命週期。node

圖片描述

談到機器學習工做流平臺,Google的工程經驗很是豐富,它的TensorFlow Extended機器學習平臺支撐了Google的搜索,翻譯,視頻等核心業務;更重要的是其對機器學習領域工程效率問題的理解深入,mysql

Google的Kubeflow團隊於2018年末開源了Kubeflow Pipelines(KFP), KFP的設計與Google內部機器學習平臺TensorFlow Extended一脈相承,惟一的區別是KFP運行在Kubenretes的平臺上,TFX是運行在Borg之上的。linux

什麼是Kubeflow Pipelines
Kubeflow Pipelines平臺包括:git

可以運行和追蹤實驗的管理控制檯
可以執行多個機器學習步驟的工做流引擎(Argo)
用來自定義工做流的SDK,目前只支持Python
而Kubeflow Pipelines的目標在於:github

端到端的任務編排: 支持編排和組織複雜的機器學習工做流,該工做流能夠被直接觸發,定時觸發,也能夠由事件觸發,甚至能夠實現由數據的變化觸發
簡單的實驗管理: 幫助數據科學家嘗試衆多的想法和框架,以及管理各類試驗。並實現從實驗到生產的輕鬆過渡。
經過組件化方便重用: 經過重用Pipelines和組件快速建立端到端解決方案,無需每次從0開始的從新構建。
在阿里雲上運行Kubeflow Pipeline
看到Kubeflow Piplines的能力,你們是否是都摩拳擦掌,想一睹爲快?可是目前國內想使用Kubeflow Pipeline有兩個挑戰:
1.Pipelines須要經過Kubeflow部署;而Kubeflow默認組件過多,同時經過Ksonnet部署Kubeflow也是很複雜的事情。 2.Pipelines自己和谷歌雲平臺有深度耦合,沒法在運行其餘雲平臺上或者裸金屬服務器的環境。sql

爲了方便國內的用戶安裝Kubeflow Pipelines,阿里雲容器服務團隊提供了基於Kustomize的Kubeflow Pipelines部署方案。和普通的Kubeflow基礎服務不一樣,Kubeflow Pipelines須要依賴於mysql和minio這些有狀態服務,也就須要考慮如何持久化和備份數據。在本例子中,咱們藉助阿里雲SSD雲盤做爲數據持久化的方案,分別自動的爲mysql和minio建立SSD雲盤。數據庫

您能夠在阿里雲上嘗試一下單獨部署最新版本Kubeflow Pipelines。windows

前提條件
您須要安裝kustomize
在Linux和Mac OS環境,能夠執行api

opsys=linux # or darwin, or windows
curl -s https://api.github.com/repos/... |\
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/aliyunCont...
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/pipel...

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開發一個完整的機器學習流程。

相關文章
相關標籤/搜索