SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Kubeflow
Machine Learning
Toolkit for
Kubernetes
SDN & Cloud Meetup #4
About Me
● Yi-Yang Lin (林義洋)
○ frank.yylin@gmail.com
○ M.S. student in PU
● Experience
○ COSCUP 2018 Staff
○ Intern in Industrial Technology Research Institute (ITRI)
Agenda
● What is Kubeflow?
● Kubeflow uses ksonnet
● Kubernetes NVIDIA Device Plugins
● Deploy Kubeflow
● Demo
What is Kubeflow?
Kubeflow
Kubeflow 是 Google 開源的機器學習工具包,目標是簡化在 Kubernetes 上運行
Machine learning (ML) 的過程,使之通過更簡單、可攜帶與擴展的創建。
● 目標不是在於重建其他服務,而是提供一個最佳開發系統,來部署到任何集
群中,有效確保ML在集群之間移動性,並輕鬆將任務擴展任何集群。
● 由於使用 Kubernetes 來做為基礎,因此只要有 Kubernetes 的地方,都能
夠運行部署 Kubeflow。
Kubeflow 目標
在不同基礎設施上使機器學習更加簡單與快速
(Laptop <-> ML rig <-> Training cluster <-> Production cluster)
圖片來源:@Seldon
Hassle Free, Scalable, Machine Learning with Kubeflow
What in the Toolkit ?
● Jupyter Hub: 用於建立與管理互動式的 Jupyter notebook
● TF Job Operator Controller: 用來擴展管理訓練任務,可設定使用 CPU 或
GPU,簡化分散式部署配置。
● Tensorflow Serving: 將經過訓練的TensorFlow模型導出到Kubernetes
Kubernetes + ML = Kubeflow
Kubeflow uses ksonnet
Kubeflow uses ksonnet
CLI 支持的框架,可簡化您編寫和部署Kubernetes配置的方式。設計成
與kubectl並行工作。
● Reuse: 可快速配置常用清單
● Customize: 根據需求定制部屬清單
● Deploy: 部屬於多個環境
● Diff: 不同環境中,可比較運行的應用程序版本差異
● Track: 可隨時追蹤版本控制你的配置
Ksonnet Architecture
https://blog.hasura.io/draft-vs-gitkube-vs-helm-vs-ksonnet-vs-metaparticle-vs-skaffold-f5aa9561f948
Kubernetes NVIDIA Device Plugins
Device Plugins
Device Plugins 是 Kubernetes v1.8 版本開始加入的 Alpha 功能,目標是結合
Extended Resource 來支援 GPU、FPGA、高效能 NIC、InfiniBand 等硬體設備介接的
插件,這樣好處在於硬體供應商不需要修改 Kubernetes 核心程式,只需要依據 Device
Plugins 介面來實作特定硬體設備插件,就能夠提供給 Kubernetes Pod 使用。
● 輕易查看叢集中GPU的數量
● 方便追蹤GPU的健康狀態
● 輕易啟動kubernetes 叢集中GPU pod
Bild: Nvidia
Device Plugin Architecture
安裝 NVIDIA Device Plugin
Set 1 在每台 GPU worker 節點,將 Docker default runtime 改成runtime
● 修改/etc/docker/daemon.json檔案
安裝 NVIDIA Device Plugin
Set 2
接著由於 v1.9 版本的 Device Plugins 還是處於 Alpha 中,因此需要手動修改每台 GPU worker 節
點的 kubelet drop-in 「/etc/systemd/system/kubelet.service.d/10-kubeadm.conf」檔案,這
邊在KUBELET_CERTIFICATE_ARGS加入一行 args 環境參數:
● 重新啟動kubelet以接收配置更改
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
v1.10 版本預設已經加入
安裝 NVIDIA Device Plugin
#Master 節點安裝 NVIDIA Device Plugins
$ kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.9/nvidia-device-plugin.yml
daemonset "nvidia-device-plugin-daemonset" created
Deploy Kubeflow
Deploy Kubeflow
事前準備
● 所有節點正確安裝指定版本的
NVIDIA driver、CUDA、Docker、NVIDIA Docker v2
● 建立 NFS server 並在 Kubernetes 節點安裝 NFS common,然後利用
Kubernetes 建立 PV 提供給 Kubeflow 使用
Kubeflow 部屬條件
● Kubernetes >= 1.8 see here
● ksonnet version 0.9.2 or later
Using Kubeflow
#初始化ksonnet 應用程式目錄
$ ks init my-kubeflow
#ksonnet 應用程式目錄
$ cd my-kubeflow
$ ks registry add kubeflow github.com/kubeflow/kubeflow/tree/master/kubeflow
$ ks pkg install kubeflow/core
$ ks pkg install kubeflow/tf-serving
$ ks pkg install kubeflow/tf-job
Using Kubeflow
#建立 Kubeflow 核心元件,包含 JupyterHub 與 TensorFlow job controller
$ kubectl create namespace kubeflow
$ kubectl create clusterrolebinding tf-admin --clusterrole=cluster-admin --
serviceaccount=default:tf-job-operator$ ks generate core kubeflow-core --name=kubeflow-
core --namespace=kubeflow
# 啟動收集匿名使用者使用量資訊,如果不想開啟則忽略
$ ks param set kubeflow-core reportUsage true
$ ks param set kubeflow-core usageId $(uuidgen)
# 部署 Kubeflow
$ ks param set kubeflow-core jupyterHubServiceType LoadBalancer
$ ks apply default -c kubeflow-core
Using Kubeflow
#檢查 Kubeflow 元件部署結果
Using Kubeflow
即可登入 Jupyter Notebook,但這邊需要修改 Kubernetes Service
# 修改 svc 將 Type 修改成 LoadBalancer,並且新增 externalIPs 指定為 Master IP。
$ kubectl -n kubeflow edit svc tf-hub-lb
...
spec:
type: LoadBalancer
externalIPs:
- Master IP
...
Testing Kubeflow
● 建立一個 NFS 來提供一個PV給 Kubeflow Jupyter
使用
● 由於Jupyter 會建立一個PVC,我們手動建立 PV
● 完成後連接 http:// Master_IP
# 填寫自己Master IP
Jupyter Hub
● 輸入任意帳號密碼進行登入
● Start My Server按鈕來建立 Server
Jupyter Hub
● 根據環境條件生成一個Jupyter node
● 預設會有多種映像檔可以使用
● Tensorflow 版本與CUDA差異,可以自行
修改配置Image
CPU:gcr.io/kubeflow-images-staging/tensorflow-notebook-cpu
GPU:gcr.io/kubeflow-images-staging/tensorflow-notebook-gpu
Kubeflow GPU Node
#確認GPU集群節點,是否可被分配資源
$ kubectl get nodes "-o=custom-
columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia.com/gpu"
Jupyter Node
# 等Kubernetes 分配的節點,下載映像檔後,就會正常啟動
可能發生啟動失敗狀況
500 : Internal Server Error
400 : Bad Request
Kubeflow Delete
# 從 Kubernetes 叢集刪除 Kubeflow 相關元件的話
$ ks delete default -c kubeflow-core
TF-operator
Tensorflow Distributed Training
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"
]})
TensorFlow 分佈式任務,繁雜的配置將成為機器學習工程師們新的負擔
TF Operator 來管理 TFJob
● TFJob 為Kubernetes自定義資源(CRD) ,可以輕鬆在Kubernetes上運行
分佈式或非分佈式TensorFlow作業。
TF Operator with Tensorflow
● 使用者可以像創建K8s資源一樣創建和管理TF任務
TF Operator 來管理 TFJob
● TFJob 為Kubernetes自定義資源(CRD) ,可以輕鬆在Kubernetes上運行
分佈式或非分佈式TensorFlow作業。
Kubeflow & Operator 補充
● Kubeflow 目前以TensorFlow 作為第一個ML框架
但後續支持其他ML(如PyTorch、MXnet、Caffe2)
Kubeflow Machine Learning Toolkit for Kubernetes (SDN x Cloud Native Meetup #4)
Demo
https://www.katacoda.com/kubeflow/scenarios/deploying-kubeflow-with-ksonnet
@Frank Lin
frank.yylin@gmail.com
Thanks!

Más contenido relacionado

La actualidad más candente

Extend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API ServerExtend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API Serverinwin stack
 
Google IoT Core 初體驗
Google IoT Core 初體驗Google IoT Core 初體驗
Google IoT Core 初體驗Simon Su
 
容器式軟體開發介紹
容器式軟體開發介紹容器式軟體開發介紹
容器式軟體開發介紹Philip Zheng
 
Docker Compose
Docker ComposeDocker Compose
Docker ComposeMiles Chou
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器升煌 黃
 
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)Jian-Kai Wang
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)Will Huang
 
Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2dotCloud
 
