業界 | 谷歌發佈機器學習工具庫Kubeflow:可提供最佳OSS解決方案

 2017-12-11 12:08:00.0

原標題:業界 | 谷歌發佈機器學習工具庫Kubeflow:可提供最佳OSS解決方案

選自GitHub

Kubeflow 是谷歌發佈的一個機器學習工具庫,致力於使運行在 Kubernetes 上的機器學習變的更輕鬆、便捷和可擴展;Kubeflow 的目標不是重建其他服務,而是提供一種簡便的方式找到最好的 OSS 解決方案。


Kubeflow 項目旨在使 Kubernetes 上的機器學習變的輕鬆、便捷、可擴展,其目標不是重建其他服務,而是提供一種簡便的方式找到最好的 OSS 解決方案。該庫包含包含的清單用於創建:

  • 用於創建和管理交互式 Jupyter notebook 的 JupyterHub

  • 可配置爲使用 CPU 或 GPU,並通過單一設置調整至單個集羣大小的 TensorFlow 訓練控制器(Tensorflow Training Controller)

  • TF 服務容器(TF Serving container)

該文檔詳述在可運行 Kubernetes 的任何環境中運行 kubeflow 項目的步驟。

Kubeflow 目標

其目標是通過發揮 Kubernetes 的特長,從而更便捷地運用機器學習:

  • 在不同的基礎設施上實現簡單、可重複的便攜式部署(筆記本<-> ML 裝備 <-> 訓練集羣 <-> 生產集羣)

  • 部署和管理鬆散耦合的微服務

  • 根據需求進行擴展

由於機器學習從業者可供使用的工具非常多,所以核心目標是你可以根據需求自定義堆棧,並讓系統處理「無賴的東西」。雖然我們已開始使用少許技術,但我們正在與很多不同項目展開合作,以涵蓋更多額外的工具。最終,我們希望給出一組簡單的清單,只要在 Kubernetes 已運行的地方便能輕鬆使用 ML 堆棧,並可根據部署的集羣實現自我配置。

設置

該文檔假設你已經有一個可用的 Kubernetes 集羣。對於具體的 Kubernetes 安裝,可能需要額外的配置。

Minikube

Minikube 是一個讓我們在本地運行 Kubernetes 更方便的工具。Minikube 會在筆記本的虛擬環境中運行一個單結點 Kubernetes 集羣,從而令用戶可以在該環境中試驗它或執行日常的開發工作。下面的步驟適用於 Minikube 集羣,本文檔當前使用的是最新版 0.23.0,我們必須配置 Kubectl 才能訪問 Minikube。

谷歌 Kubernetes 引擎

谷歌 Kubernetes 引擎是一個可用於部署容器化應用的託管環境。它融合了提高開發生產力、有效利用資源、自動化運維和開源靈活性方面的最新創新技術,能夠加快模型進入市場以及迭代的時間。

谷歌在容器中運行生產工作負載的經驗已超過 15 年,他們將在此期間學到的經驗知識融入到了 Kubernetes 中。因此,Kubernetes 是行業領先的開源容器協調系統,爲 Kubernetes Engine 提供技術支持。

如果讀者正在使用谷歌 Kubernetes 引擎,在創建清單前,我們應該先授予自己所要求的 RBAC 角色,因而才能創建或編輯其它 RBAC 角色。

  1. kubectl create clusterrolebinding default-admin --clusterrole=cluster-admin --user=user@gmail.com

快速開始

運行以下命令以快速設置堆棧的所有組件:

  1. kubectl apply -f components/-R

以上命令建立了 JupyterHub(使用 TensorFlow 訓練的 API)和一系列的用於服務的部署文件。這些服務作爲配置可以幫助用戶在 TensorFlow 中以最低能耗的和便攜的方式在不同的環境之間從訓練轉向服務。可以參考關於這些組件的使用說明。

使用

這部分描述了不同的組件和啓動的必要步驟。

建立一個Notebook

一旦創建了 JupyterHub 所需的所有清單,同時也就創建了一個負載平衡器服務。可以使用 kubectl 命令行查看創建信息。

  1. kubectl get svc

  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE

  3. kubernetes ClusterIP10.11.240.1<none>443/TCP 1h

  4. tf-hub-0ClusterIPNone<none>8000/TCP 1m

  5. tf-hub-lb LoadBalancer10.11.245.94xx.yy.zz.ww 80:32481/TCP 1m

如果你正在使用 minikube,可以運行以下命令獲取 notebook 的 URL。

  1. minikube service tf-hub-lb --url

  2. http://xx.yy.zz.ww:31942

對於一些雲部署,LoadBalancer 服務可能需要花費 5 分鐘的時間,這是一個外部 IP 問題。通過再次重複執行 kubectl get svc 命令最終會顯示填充的外部 IP 字段。

一旦有了一個外部 IP,就可以在瀏覽器中訪問它。該 hub 默認設置成接受任意的用戶名/密碼組合。輸入了用戶名和密碼之後,就可以啓動一個 single-notebook 服務器、配置計算資源(內存/CPU/GPU),然後繼續進行單節點訓練。

我們還提供標準的 docker 圖像,可用於在 Jupyter 上訓練 TensorFlow 模型。

  • gcr.io/kubeflow/tensorflow-notebook-cpu

  • gcr.io/kubeflow/tensorflow-notebook-gpu

在 spawn 窗口,開始新的 Jupyter 實例時,你可以提供上述圖像中的一個,這取決於你想在 CPU 還是 GPU 上運行。圖像包括所有必備插件(包含用於模型可視化的 Tensorboard)。注意:基於 GPU 的圖像大小可達數個 gigabytes,可能需要數分鐘才能下載到本地。

此外,在谷歌 Kubernetes 引擎上運行時,公網地址將會暴露,默認是不安全的端點。關於使用 SSL 和身份驗證進行生產部署,參見文檔:https://github.com/google/kubeflow/blob/master/components/jupyterhub。

訓練

TFJob 控制器(TFJob controller)使用 YAML 作爲主控參數服務器,使用 worker 幫助運行分佈式 TensorFlow。快速啓動部署 TFJob 控制器,安裝新型 tensorflow.org/v1alpha1 API。你可以向前面提到的 API 提交一份技術參數來進行新的 TensorFlow 訓練部署。

技術參數示例如下:

  1. apiVersion:"tensorflow.org/v1alpha1"

  2. kind:"TfJob"

  3. metadata:

  4. name:"example-job"

  5. spec:

  6. replicaSpecs:

  7. -replicas:1

  8. tfReplicaType:MASTER

  9. template:

  10. spec:

  11. containers:

  12. -image:gcr.io/tf-on-k8s-dogfood/tf_sample:dc944ff

  13. name:tensorflow

  14. restartPolicy:OnFailure

  15. -replicas:1

  16. tfReplicaType:WORKER

  17. template:

  18. spec:

  19. containers:

  20. -image:gcr.io/tf-on-k8s-dogfood/tf_sample:dc944ff

  21. name:tensorflow

  22. restartPolicy:OnFailure

  23. -replicas:2

  24. tfReplicaType:PS

可運行示例參見本項目 tf-controller-examples/ 目錄,詳細文檔參見 tensorflow/k8s 項目,可查看更多使用 TFJob 控制器在 Kubernetes 上運行 TensorFlow jobs 的信息。

服務模型

詳細指南參見 https://github.com/google/kubeflow/tree/master/components/k8s-model-server,使用內置 TensorFlow 服務部署設置模型服務。

原文鏈接:https://github.com//google/kubeflow

文章來源:機器之心