【編者的話】本文來自 Kubeflow 項目的產品經理 David Aronchick 和首席工程師 Jeremy Lewi,主要講了他們新的開源項目——Kubeflow 的一些入門知識,Kubeflow 致力於使 Kubernetes 上的機器學習堆棧變得簡單,快速及可擴展。
Kubernetes 已經迅速成長爲部署複雜工做負載的混合解決方案。 雖然提供的只是無狀態服務,但客戶已經開始將複雜的工做負載轉移到Kubernetes 平臺上,並充分利用了 Kubernetes 提供的豐富API、可靠性以及良好的性能。其中增加最快的用途之一是使用 Kubernetes 做爲機器學習的部署平臺。
構建一套生產環境下的機器學習系統須要涉及各類組件,一般須要使用混合供應商並結合自研的解決方案。使用相對複雜的配置來鏈接和管理這些服務,給學習機器學習帶來了巨大障礙。基礎設施工程師一般會花費大量時間手動部署,而後才能測試一個模型。
更糟糕的是,上述部署與他們部署的集羣緊密相關,這些堆棧是不可移植的,這意味着在沒有進行重大從新架構的狀況下,將模型從筆記本電腦遷移到高度可擴展的雲端集羣其實是不可能的。全部這些差別都會浪費極大的精力,而且每次轉換均可能會引入 bug。html
爲了解決這些問題,咱們決定建立 Kubeflow 項目,一個新的開源 Github repo,致力於在 Kubernetes 上讓 ML(Machine Learning)堆棧變得簡單,快速、可擴展。
這個倉庫包含:ios
由於此解決方案基於 Kubernetes, 因此任何運行 Kubernetes 的地方均可以使用此方案。只需啓動一個集羣,即可使用。git
假設你正在使用兩個不一樣的 Kubernetes 集羣:一個本地的 minikube 集羣和一個使用 GPU 的GKE集羣,並且有兩 kubectl 上下文,分別命名爲 minikube 和 gke。
首先須要初始化 ksonnet,並安裝 Kubeflow(ksonnet使用前須要在操做系統中安裝,具體可參考此處)。github
ks init my-kubeflow cd my-kubeflow ks registry add kubeflow \ github.com/google/kubeflow/tree/master/kubeflow ks pkg install kubeflow/core ks pkg install kubeflow/tf-serving ks pkg install kubeflow/tf-job ks generate core kubeflow-core --name=kubeflow-core
而後定義兩個集羣通信的環境變量。ubuntu
kubectl config use-context minikube ks env add minikube kubectl config use-context gke ks env add gke
在集羣中建立環境變量,首先在 minikube 上建立:瀏覽器
ks apply minikube -c kubeflow-core
而後在用於快速訓練的多節點 GKE 集羣中建立:
架構
ks apply gke -c kubeflow-core
爲了在任何地方都能輕易部署這樣一套豐富的 ML 堆棧,環境變量的修改和重寫應該保持在最低限度。
執行如下命令就能夠訪問任何一個部署:
app
kubectl port-forward tf-hub-0 8100:8000
打開地址 ttp://127.0.0.1:8100
訪問 JupyterHub。使用下面的命令,就能夠經過 kubectl 修改環境變量:機器學習
# To access minikube kubectl config use-context minikube # To access GKE kubectl config use-context gke
執行應用
時, 就會在 k8s上啓動:ide
假設你想提交一個訓練任務,Kubeflow 提供了 ksonnet 原型,能夠輕鬆定義組件。tf-job 原型能夠很容易地爲你的代碼建立一個任務,可是對於訓練任務,咱們將使用運行了 TensorFlow CNN 基準的 tf-cnn 原型。
提交訓練任務前,首先從模型中生成一個新的任務
ks generate tf-cnn cnn --name=cnn
tf-cnn 模型默認使用一個 worker,沒有使用 GPU,很適合 minikube 集羣,直接提交便可。
ks apply minikube -c cnn
對於 GKE,咱們要轉爲使用另一個模型,以便充分利用其多節點及 GPU 的優點,首先,列出全部可用參數:
# To see a list of parameters ks prototype list tf-job
調整參數:
ks param set --env=gke cnn num_gpus 1 ks param set --env=gke cnn num_workers 1 ks apply gke -c cnn
注意,咱們設置變量後,在只有部署到 GKE 時纔會生效,minikube 中的參數並未改變(編者注: 使用了 -- env
來指定想要修改參數的集羣)。
訓練以後,就能夠將模型遷移到用到的服務上。
Kubeflow 還包括一個服務包。在另一個單獨的例子中,咱們訓練了一個標準的 Inception 模型,並將訓練好的模型存儲在名爲 gs:// kubeflow-models
的 bucket 中,路徑爲 / inception
。
能夠經過下面的命令,部署一個訓練好的模型
ks generate tf-serving inception --name=inception ---namespace=default --model_path=gs://kubeflow-models/inception ks apply gke -c inception
這也同時突出了 Kubeflow 另一個功能 -- 部署時接受輸入。這條命令建立了一個基於 GKE 集羣的 tf-serving
服務,面向應用程序可用。
有關部署和監控 TensorFlow 訓練任務和 TensorFlow 模型的更多信息,請參閱用戶指南。
咱們想引出的是 ksonnet 的使用。咱們認爲多環境(dev,test,prod)開發將會是大多數 Kubeflow 用戶的常態。經過將環境做爲一等概念,ksonnet 使 Kubeflow 用戶能夠在不一樣環境之間輕易地遷移工做負載。
咱們以爲 Ksonnet 是一個不錯的選擇,特別是如今 Helm 正在把 Ksonnet 整合到其下一個版本的平臺中。有關 ksonnet 的更多信息能夠在 ksonnet文檔中找到。
咱們也要感謝 Heptio 團隊加快支持了 Kubeflow 用到的一些 ksonnet 關鍵功能。
咱們正在努力創建一個社區,並期待你們的貢獻!咱們已經和許多團隊合做好比 CaiCloud、Red Hat&OpenShift、Canonical、Weavework、Container Solutions等等。CoreOS 對 Kubeflow 寄予了厚望:
「Kubeflow 在簡易化 Kubernetes 上配置和生產化機器學習工做負載上取得了重大進步,咱們認爲這會極大程度上讓更多企業接受該平臺。咱們期待與 Kubeflow 團隊合做,提供 Kubeflow 與企業級 Kubernetes 平臺 -- Tectonic 的緊密集成。「 -- Reza Shafii,CoreOS 產品副總裁
若是你如今想在瀏覽器中嘗試 Kubeflow,咱們已經與Katacoda合做, 點擊這裏輕鬆嘗試!
咱們纔剛剛起步!咱們很樂意爲您提供幫助,能夠經過如下方式關注咱們:
原文連接:Introducing Kubeflow - A Composable, Portable, Scalable ML Stack Built for Kubernetes(翻譯:李加慶)