Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubeflow:容器機器學習實戰

Kyle Bai
August 26, 2018

 Kubeflow:容器機器學習實戰

Kyle Bai

August 26, 2018
Tweet

More Decks by Kyle Bai

Other Decks in Technology

Transcript

  1. About Us 白凱仁(Kyle Bai) • Interested in emerging technologies. •

    COSCUP, Kubernetes Day and OpenStack Day Speaker. • OpenStack and Kubernetes Projects Contributor(100+ Contributions). • Certified Kubernetes Administrator. @kairen([email protected]) https://kairen.github.io/
  2. About Us 林義洋(Frank Lin) • M.S student in PU. •

    Intern in Industrial Technology Research Institute(ITRI). • COSCUP 2018 Staff. • AI Research Center in CGU. @yylin1([email protected]) https://medium.com/@frank.yylin
  3. Agenda Today I would like to talk about • An

    overview of Kubernetes • Kubernetes Package Manager(以 ksonnet 為例) • An introduction to Kubeflow • Let's go to play Kubeflow • Q & A
  4. An overview of Kubernetes • Why Kubernetes? • Kubernetes 架構與概念

    • Kubernetes 抽象資源概念 • Kubernetes 有狀態服務部署與管理
  5. 老方式: Bare-metal Machines • 沒有隔離 • 沒有命名空間 • 共用常見的函式庫 •

    高耦合的應用程式與作業系統 kernel libs app app app app
  6. 老方式: Virtual Machines • 隔離性高 • 效能會損失 • 同樣有高耦合的應用程式與作業系統 •

    多虛擬機管理效率差 • 啟動時間慢 • 系統映像檔容量較肥 • 粒度粗 app libs kernel libs app app kernel app libs libs kernel kernel 作業系統層級
  7. 新方式: Containers(OS-Level Virtualization) libs app kernel libs app libs app

    libs app • 效能佳 • 透過 namespace 隔離網路、UID 等 • 與 OS Kernel 高耦合 • 啟動時間快 • 應用映像檔容量較小(小至 10 MB)︐攜帶性佳 • 粒度細︐利用密度提升 應用程式層級
  8. Docker Docker 利用 Linux 核心中的資源分離機制︐ 如 cgroups、namespace(Mount, UTS, IPC, PID

    等)︐對處理程式進行封裝隔離。屬於作 業系統層虛擬化(OS Level virtualization)。
  9. Open Container Initiative (OCI) OCI(The Open Container Initiative)是由多家頂尖 IT 公司共同組成的組織︐其目標是

    制定 Container 的標準規範︐以利 Container 發展。該標準讓開發者打包、簽署應用 程式︐並且可以自由選用不同的 Container runtime 環境外︐在近日則更一步延伸。 而目前基於 OCI 標準 runtime 的 runC 已經是許多容器引擎的基礎。
  10. Kubernetes Kubernetes 是 Google 開源的容器(Container)分散式管理系統︐是 Google Borg 〸幾 年以來大規模應用容器技術的經驗累積和昇華的一個重要成果︐是建於 OCI

    Runtime 之上的容器叢集排程系統︐簡稱為 k8s( )。 Stars 40,350+ Commits 68,981+ Contributors 1,771+ “Kubernetes is becoming the Linux of the cloud” Jim Zemlin, Linux Foundation
  11. https://github.com/ramitsurana/awesome-kubernetes#installers https://caylent.com/50-useful-kubernetes-tools Other Kubespray RKE Kops Kube-aws Typhoon Kubicorn Docker

    for K8s LinuxKit Matchbox KubeNow Bootkube kubeadm-dind-cluster Kubernetes 部署工具 Minikube PKS https://docs.google.com/spreadsheets/d/1LxSqBzjOxfGx3cmtZ4EbB_BGCxT_wlxW_xgHVVa23es/edit#gid=0
  12. Minikube Kubernetes 社區官方維護的開源工具︐非常適合入門開發者使用︐Minikube 會透過 建立單節點虛擬機來部署 Kubernetes︐以提供開發者方便測試。 • 簡單部署與刪除節點(採用 kubeadm 作為

    bootstrapper) • 支援多種 VM Driver︐如 Virtual Box、Hyper-V 與 KVM 等等 • 支援多種 Kubernetes Addons ︐如 Dashboard、NVIDIA GPU 等等 • 支援 Mounting Host 目錄 https://github.com/kubernetes/minikube
  13. Kubeadm Kubeadm 同樣是由 Kubernetes 社區維護的工具︐與 Minkube 不同的是其原始碼被 包含在 Kubernetes 核心專案中。Kubeadm

    主要是幫助建立最佳實踐的最小叢集。 • 適合部署多節點叢集︐也能支援 HA 與 Self-hosting 部署方式 • 支援以 Config 方式來描述部署的叢集 • 預設會支援 Kubernetes 新版本一些重點特性 • 許多部署工具背後也採用 kubeadm https://github.com/kubernetes/kubernetes/tree/master/cmd/kubeadm
  14. Kubernetes System layers Nucleus: API and Execution Application Layer: Deployment

    and Routing Governance Layer: Automation and Policy Enforcement Interface Layer: Client Libraries and Tools Ecosystem Container Runtime Network Plugin Volume Plugin Image Registry Cloud Provider Identity Provider Device Plugin
  15. Container Runtime Interface(CRI) CRI 是 Kubernetes 社區提出的規範︐由於隨著不同的容器引擎推成出新︐ Kubernetes 已不在只是管理 Docker

    的容器︐CRI 將 Kubernetes 與具體容器實現進 行解耦︐來增加 Kubernetes 的擴展。 https://github.com/kubernetes/kubernetes/tree/master/pkg/kubelet/server/streaming
  16. Container Network Interface(CNI) CNI 是 CNCF 容器網路規範︐更是 Kubernetes 網路插件基礎。其思想為在 Container

    Runtime 建立時︐並建立 network namespace︐之後呼叫 CNI 插件來設定 netns 網 路︐最後提供給容器使用。 https://github.com/containernetworking
  17. Container Storage Interface(CSI) CSI 在近期 v1.11 版本中︐已經進入 Alpha 階段。其目標是制定一個標準容器儲存介面 來提供給

    SP(儲存供應商)快速開發插件來在 Container Orchestration (CO) 系統上使 用。 https://github.com/kubernetes-csi
  18. Kubernetes Device Plugins Device Plugins 是 Kubernetes v1.8 加入的特性︐目標是以通用介面提供第三方設備廠 商開發插件化方式將裝置(如

    GPU)資源串接至 Kubernetes 上︐並且提供容器 Extended Resources。 目前關注度高的 Device plugins︓ • NVIDIA device plugin for Kubernetes • AMD device plugin for Kubernetes • Solarflare Device Plugin
  19. Kubernetes Architecture UI CLI API Users Master Nodes etcd scheduler

    controllers apiserver kubelet kube-proxy add-ons container runtime
  20. Kubernetes Architecture Kubernetes 屬於分散式架構系統︐主要由三種節點角色組成︓ • Masters:主要工作為提供 API 與管理工作節點︐可視為主節點。 • Nodes(Minions)

    : 執行容器實例的節點︐上面會執行許多容器。 • etcds︓主要為 Kubernetes 的叢集資訊儲存與服務發現功能。
  21. Kubernetes Masters • kube-apiserver: 提供 REST APIs︐包含授 權、認證與狀態儲存等。 • kube-controller-manager:所有叢集資源

    控制功能都是透過控制管理器來操作。 • kube-scheduler:負責整個分散式系統的 資源排程︐透過一系列演算法來分配容器 到最佳節點。
  22. Kubernetes Nodes • kubelet: 與 API 溝通︐並負責管理的映 像檔、容器與資料 Volume等操作。 •

    kube-proxy: 讓服務可以曝露給外部存 取的代理元件︐支援 iptables 與 ipvs。 • Container runtime: 基於 OCI Container Runtime 來執行應用程式容器實例。
  23. Kubernetes API driven Kubernetes API 是以 JSON 作為其主要序列化模型的 HTTP API︐且能夠支援協定快取

    區︐並用於叢集內部溝通使用。 • 通過 API 完成節點之間溝通進⾏行行 CRUD 操作,或是授權、認證與註冊等。 • Kubernetes 有明確定義與規範 API。⽀支援 OpenAPI。 • 使⽤用 gRPC 進⾏行行 Remote Procedure Call。 • 可擴展的 API。 • CRD(Custom Resource Definitions) • API server aggregation • Custom resources, controllers and apiservers
  24. Kubernetes API 首先透過 kubectl 執行一下指令︓ $ kubectl create clusterrolebinding anonymous-become-admin

    \ --clusterrole=cluster-admin --user=system:anonymous 接著透過瀏覽器開啟 https://master_ip:8443 來查看 APIs。 /apis/apps/v1/namespaces/default/deployments/nginx Group Verb Resource https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/ batch police storage create update delete pod service nodes
  25. Kubernetes API • API Group: 是邏輯上相關的種類集合︐如 Job 與 CronJob 都屬於批次處理功能相

    關。 • Version: 每個 API Group 存在多個版本︐這些版本區分不同穩定度層級︐一般功能 會從 v1alpha1 升級到 v1beta1︐然後在 v1 成為穩定版本。 • Resource: 資源是透過 HTTP 發送與檢索的系統實體︐其以 JSON 來表示。可以是 單一或者多個資源。
  26. API Levels 在 Kubernetes 中︐不同版本的 API 意味著不同層級穩定度與支援度︓ • Alpha level:在預設下是大多情況禁止使用狀態︐這些功能有可能隨時在下一版本被

    遺棄︐因此只適用於測試用︐Example: v1alpha1。 • Beta level:在這級別一般預設會啟用︐這表示該功能已經通過很好的測試項目︐但 是物件內容可能會在後續版本或穩定版本發生變化。Example: v1beta2。 • Stable level:在這級別表示該功能已經穩定︐會很長的時間一直存在。Example: v1。
  27. API - Resource ObjectMeta 該物件描述了資源的詮釋資料︐裡面也會包 含 End User 與系統的更新資訊。 •

    名稱(metadata.name) • 類型(kind) • API 版本(apiVersion) • 標籤(metadata.labels) • 註釋(metadata.annotations)
  28. Validation and Admission Admission:透過驗證叢集的全域約束來檢查是否建立或更新 API 物件︐在 Kubernetes 中有很多這樣功能。幾個約束範例︓ • NamespaceLifecycle:

    如果命名空間不存在︐則拒絕該所有請求。 • ResourceQuota:為叢集的當前使用者強制執行額度限制。 Validation:檢查傳入的物件(建立與更新過程)的格式是否符合。例如︓ • 檢查所有的字串是否是有效的格式。 • 檢查是否有設定矛盾欄位。
  29. Governance Layer: Automation and Policy Enforcement (APIs optional and pluggable)

    Application Layer: Deployment and Routing (APIs required and pluggable) Nucleus: API and Execution (APIs required and not pluggable) CronJob batch/ v2alpha1 Job batch/v1 Deployment apps/v1 DaemonSet apps/v1 Pod core/v1 ReplicaSet apps/v1 StatefulSet apps/v1 ReplicationController core/v1 Endpoints core/v1 Ingress extensions/v1beta1 Service core/v1 ConfigMap core/v1 Secret core/v1 PersistentVolumeClaim core/v1 StorageClass storage/v1 ControllerRevision apps/v1 Event core/v1 LimitRange core/v1 ValidatingWebHookConfiguration admissionregistration/v1alpha1 HorizontalPodAutoscaler autoscaling/v1 APIService apiregistration/v1beta1 PodDisruptionBudget policy/v1beta1 PodPreset settings/v1alpha1 PodSecurityPolicy extensions/v1beta1 CertificateSigningRequest certificates/v1beta1 ClusterRole rbac/v1beta1 ClusterRoleBinding rbac/v1beta1 LocalSubjectAccessReview authorization/v1 Namespace core/v1 Node core/v1 PersistentVolume core/v1 ResourceQuota core/v1 Role rbac/v1beta1 RoleBinding rbac/v1beta1 SelfSubjectAccessReview authorization/v1 ServiceAccount core/v1 SubjectAccessReview authorization/v1 NetworkPolicy networking/v1 ComponentStatus core/v1 PriorityClass scheduling/v1alpha1 ClusterServiceBroker servicecatalog/v1beta1 ClusterServiceClass servicecatalog/v1beta1 ClusterServicePlan servicecatalog/v1beta1 ServiceInstance servicecatalog/v1beta1 ServiceBinding servicecatalog/v1beta1 MutatingWebHookConfiguration admissionregistration/v1alpha1 SelfSubjectRulesReview authorization/v1 TokenReview authentication/v1 CustomResourceDefinition apiextensions/v1beta1
  30. Controller - Control loops • 觀察實際狀態 • 找出抽象資源更新差異 • 驅使當前狀態

    → 期望狀態 • 調解系統抽象資源狀態 • 支援各種資源的 Controller︐如 Deployments、 ReplicaSets 等等 observe diff act
  31. Scheduler 負責將 Pod 排程到特定節點上︐其工作如下︓ • 你建立一個 Pod • Scheduler 收到你建立的新

    Pod 沒有被分配節點的通知 • Scheduler 將節點資訊塞到 Pod 中 • Kubelet 收到 Pod 更新︐發現裡面(Pod.Spec.NodeName)有自己名稱︐因此透過 Runtime 啟 動容器
  32. 進一步探討 Scheduler 流程 ❶ ❶ Watch for pods that: •

    Are in PENDING phase • Have no Pod.Spec.NodeName assigned • Are explicitly requesting our scheduler (default otherwise)
  33. 進一步探討 Scheduler 流程 ❷ ❷ Node selection algorithm(Filter and Rank):

    • PodFitsHostPorts • … • LeastRequestedPriority • …
  34. Scheduler 選取節點流程 Host 1 Host 2 Host 3 Host 4

    Host 5 Host 6 Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Predicate MatchNodeSelector PodSelectorMatches NoDiskConflict …
  35. Scheduler 選取節點流程 Host 1 Host 2 Host 3 Host 4

    Host 5 Host 6 Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Predicate Host 2 Host 3 Host 4 Host 5 Priority Node Affinity Priority Selector Spread Priority Image Locality Priority …
  36. Scheduler 選取節點流程 Host 1 Host 2 Host 3 Host 4

    Host 5 Host 6 Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Predicate Host 2 Host 3 Host 4 Host 5 Priority Host 3 Select
  37. Kubernetes Application • 所有使用者將透過抽象資源組合來執行應用程式 • 啟用主要工作負載類別︓ • Stateless: Deployment +

    ReplicaSet • Stateful: StatefulSet • Cluster: DaemonSet • Batch: CronJob + Job • Service/microservices︓ • Service + kube-proxy • Ingress + Ingress controller • DNS
  38. Pods • Kubernetes 最小執行單位 • Container 與 Volume 的小群組 •

    群組內緊密耦合︐如 Container 放置、原子複製 • 每個 Pod 只有一個 IP(當然不是硬性) • 共享 localhost、volumes 與 network 等 • 支援 Init container “Pod is a single instance of an application in Kubernetes”
  39. Volumes • 儲存會在 Pod 啟動時自動附加(如果有定義的話) • 依據需求建立本地臨時目錄 • 支援使用 Host

    檔案、目錄與裝置 • 支援多種儲存系統 • NFS、GlusterFS • iSCSI、Cinder、RBD • Git repo • Secret、Configmap(Kubernetes object)
  40. Namespace • 一組 Kubernetes 資源與物件的抽象集合 • 不同 Namespace 之間 Kubernetes

    資源 與物件是隔離的 • 將資源物件與 Host 解藕 • 不同 Namespace 能做簡單的使用者隔 離(不同使用者用不同 Namespace) • 能與 Adminssion、Authorization、 Authentication 相結合
  41. Secrets • 與 ConfigMap 功能 87% 一樣 • 以 Base64

    做 encode (有跟沒有一樣) • 適合用於敏感資料與檔案 Node Pod Secret API
  42. Labels • 使用者提供的 Key/Value 屬性 • 可以附加到任何 API object 上

    • 通常用在一組應用的 API Object 識別與分組 • 可以由 Selector 來查詢︐當作 SQL 的 `select ... where ..`
  43. Selector • 用來查詢 Lables︐當作 SQL 的`select ... where ..` •

    許多 API Object 透過 Selector 來選取關聯的 Object(如 Service select Pod) • Equality-based selectors (=, ==, !=) • Set-based selectors (in, notin, exists) track = stable app: my-app track: stable tier: FE app: my-app track: canary tier: FE
  44. app: my-app track: stable tier: FE app: my-app track: canary

    tier: FE app: my-app track: stable tier: BE app: my-app track: canary tier: BE
  45. app = my-app app: my-app track: stable tier: FE app:

    my-app track: canary tier: FE app: my-app track: stable tier: BE app: my-app track: canary tier: BE
  46. app = my-app, tier = FE app: my-app track: stable

    tier: FE app: my-app track: canary tier: FE app: my-app track: stable tier: BE app: my-app track: canary tier: BE
  47. app = my-app, track = stable app: my-app track: stable

    tier: FE app: my-app track: canary tier: FE app: my-app track: stable tier: BE app: my-app track: canary tier: BE
  48. Services • Kubernetes 存取 Pod 的抽象資源(以 Selector 選定 Pod) •

    支援 DNS 查詢來導向對應 Pod IP( Pod 掛掉會改變) • DNS SRV records for ports • 提供不同 Access Policy: • ClusterIP • NodePort • LoadBalancer • Headless Virtual IP Client
  49. Replication Controllers • 確保 Pod 在叢集上有 N 份副本 • 當缺少就新建︐當多一個就刪除

    • 透過 Selector 來選取管理 Pod • select pod num == replicas value • 能夠動態縮放 • 僅支援 equality-based selector ReplicationController - selector = {"app": "my-app"} - template = { ... } - replicas = 4 API Server How many? 3 Start 1 more OK How many? 4 “Controller manages replicated pods for an application pattern”
  50. Replica Sets • 與 Replication Controllers 87% 功能一樣 • 是新一代

    Replication Controllers • 支援 Set-based selector • 為 Deployment 的基底 Repica Sets - selector: { "matchLabels": {"key": value}, "matchExpressions": [{k, o, v}] } - replicas = 4 API Server How many? 3 Start 1 more OK How many? 4
  51. Deployments • Rollouts as a service • 支援 Rolling update

    與 Recreate 方式更新 Pod Template • 聲明式更新 • 管理 RS 與 Pod Deployment - strategy: {type: RollingUpdate} - replicas: 3 - selector: - app: my-app ...
  52. Rolling Updates Deployment - replicas: 3 - selector: - app:

    my-app - version: v1 Service - app: my-app Live-update an application $ kubectl set image deployment \ my-app my-app= :v2 —record
  53. Deployment - replicas: 3 - selector: - app: my-app -

    version: v1 Deployment - replicas: 0 - selector: - app: my-app - version: v2 Service - app: my-app
  54. Deployment - replicas: 3 - selector: - app: my-app -

    version: v1 Deployment - replicas: 1 - selector: - app: my-app - version: v2 Service - app: my-app
  55. Deployment - replicas: 2 - selector: - app: my-app -

    version: v1 Deployment - replicas: 1 - selector: - app: my-app - version: v2 Service - app: my-app
  56. Deployment - replicas: 2 - selector: - app: my-app -

    version: v1 Deployment - replicas: 2 - selector: - app: my-app - version: v2 Service - app: my-app
  57. Deployment - replicas: 1 - selector: - app: my-app -

    version: v1 Deployment - replicas: 2 - selector: - app: my-app - version: v2 Service - app: my-app
  58. Deployment - replicas: 1 - selector: - app: my-app -

    version: v1 Deployment - replicas: 3 - selector: - app: my-app - version: v2 Service - app: my-app
  59. Deployment - replicas: 0 - selector: - app: my-app -

    version: v1 Deployment - replicas: 3 - selector: - app: my-app - version: v2 Service - app: my-app
  60. Rollback Kubernetes 支援查看正在 Rolling Update 的 Deployment︓ $ kubectl rollout

    history deploy my-app # 查看狀態 $ kubectl rollout status deployment my-app # 暫停與繼續滾動升級 $kubectl rollout pause/resume deployment my-app # 回滾到上一個版本 $ kubectl rollout undo deployment my-app $ kubectl rollout undo deployment my-app --to-revision=1
  61. DaemonSets • 每個節點啟動一個 Pod 作為 Daemon • 不支援副本概念 • Pod

    生命週期綁定於節點 • 適合用於 logging 或 agents • 支援滾動升級
  62. Jobs • 管理 Pod 需要被完成幾次 • 可支援一次執行一個或多個 Pod • 當

    Pod 發生錯誤時︐會重新開啟一個新的 直到完成 Job - parallelism: 3 - completions: 6 - selector: - job: my-work
  63. Ingress • 以 Virtual Host 概念來 Proxy 到 K8s 內部服務

    • 支援 SSL termination、Name-based 等等 • 支援 TCP、UDP proxy • 能以 URL Paths 來 Proxy 不同內部服務 • 目前有許多實現專案 • ingress-nginx • Traefik • F5 BIG-IP Controller • Kong
  64. StatefulSets • 依序啟動與刪除管理的 Pod (LIFO) • 自動為 Pod 帶入編號 •

    當使用 Volume template 時︐會自動建立 對應編號 • 為 Pod 提供身份辨識︐如 hostname、 DNS 名稱 • 支援滾動升級 volume-db-0 volume-db-1 volume-db-2 db-0 db-1 db-2
  65. 常見的 Kubernetes 應用程式部署 • 利用 CLI 或是 Dashboard 部署指定應用程式的容器至 Kubernetes。

    • 撰寫一些 Deployment, Services, Configmaps 等物件資源的 YAML︐然後將這些部 署至 Kubernetes。 • 透過 Kubernetes Package Manager 進行部署︐如 Helm、Ksonnet。 • 利用 Kubernetes SDK 以程式碼方式部署。
  66. 一個部署 Kubernetes 應用程式的流程 1.假設有 Config 需要設定︐我們需要先建立 ConfigMap 2.然後建立 RC 來管理

    Pod︐並在 Pod 描述 ConfigMap 使用方式 3.建立 Service 來提供 Backend Pod 能夠對外提供存取 4.建立 Frontend Pod 來連接 Backend Pod
  67. 有狀態服務(Stateful Service) Database: MySQL, MongoDB Data process: Spark, Hadoop DL/ML:

    TensorFlow, Caffe2 Monitor: Prometheus Storage: Gluster, Ceph Logging: Elasticsearch …等
  68. CustomResourceDefinitions(CRD) CustomResourceDefinition(CRD) 是 v1.7+ 版本新加入的 Kubernetes API 擴展機制︐ 目標是無需修改核心程式碼就能對 Kubernetes

    進行擴展。 • 使用自定義物件進行擴展 Kubernetes API • CRDs 能夠沿用熟悉的 UX 工具︐ex: kubectl • 能夠與 Custom Controllers 進行結合 • 支援 SubResources(v1.10+)
  69. Operator 主要作用為︖ • 是一個 Domain Specific 控制器 • 一套具特定應用程式知識的軟體 •

    透過自定義的 Controller/Resource(CRD) 來擴展 Kubernetes 功能 • 簡化有狀態應用程式的創建、組態與管理過程 • 透過程式自動化維護應用程式
  70. 常見的 Kubernetes 應用程式部署 • 利用 CLI 或是 Dashboard 部署指定應用程式的容器至 Kubernetes。

    • 撰寫一些 Deployment, Services, Configmaps 等物件資源的 YAML︐然後將這些部 署至 Kubernetes。 • 透過 Kubernetes Package Manager 進行部署︐如 Helm、Ksonnet。 • 利用 Kubernetes SDK 以程式碼方式部署。
  71. Ksonnet Ksonnet 是一個命令工具︐可以更輕鬆地管理由多個組件組成的複雜部署︐簡化編寫 和部署 Kubernetes 配置。 • 對於每個環境︐我們可以輕鬆部署相同的組件︐但參數略有不同︐以便針對特定環境對其進行自定義 • 透過在

    jsonnet 內定義 Kubernetes manifests︐並將內容部署到 Kubernetes 叢集中 • Kubeflow 使用 Ksonnet 部署所需的組件。 “A CLI-supported framework for extensible Kubernetes configurations”
  72. Ksonnet - Environment Environment 由四個元素組成︐其中有些會從 當前 kubeconfig 中取得︓ • Name:

    ksonnet app 是唯一識別名稱 • Server: Kubernetes API address 與 port • Namespace: kubeconfig 的 namespace • Kubernetes API version
  73. Ksonnet - Component Components 可以是單一 Kubernetes 資源(e.g. Deployment)︐或者複雜的應用堆疊。Ksonnet 以下 面兩種產生方式︓

    • 透過 ks generate 指令自動產生︐這種情況下 manifest 以 Jsonnet 語言來定義。 • 手動將檔案放到 components/︐這時可以用 JSON 或 Jsonnet︐但檔案名稱要以 *.jsonnet 副檔名儲存。
  74. Ksonnet - Prototype & Parameter • Prototypes 是 Components 的基礎範例︐被用來透過

    ks generate 產生 Components。 • Parameters 允許你透過參數客製 Prototypes︐不管是建立時或建立之後都可以透過 ks param 指令檢視與修改。
  75. Ksonnet - Module Modules 提供一個跨環境的共享 components 方法︐其引用了 components/ 中包含 自己的

    params.libsonnet 子目錄。一個 Modules 可以達到以下︓ • 可以類似於 components 在多個環境使用 • 具有嵌套結構︐以更具選擇性的方式對 components 分組 • 與給定的 environment 附加 modules 結合使用。
  76. Ksonnet - Package and Registry • 當撰寫完一個應用後︐可以透過 ks pkg 指令分發或者重用程式碼︐Ksonnet

    CLI 會 將程式碼放到 vendor/ 目錄保存。 • Registries 用來存放打包好的 Packages。 • 預設使用 https://github.com/ksonnet/parts/tree/master/incubator 來取得 Packages • 也可以透過 Github、Filesystem 與 Helm repo URI 取得
  77. Try it $ ks init ks-example $ cd ks-example $

    ks generate deployed-service guestbook-ui \ --image gcr.io/heptio-images/ks-guestbook-demo:0.1 \ --type ClusterIP $ ks apply default $ kubectl get svc guestbook-ui
  78. Try it $ ks prototype list $ ks pkg list

    $ ks env list $ ks env add cloud --context= cloud
  79. AI Systems 重要的挑戰 • 系統基礎設施 • Host OS CPU &

    GPU • Container + GPU • 執行訓練環境 • 單台主機執行&多GPU • 有彈性分散式集群 Ref: https://github.com/Langhalsdino/Kubernetes-GPU-Guide
  80. 管理容器分散式集群 Why choose kubernetes ? ⽣產環境中︐我們將可能有多台機器需要被編配設置︐且環境可能是複雜的︐需要網路、運算與儲存 • 適合⼤規模管理與擴展︐自動化部屬 • 透過

    Kubernetes DNS 機制來解析伺服器位址 • 透過 Replication Controller 來管理故障重啟問題 • Kubernetes 提供 Monitoring 與 Logging 等功能 • 能夠⽀援使⽤ CPU 與 GPU 排程來指定節點
  81. 舉例 ︓ Tensoflow GPU 分散式訓練 EX : TensorFlow 分佈式訓練︐繁雜的節點配置將成為 ML

    Developer 新的負擔 tf.train.ClusterSpec({ "worker": [ "worker0.example.com:2222", "worker1.example.com:2222", "worker2.example.com:2222" ], "ps": [ "ps0.example.com:2222", "ps1.example.com:2222" ]}) https://www.tensorflow.org/deploy/distributed
  82. An introduction to Kubeflow • What is Kubeflow? • What

    in the Toolkit? • Kubeflow 想達到到什麼目標︖ • Kubeflow Jupyter Hub • TF Operator 管理TFJOB
  83. What is Kubeflow? Kubeflow 目標是簡化在 Kubernetes 上運行 Machine learning (ML)

    的過程︐使之通 過更簡單、可攜帶與可擴展的創建。 • 目標不是在於重建其他服務︐而是提供一個最佳開發系統︐來部署到任何集群中︐有效確保ML在集群 之間移動性︐並輕鬆將任務擴展任何集群。 • 由於使用 Kubernetes 來做為基礎︐因此只要有 Kubernetes 的地方︐都能夠運行部署 Kubeflow。 Ref: https://www.kubeflow.org/
  84. The Community (kubeflow/community) • 66 individual members • 12 Organizations

    • Alibaba Cloud, Caicloud, Canonical, Cisco, Datawire, Dell, Github, Google, Heptio, Huawei, Intel, Microsoft, Momenta, Pachyderm, Project Jupyter, Red Hat, Seldon, Weaveworks • ~ 1000 GitHub events per week (8249 total) • ~ 44 contributors per week (109 total) • ~ 40 commits per week (408 total) • ~ 65 commenters per week (163 total) • ~ 35 PR creators per week (77 total) • ~ 85 PRs created per week (601 total) Ref: https://www.kubeflow.org/
  85. What in the Toolkit? • Jupyter Hub: 用於建立與管理互動式的 「Jupyter Notebook」

    • TF Job Operator and Controller: 
 用來擴展管理訓練任務︐可設定使用 CPU 或 GPU︐並簡化分散式部署配置 • Tensorflow Serving: 
 部署經過訓練過後的的TensorFlow模型︐提供使用者使用與進行預測 Ref: https://www.kubeflow.org/ +
  86. Kubeflow 想達到什麼目標︖ 在不同基礎設施上使 Machine learning (ML) 更加簡單與快速 (Laptop ML rig

    Training cluster Production cluster) Ref: @Seldon
 Hassle Free, Scalable, Machine Learning with Kubeflow
  87. Simple Potable Scalable 更簡單 可攜帶 可擴展 Data Scientist / ML

    Engineer 能夠專注於模型創建
 部署學習成本較低 保持 Kubernetes Cluster 位於不同平台上可移植性 Kubernetes 上啟⽤用
 ⼯工作負載平衡
  88. Inference ML Environment Ref: How to Get Started with Kubeflow

    https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow
  89. Kubernetes managing resources 透過 Kubernetes 和 containers 來管理操作系統和硬體資源 Ref: How

    to Get Started with Kubeflow https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow
  90. Use Kubeflow Ref: How to Get Started with Kubeflow https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow

    Kubeflow 透過kubeflow在Kubernetes上︐簡化移植和擴展機器學習(ML)工作流程的部署
  91. What Serving ? • TensorFlow Serving 是靈活、⾼高效能的機器學習模型服務系統,是專⾨門為⽣生產環境⽽而設 計,能簡單部署新的演算法與實驗來來提供同樣的架構與 API 進⾏行行服務

    • 根據學習模型,進⾏行行反向輸入輸出 • gRPC over HTTP/2 • REST API over HTTP/1.1 需要 Ref: https://www.kubeflow.org/ Serving Response (output) Request (input) gRPC
  92. What is ? • 開源框架 Seldon Core 使您可以更輕鬆︐更快速地在Kubernetes上大規模部署機器學習模 型和實驗 •

    允許數據科學家使用任何機器學習框架或編程語言創建模型
 • Python based models including • Tensorflow models • Sklearn models • Spark models • H2O models • R models ⽬目前seldon-coe 正與kubeflow 共同整合ML Workflow
  93. TF Operator 管理TFJOB TF Operator 自定義資源(CRD)進行擴展 Kubernetes API 管理︐並透過自定義類別 「

    TFJob 」來管理各項任務。 查看kubeflow tfjos狀狀態 tfjobs.kubeflow.org
  94. Jupyter Notebook • 介於 IDE 以及 Editor 之間的寫 code 工具

    • 逐行執行 • 易呈現資料視覺化
  95. Kubeflow 0.2 • What is Kubeflow? • What in the

    Toolkit? • Kubeflow 想達到到什麼目標︖ • Kubeflow Jupyter Hub • TF Operator 管理TFJOB
  96. Kubeflow 0.2 [New] • Katlib (Hyper Parameter 可擴展且靈活參數調整框架) • Horovod

    & OpenMPI (改善了TensorFlow的分佈式訓練性能by Uber) • PyTorch operator 用來運行PyTorchJob CRD • Caffe2 operator • Pachyderm 管理複雜數據管道 • MPI operator 用於MPI作業 • TFJob Dashboard (Batch interface) • 新增更快速的 deploy.sh 部署腳本
 [Improvement] • TfJob - v1alpha2 • JupyterHub 提供更多的錯誤回報 • 改進服務監控 (Istio)
  97. Kubeflow 0.2 Deploy • Kubeflow 0.2 提供︐新的部署腳本︐更簡易使用 • 對於ML工程師與數據科學家︐目標以最大限度地減少他們開始使用平 台部署所需的工作量


    
 
 export KUBEFLOW_VERSION=0.2.2 curl https://raw.githubusercontent.com/kubeflow/kubeflow/v${KUBEFLOW_VERSION}/scripts/deploy.sh | bash
  98. Kubeflow 0.3 • 不用撰寫任何程式碼來提交 Hyperparameter tuning jobs(Katib) • 優化 Job

    operators 以支援框架之間的一致 API • 優化入門體驗︐透過點擊方式部署 Kubeflow 來降低學習難度。 • chainer-operator 初版釋出 • mxnet-operator 初步實現 • KubeBench Usable workflow 與 Example workloads 初版釋出
  99. Kubeflow 0.3 • 透過 Knative 實現 in cluster image 建構

    • 優化 TF Serving 元件的可讀性與擴展性 • 優化各 Operators 的功能 • Kunming 新增一個 Prometheus component https://docs.google.com/document/d/1Wdxt1xedAj7qF_Rjmxy1R0NRdfv7UWs-r2PItewxHpE/edit#
  100. Jupyter Codes from __future__ import print_function import tensorflow as tf

    with tf.Session(): input1 = tf.constant([1.0, 1.0, 1.0, 1.0]) input2 = tf.constant([2.0, 2.0, 2.0, 2.0]) output = tf.add(input1, input2) result = output.eval() print("result: ", result)