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

談到機器學習工作流平台,Google 的工程經驗非常豐富,它的 TensorFlow Extended 機器學習平台支撐了 Google 的搜尋,翻譯,視訊等核心業務;更重要的是其對機器學習領域工程效率問題的了解深刻,Google 的 Kubeflow 團隊于 2018 年底開源了 Kubeflow Pipelines(KFP), KFP 的設計與 Google 内部機器學習平台
TensorFlow Extended一脈相承,唯一的差別是 KFP 運作在 Kubernetes 的平台上,TFX 是運作在 Borg 之上的。
什麼是 Kubeflow Pipelines
Kubeflow Pipelines 平台包括:
- 能夠運作和追蹤實驗的管理控制台
- 能夠執行多個機器學習步驟的工作流引擎 (Argo)
- 用來自定義工作流的 SDK,目前隻支援 Python
而 Kubeflow Pipelines 的目标在于:
- 端到端的任務編排: 支援編排群組織複雜的機器學習工作流,該工作流可以被直接觸發,定時觸發,也可以由事件觸發,甚至可以實作由資料的變化觸發;
- 簡單的實驗管理: 幫助資料科學家嘗試衆多的想法和架構,以及管理各種試驗。并實作從實驗到生産的輕松過渡;
- 通過元件化友善重用: 通過重用 Pipelines 群組件快速建立端到端解決方案,無需每次從 0 開始的重新建構。
在阿裡雲上運作 Kubeflow Pipelines
看到 Kubeflow Piplines 的能力,大家是不是都摩拳擦掌,想一睹為快?但是目前國内想使用 Kubeflow Pipeline 有兩個挑戰:
- Pipelines 需要通過 Kubeflow 部署;而 Kubeflow 預設元件過多,同時通過 Ksonnet 部署 Kubeflow 也是很複雜的事情;
- 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 叢集, 可以參考 文檔
部署過程
yum install -y git
git clone --recursive https://github.com/aliyunContainerService/kubeflow-aliyun
- 安全配置
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
- 首先利用 kustomize 生成部署 yaml
cd kubeflow-aliyun/
kustomize build overlays/ack-auto-clouddisk > /tmp/ack-auto-clouddisk.yaml
- 檢視所在的 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 修改是否已經設定
- 将容器鏡像位址由
替換為gcr.io
registry.aliyuncs.com
sed -i.bak 's/gcr.io/registry.aliyuncs.com/g' \
/tmp/ack-auto-clouddisk.yaml
- 調整使用磁盤空間大小, 比如需要調整磁盤空間為 200G
sed -i.bak 's/storage: 100Gi/storage: 200Gi/g' \
/tmp/ack-auto-clouddisk.yaml
- 驗證 pipelines 的 yaml 檔案
kubectl create --validate=true --dry-run=true -f /tmp/ack-auto-clouddisk.yaml
- 利用 kubectl 部署 pipelines
kubectl create -f /tmp/ack-auto-clouddisk.yaml
- 檢視通路 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
- 通路 pipelines 管理控制台
如果使用自簽發證書,會提示此連結非私人連結,請點選顯示詳細資訊, 并點選通路此網站。
請輸入步驟 2.2 中的使用者名 admin 和設定的密碼。
這時就可以使用 pipelines 管理和運作訓練任務了。
Q&A
- 為什麼這裡要使用阿裡雲的 SSD 雲盤?
這是由于阿裡雲的 SSD 雲盤可以設定定期的自動備份,保證 pipelines 中的中繼資料不會丢失。
- 如何進行雲盤備份?
如果您想備份雲盤的内容,可以為雲盤
手動建立快照或者
為硬碟設定自動快照政策按時自動建立快照。
- 如何清理 Kubeflow Piplines 部署?
這裡的清理工作分為兩個部分:
- 删除 Kubeflow Pipelines 的元件
kubectl delete -f /tmp/ack-auto-clouddisk.yaml
- 通過 釋放雲盤 分别釋放 mysql 和 minio 存儲對應的兩個雲盤
- 如何使用現有雲盤作為資料庫存儲,而避免自動建立雲盤?
請參考
總結
本文為您初步介紹了 Kubeflow Pipelines 的背景和其所要解決的問題,以及如何在阿裡雲上通過 Kustomize 快速建構一套服務于機器學習的 Kubeflow Pipelines, 後續我們會分享如何利用 Kubeflow Pipelines 開發一個完整的機器學習流程。