利用 Kubeflow 來管理 TensorFlow 應用程式

https://kairen.github.io/2018/03/15/tensorflow/kubeflow/

Kubeflow 是 Google 開源的機器學習工具,目標是簡化在 Kubernetes 上運行機器學習的過程,使之更簡單、可攜帶與可擴展。Kubeflow 目標不是在於重建其他服務,而是提供一個最佳開發系統來部署到各種基礎設施架構中,另外由於使用 Kubernetes 來做為基礎,因此只要有 Kubernetes 的地方,都能夠執行 Kubeflow。

該工具能夠建立以下幾項功能:

用於建議與管理互動式 Jupyter notebook 的 JupyterHub。
可以設定使用 CPU 或 GPU,並透過單一設定調整單個叢集大小的 Tensorflow Training Controller。
用 TensorFlow Serving 容器來提供模型服務。
Kubeflow 目標是透過 Kubernetes 的特性使機器學習更加簡單與快速:

在不同基礎設施上實現簡單、可重複的攜帶性部署(Laptop <-> ML rig <-> Training cluster <-> Production cluster)。
部署與管理松耦合的微服務。
根據需求進行縮放。
節點資訊
本次安裝作業系統採用Ubuntu 16.04 Server,測試環境為實體機器:

IP Address Role vCPU RAM Extra Device
172.22.132.51 gpu-node1 8 16G GTX 1060 3G
172.22.132.52 gpu-node2 8 16G GTX 1060 3G
172.22.132.53 master1 8 16G 無
事前準備
使用 Kubeflow 之前,需要確保以下條件達成:

所有節點正確安裝指定版本的 NVIDIA driver、CUDA、Docker、NVIDIA Docker,請參考 安裝 Nvidia Docker 2。
(option)所有 GPU 節點安裝 cuDNN v7.1.2 for CUDA 9.1,請至 NVIDIA cuDNN 下載。
tarxvfcudnn9.1linuxx64v7.1.tgz t a r x v f c u d n n − 9.1 − l i n u x − x 64 − v 7.1. t g z sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
所有節點以 kubeadm 部署成 Kubernetes v1.9+ 叢集,請參考 用 kubeadm 部署 Kubernetes 叢集。
Kubernetes 叢集需要安裝 NVIDIA Device Plugins,請參考 安裝 Kubernetes NVIDIA Device Plugins。
建立 NFS server 並在 Kubernetes 節點安裝 NFS common,然後利用 Kubernetes 建立 PV 提供給 Kubeflow 使用:

在 master 執行

sudo apt-get update && sudo apt-get install -y nfs-server sudo apt-get update && sudo apt-get install -y nfs-server sudo mkdir /nfs-data
echo/nfsdata(rw,sync,norootsquash,nosubtreecheck)|sudoteea/etc/exports e c h o “ / n f s − d a t a ∗ ( r w , s y n c , n o r o o t s q u a s h , n o s u b t r e e c h e c k ) ” | s u d o t e e − a / e t c / e x p o r t s sudo /etc/init.d/nfs-kernel-server restart

在 node 執行

sudo apt-get update && sudo apt-get install -y nfs-common  
安裝ksonnet 0.9.2,請參考以下:
sudo apt-get update && sudo apt-get install -y nfs-common  安裝ksonnet 0.9.2,請參考以下:
wget https://github.com/ksonnet/ksonnet/releases/download/v0.9.2/ks_0.9.2_linux_amd64.tar.gz
tarxvfks0.9.2linuxamd64.tar.gz t a r x v f k s 0 .9 .2 l i n u x a m d 64. t a r . g z sudo cp ks_0.9.2_linux_amd64/ks /usr/local/bin/
$ ks version
ksonnet version: 0.9.2
jsonnet version: v0.9.5
client-go version: 1.8
部署 Kubeflow
本節將說明如何利用 ksonnet 來部署 Kubeflow 到 Kubernetes 叢集中。首先在master節點初始化 ksonnet 應用程式目錄:

$ ks init my-kubeflow
如果遇到以下問題的話,可以自己建立 GitHub Token 來存取 GitHub API,請參考 Github rate limiting errors。

ERROR GET https://api.github.com/repos/ksonnet/parts/commits/master: 403 API rate limit exceeded for 122.146.93.152.
接著安裝 Kubeflow 套件至應用程式目錄:

cdmykubeflow c d m y − k u b e f l o w ks registry add kubeflow github.com/kubeflow/kubeflow/tree/master/kubeflow
kspkginstallkubeflow/core k s p k g i n s t a l l k u b e f l o w / c o r e ks pkg install kubeflow/tf-serving
$ ks pkg install kubeflow/tf-job
然後建立 Kubeflow 核心元件,該元件包含 JupyterHub 與 TensorFlow job controller:

kubectlcreatenamespacekubeflow k u b e c t l c r e a t e n a m e s p a c e k u b e f l o w kubectl create clusterrolebinding tf-admin –clusterrole=cluster-admin –serviceaccount=default:tf-job-operator
$ ks generate core kubeflow-core –name=kubeflow-core –namespace=kubeflow

啟動收集匿名使用者使用量資訊,如果不想開啟則忽略

ksparamsetkubeflowcorereportUsagetrue k s p a r a m s e t k u b e f l o w − c o r e r e p o r t U s a g e t r u e ks param set kubeflow-core usageId $(uuidgen)

部署 Kubeflow

ksparamsetkubeflowcorejupyterHubServiceTypeLoadBalancer k s p a r a m s e t k u b e f l o w − c o r e j u p y t e r H u b S e r v i c e T y p e L o a d B a l a n c e r ks apply default -c kubeflow-core
詳細使用量資訊請參考 Usage Reporting 。

完成後檢查 Kubeflow 元件部署結果:

$ kubectl -n kubeflow get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE
ambassador-7956cf5c7f-6hngq 2/2 Running 0 34m 10.244.41.132 kube-gpu-node1
ambassador-7956cf5c7f-jgxnd 2/2 Running 0 34m 10.244.152.134 kube-gpu-node2
ambassador-7956cf5c7f-jww2d 2/2 Running 0 34m 10.244.41.133 kube-gpu-node1
spartakus-volunteer-8c659d4f5-bg7kn 1/1 Running 0 34m 10.244.152.135 kube-gpu-node2
tf-hub-0 1/1 Running 0 34m 10.244.152.133 kube-gpu-node2
tf-job-operator-78757955b-2jbdh 1/1 Running 0 34m 10.244.41.131 kube-gpu-node1
這時候就可以登入 Jupyter Notebook,但這邊需要修改 Kubernetes Service,透過以下指令進行:

$ kubectl -n kubeflow get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
ambassador ClusterIP 10.101.157.91 80/TCP 45m service=ambassador
ambassador-admin ClusterIP 10.107.24.138 8877/TCP 45m service=ambassador
k8s-dashboard ClusterIP 10.111.128.104 443/TCP 45m k8s-app=kubernetes-dashboard
tf-hub-0 ClusterIP None 8000/TCP 45m app=tf-hub
tf-hub-lb ClusterIP 10.105.47.253 80/TCP 45m app=tf-hub

修改 svc 將 Type 修改成 LoadBalancer,並且新增 externalIPs 指定為 Master IP。

$ kubectl -n kubeflow edit svc tf-hub-lb

spec:
type: LoadBalancer
externalIPs:
- 172.22.132.41

測試 Kubeflow
開始測試前先建立一個 NFS PV 來提供給 Kubeflow Jupyter 使用:

$ cat <

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值