Docker home ted
Docker home tedDocker home ted
Docker home tedLayne Peng
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養Philip Zheng
 
3 introduction to kubernetes
3 introduction to kubernetes3 introduction to kubernetes
3 introduction to kubernetesJiang Shang
 
Docker初识
Docker初识Docker初识
Docker初识hubugui
 
Hyper: 让Pod以VM为边界
Hyper: 让Pod以VM为边界Hyper: 让Pod以VM为边界
Hyper: 让Pod以VM为边界Xu Wang
 
JCConf2016 - Dataflow Workshop Setup
JCConf2016 - Dataflow Workshop SetupJCConf2016 - Dataflow Workshop Setup
JCConf2016 - Dataflow Workshop SetupSimon Su
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹Philip Zheng
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Will Huang
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Miles Chou
 

La actualidad más candente (20)

Extend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API ServerExtend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API Server
 
Google IoT Core 初體驗
Google IoT Core 初體驗Google IoT Core 初體驗
Google IoT Core 初體驗
 
容器式軟體開發介紹
容器式軟體開發介紹容器式軟體開發介紹
容器式軟體開發介紹
 
Docker Compose
Docker ComposeDocker Compose
Docker Compose
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器
 
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
 
Docker Build
Docker BuildDocker Build
Docker Build
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
 
Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2
 
