更多內容關注專輯:
機器學習實戰linux
Kubeflow是在k8s平臺之上針對機器學習的開發、訓練、優化、部署、管理的工具集合,內部集成的方式融合機器學習中的不少領域的開源項目,好比Jupyter、tfserving、Katib、Fairing、Argo等。能夠針對機器學習的不一樣階段:數據預處理、模型訓練、模型預測、服務管理等進行管理。只要安裝了k8s,能夠在本地、機房、雲環境中部署。git
機器學習的目標最終仍是爲了在生產環境或者業務場景中使用,但這個過程倒是很複雜的,須要進行數據加載、切分、預處理、特徵工程、模型訓練、驗證、超參數調優、模型部署等等;爲了正常使用模型,還須要在模型上線後,持續不斷的輸入數據才能獲得預測的結果。github
人工構建整個過程並進行維護是很複雜的,使用Kubeflow能夠節省不少成本。好比在構建模型時,能夠選擇你喜歡的算法框架進行模型開發,試驗階段能夠經過Jupyter進行交互式的編程,基於Pipeline構建整個訓練過程的工做流實現各類處理邏輯,基於Katib進行超參數的自動優化;生產環境中,可使用TFJob等進行分佈式訓練,基於KFServing等進行在線模型的服務,基於Metadata或TensorBoard進行模型的監控。web
擴展性:Kf基於k8s能夠達到可擴展、可移植、分佈式ML平臺, 經過Kf你能夠輕鬆管理整個AI生命週期,好比在模型部署的時候自動進行擴容、在試驗階段自由建立筆記本。因爲底層基於K8s來提供一致性與高可靠,使用者能夠更聚焦於上層的算法模型設計,而不用過多的關注底層構建。算法
迭代性:構建高質量的機器學習模型可能須要快速的迭代,Kf提供友好的UI界面支持快速追蹤對比實驗結果,你能夠很方便的決定哪一個模型訓練效果更好。Kf內部提供Jupyter筆記本,支持如Tensorflow、Pytorch等流行的深度學習框架。模型訓練配置簡單,方便進行分佈式訓練、部署,提高端到端的開發過程。docker
混合性:機器學習模型的訓練可能涉及多個團隊、多個集羣和雲環境的共享,Kf支持主流的雲平臺,提供各個環境之間的移植性。你能夠在本地開發模型、在集羣的GPU上進行訓練、最後部署到雲環境中,快速的開發模式和高效的部署使得整個過程就像單機操做同樣。編程
超參調優:在模型訓練中,超參數調優是很關鍵也很複雜的過程,對模型最終的準確度和性能有很大的影響,手動嘗試各類超參數的組合很是浪費時間。Kf經過Katib來支持自動超參數優化,這種自動優化會節省大量的計算時間,提升模型優化的效率。bootstrap
持續集成:Kf目前並無這個方面成型的產品,可是能夠經過Pipeline組件來實現。Pipeline支持建立可重複的工做流,能夠自動觸發整個工做流的重跑以及模型的訓練。vim
Kubeflow的部署其實很簡單,主要是依賴的鏡像大多出自Google所以會遇到不少網絡問題。解決辦法推薦是經過阿里雲鏡像手動下載docker鏡像,而後tag成目標鏡像;或者直接修改kustomize中的鏡像地址。windows
安裝時須要下載kfctl並按照文檔配置環境變量,好比我試過Ubuntu 18,能夠參考下面的文檔:https://www.kubeflow.org/docs/started/k8s/kfctl-k8s-istio/,大體流程以下:
1 到地址中下載對應的kfctl,darwin爲mac,linux爲其餘,不支持windows https://github.com/kubeflow/kfctl/releases/tag/v1.0.2 2 壓縮包解壓縮 tar -xvf kfctl_v1.0.2_<platform>.tar.gz 3 配置環境變量 vi /etc/profile export PATH=$PATH:"<path-to-kfctl>" export KF_NAME=<自定義名稱> export BASE_DIR=<path to a base directory> export KF_DIR=${BASE_DIR}/${KF_NAME} export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml" 4 更新環境變量 source /etc/profile 5 執行命令 mkdir -p ${KF_DIR} cd ${KF_DIR} kfctl apply -V -f ${CONFIG_URI} 6 查看安裝服務 kubectl -n kubeflow get all
整個安裝過程很緩慢,尤爲是前期須要安裝cert-manager進行權限控制,須要等服務正常。
中間會有大量的鏡像報錯ImagePullBackOff,這表示鏡像拉取失敗。解決辦法:
1 查看具體pod的詳情 kubectl describe pod admission-webhook-bootstrap-stateful-set-0 -n kubeflow 2 去阿里雲鏡像站搜索鏡像 docker pull registry.cn-hangzhou.aliyuncs.com/pigeonw/ingress-setup 3 重命名 sudo docker tag registry.cn-hangzhou.aliyuncs.com/pigeonw/ingress-setup:latest gcr.io/kubeflow-images-public/ingress-setup:latest 4 修改kustomize中的配置 cd ./kustomize/webhook/base sudo vim deployment.yaml 修改鏡像拉取策略 imagePullPolicy: IfNotPresent 原來若是是Always表示老是會去拉取遠程鏡像,IfNotPresent表示本地不存在時纔會拉取 5 修改完成後等待一會,若是狀態尚未變成Running,能夠執行 kfctl apply -f kfctlxxx.yaml 從新建立
都部署成功後,大體能夠看到以下的運行狀態,僅供參考:
部署成功後,經過端口映射能夠支持在外部訪問:
export NAMESPACE=istio-system kubectl port-forward --address 0.0.0.0 -n ${NAMESPACE} svc/istio-ingressgateway 8080:80
而後訪問目標地址便可,如localhost:8080,自定義namespace後能夠看到以下畫面:
後面將會分享Notebook、Pipeline、Katib等的使用,感謝關注。