Docker home ted
Docker home tedDocker home ted
Docker home ted
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養
 
3 introduction to kubernetes
3 introduction to kubernetes3 introduction to kubernetes
3 introduction to kubernetes
 
Docker初识
Docker初识Docker初识
Docker初识
 
Hyper: 让Pod以VM为边界
Hyper: 让Pod以VM为边界Hyper: 让Pod以VM为边界
Hyper: 让Pod以VM为边界
 
JCConf2016 - Dataflow Workshop Setup
JCConf2016 - Dataflow Workshop SetupJCConf2016 - Dataflow Workshop Setup
JCConf2016 - Dataflow Workshop Setup
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
微服務自己動手做
微服務自己動手做微服務自己動手做
微服務自己動手做
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
 

Similar a Kubeflow Machine Learning Toolkit for Kubernetes (SDN x Cloud Native Meetup #4)

20220224台中演講k8s
20220224台中演講k8s20220224台中演講k8s
20220224台中演講k8schabateryuhlin
 
Kubernetes device plugins
Kubernetes device pluginsKubernetes device plugins
Kubernetes device pluginsssuser75c76a2
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWill Huang
 
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)Jiang Jun
 
KubeVela:标准化的云原生平台构建引擎
KubeVela:标准化的云原生平台构建引擎KubeVela:标准化的云原生平台构建引擎
KubeVela:标准化的云原生平台构建引擎suncbing1
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)Will Huang
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率Shengyou Fan
 
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptxNCUDSC
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作Philip Zheng
 
玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手Poy Chang
 
OpenStack and Docke Integration V6
OpenStack and Docke Integration V6OpenStack and Docke Integration V6
OpenStack and Docke Integration V6Guangya Liu
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理frankwsj
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞Secview
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC
 

Similar a Kubeflow Machine Learning Toolkit for Kubernetes (SDN x Cloud Native Meetup #4) (20)

Kubernetes (K8s) 簡介 | GDSC NYCU
Kubernetes (K8s) 簡介 | GDSC NYCUKubernetes (K8s) 簡介 | GDSC NYCU
Kubernetes (K8s) 簡介 | GDSC NYCU
 
20220224台中演講k8s
20220224台中演講k8s20220224台中演講k8s
20220224台中演講k8s
 
Kubernetes device plugins
Kubernetes device pluginsKubernetes device plugins
Kubernetes device plugins
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, Kubernetes
 
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
 
KubeVela:标准化的云原生平台构建引擎
KubeVela:标准化的云原生平台构建引擎KubeVela:标准化的云原生平台构建引擎
KubeVela:标准化的云原生平台构建引擎
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
 
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
scriptcs 簡介
scriptcs 簡介scriptcs 簡介
scriptcs 簡介
 
玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手
 
OpenStack and Docke Integration V6
OpenStack and Docke Integration V6OpenStack and Docke Integration V6
OpenStack and Docke Integration V6
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
 
QIoT ,QuAI
QIoT ,QuAI  QIoT ,QuAI
QIoT ,QuAI
 

Último

函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptxNCU MCL
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】黑客 接单【TG/微信qoqoqdqd】
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptxNCU MCL
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven designJamie (Taka) Wang
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptxNCU MCL
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLPJamie (Taka) Wang
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_patternJamie (Taka) Wang
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxNCU MCL
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptxNCU MCL
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxNCU MCL
 

Último (15)

20200226 - AI Overview
20200226 - AI Overview20200226 - AI Overview
20200226 - AI Overview
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven design
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_pattern
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 
20200323 - AI Intro
20200323 - AI Intro20200323 - AI Intro
20200323 - AI Intro
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 

Kubeflow Machine Learning Toolkit for Kubernetes (SDN x Cloud Native Meetup #4)

  • 2. About Me ● Yi-Yang Lin (林義洋) ○ frank.yylin@gmail.com ○ M.S. student in PU ● Experience ○ COSCUP 2018 Staff ○ Intern in Industrial Technology Research Institute (ITRI)
  • 3. Agenda ● What is Kubeflow? ● Kubeflow uses ksonnet ● Kubernetes NVIDIA Device Plugins ● Deploy Kubeflow ● Demo
  • 5. Kubeflow Kubeflow 是 Google 開源的機器學習工具包,目標是簡化在 Kubernetes 上運行 Machine learning (ML) 的過程,使之通過更簡單、可攜帶與擴展的創建。 ● 目標不是在於重建其他服務,而是提供一個最佳開發系統,來部署到任何集 群中,有效確保ML在集群之間移動性,並輕鬆將任務擴展任何集群。 ● 由於使用 Kubernetes 來做為基礎,因此只要有 Kubernetes 的地方,都能 夠運行部署 Kubeflow。
  • 6. Kubeflow 目標 在不同基礎設施上使機器學習更加簡單與快速 (Laptop <-> ML rig <-> Training cluster <-> Production cluster) 圖片來源:@Seldon Hassle Free, Scalable, Machine Learning with Kubeflow
  • 7. What in the Toolkit ? ● Jupyter Hub: 用於建立與管理互動式的 Jupyter notebook ● TF Job Operator Controller: 用來擴展管理訓練任務,可設定使用 CPU 或 GPU,簡化分散式部署配置。 ● Tensorflow Serving: 將經過訓練的TensorFlow模型導出到Kubernetes Kubernetes + ML = Kubeflow
  • 9. Kubeflow uses ksonnet CLI 支持的框架,可簡化您編寫和部署Kubernetes配置的方式。設計成 與kubectl並行工作。 ● Reuse: 可快速配置常用清單 ● Customize: 根據需求定制部屬清單 ● Deploy: 部屬於多個環境 ● Diff: 不同環境中,可比較運行的應用程序版本差異 ● Track: 可隨時追蹤版本控制你的配置
  • 12. Device Plugins Device Plugins 是 Kubernetes v1.8 版本開始加入的 Alpha 功能,目標是結合 Extended Resource 來支援 GPU、FPGA、高效能 NIC、InfiniBand 等硬體設備介接的 插件,這樣好處在於硬體供應商不需要修改 Kubernetes 核心程式,只需要依據 Device Plugins 介面來實作特定硬體設備插件,就能夠提供給 Kubernetes Pod 使用。 ● 輕易查看叢集中GPU的數量 ● 方便追蹤GPU的健康狀態 ● 輕易啟動kubernetes 叢集中GPU pod Bild: Nvidia
  • 14. 安裝 NVIDIA Device Plugin Set 1 在每台 GPU worker 節點,將 Docker default runtime 改成runtime ● 修改/etc/docker/daemon.json檔案
  • 15. 安裝 NVIDIA Device Plugin Set 2 接著由於 v1.9 版本的 Device Plugins 還是處於 Alpha 中,因此需要手動修改每台 GPU worker 節 點的 kubelet drop-in 「/etc/systemd/system/kubelet.service.d/10-kubeadm.conf」檔案,這 邊在KUBELET_CERTIFICATE_ARGS加入一行 args 環境參數: ● 重新啟動kubelet以接收配置更改 $ sudo systemctl daemon-reload $ sudo systemctl restart kubelet v1.10 版本預設已經加入
  • 16. 安裝 NVIDIA Device Plugin #Master 節點安裝 NVIDIA Device Plugins $ kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.9/nvidia-device-plugin.yml daemonset "nvidia-device-plugin-daemonset" created
  • 18. Deploy Kubeflow 事前準備 ● 所有節點正確安裝指定版本的 NVIDIA driver、CUDA、Docker、NVIDIA Docker v2 ● 建立 NFS server 並在 Kubernetes 節點安裝 NFS common,然後利用 Kubernetes 建立 PV 提供給 Kubeflow 使用 Kubeflow 部屬條件 ● Kubernetes >= 1.8 see here ● ksonnet version 0.9.2 or later
  • 19. Using Kubeflow #初始化ksonnet 應用程式目錄 $ ks init my-kubeflow #ksonnet 應用程式目錄 $ cd my-kubeflow $ ks registry add kubeflow github.com/kubeflow/kubeflow/tree/master/kubeflow $ ks pkg install kubeflow/core $ ks pkg install kubeflow/tf-serving $ ks pkg install kubeflow/tf-job
  • 20. Using Kubeflow #建立 Kubeflow 核心元件,包含 JupyterHub 與 TensorFlow job controller $ kubectl create namespace kubeflow $ kubectl create clusterrolebinding tf-admin --clusterrole=cluster-admin -- serviceaccount=default:tf-job-operator$ ks generate core kubeflow-core --name=kubeflow- core --namespace=kubeflow # 啟動收集匿名使用者使用量資訊,如果不想開啟則忽略 $ ks param set kubeflow-core reportUsage true $ ks param set kubeflow-core usageId $(uuidgen) # 部署 Kubeflow $ ks param set kubeflow-core jupyterHubServiceType LoadBalancer $ ks apply default -c kubeflow-core
  • 21. Using Kubeflow #檢查 Kubeflow 元件部署結果
  • 22. Using Kubeflow 即可登入 Jupyter Notebook,但這邊需要修改 Kubernetes Service # 修改 svc 將 Type 修改成 LoadBalancer,並且新增 externalIPs 指定為 Master IP。 $ kubectl -n kubeflow edit svc tf-hub-lb ... spec: type: LoadBalancer externalIPs: - Master IP ...
  • 23. Testing Kubeflow ● 建立一個 NFS 來提供一個PV給 Kubeflow Jupyter 使用 ● 由於Jupyter 會建立一個PVC,我們手動建立 PV ● 完成後連接 http:// Master_IP # 填寫自己Master IP
  • 24. Jupyter Hub ● 輸入任意帳號密碼進行登入 ● Start My Server按鈕來建立 Server
  • 25. Jupyter Hub ● 根據環境條件生成一個Jupyter node ● 預設會有多種映像檔可以使用 ● Tensorflow 版本與CUDA差異,可以自行 修改配置Image CPU:gcr.io/kubeflow-images-staging/tensorflow-notebook-cpu GPU:gcr.io/kubeflow-images-staging/tensorflow-notebook-gpu
  • 26. Kubeflow GPU Node #確認GPU集群節點,是否可被分配資源 $ kubectl get nodes "-o=custom- columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia.com/gpu"
  • 27. Jupyter Node # 等Kubernetes 分配的節點,下載映像檔後,就會正常啟動 可能發生啟動失敗狀況 500 : Internal Server Error 400 : Bad Request
  • 28. Kubeflow Delete # 從 Kubernetes 叢集刪除 Kubeflow 相關元件的話 $ ks delete default -c kubeflow-core
  • 30. Tensorflow Distributed Training 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" ]}) TensorFlow 分佈式任務,繁雜的配置將成為機器學習工程師們新的負擔
  • 31. TF Operator 來管理 TFJob ● TFJob 為Kubernetes自定義資源(CRD) ,可以輕鬆在Kubernetes上運行 分佈式或非分佈式TensorFlow作業。
  • 32. TF Operator with Tensorflow ● 使用者可以像創建K8s資源一樣創建和管理TF任務
  • 33. TF Operator 來管理 TFJob ● TFJob 為Kubernetes自定義資源(CRD) ,可以輕鬆在Kubernetes上運行 分佈式或非分佈式TensorFlow作業。
  • 34. Kubeflow & Operator 補充 ● Kubeflow 目前以TensorFlow 作為第一個ML框架 但後續支持其他ML(如PyTorch、MXnet、Caffe2)
  • 36. Demo

Notas del editor

  1. 大家好我今天要介紹的是一個 在Kubernetes運行ML的一個工具包 Kubeflow 主要能 更快速去部屬你的ML需要的環境 更有效地去分配開發者所需要的資源 目標就是節省部署的時間,希望開發者能專注於開發,
  2. 擔任半年工研院的實習生 COSCUP 2018 工作人員
  3. 首先我會介紹什麼是kubeflow 再來會提到 kubeflow 官方提供部署工具ksonnet ML訓練過成中,你的叢集可能需要GPU NVIDIA Device Plugins
  4. 主要目標是能輕量化你的部署
  5. Tensorflow Training Controller Yaml 設定deploy 自定義 (CRD) 控制Controller 會有多少的C Tersorflow Servering Container 當你training job的時候,model的時候讓你進入container 來saving server 當你在做分散式訓練的時候,透過kubeflow 來改散training
  6. 其實就是一個讓Deploy更方便的工具
  7. Temp 產生出不同環境的Deploy的狀態,部署的時候還要塞什麼參數,Ksnoot 用這個檔案包起來,到部署環境的時候,部署的時候還要塞一堆參數,可以將這些檔案把這些參數Group起來,之後到哪個地方部署,就直接透過這個Group去部署這樣的環境
  8. 為其實現了一個在Kubernetes上的operator:tensorflow/k8s。由於在Kubernetes上內置的資源類型,如deployment,replicaset,或者是pod等,都很難能夠簡練而清晰地描述一個分佈式機器學習的任務,因此我們利用Kubernetes的Custom Resource Definition特性,定義了一個新的資源類型:TFJob,即TensorFlow Job的縮寫。一個TFJob配置示例如下所示:
  9. 為其實現了一個在Kubernetes上的operator:tensorflow/k8s。由於在Kubernetes上內置的資源類型,如deployment,replicaset,或者是pod等,都很難能夠簡練而清晰地描述一個分佈式機器學習的任務,因此我們利用Kubernetes的Custom Resource Definition特性,定義了一個新的資源類型:TFJob,即TensorFlow Job的縮寫。一個TFJob配置示例如下所示:
  10. 為其實現了一個在Kubernetes上的operator:tensorflow/k8s。由於在Kubernetes上內置的資源類型,如deployment,replicaset,或者是pod等,都很難能夠簡練而清晰地描述一個分佈式機器學習的任務,因此我們利用Kubernetes的Custom Resource Definition特性,定義了一個新的資源類型:TFJob,即TensorFlow Job的縮寫。一個TFJob配置示例如下所示: