溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在Kubernetes上使用Bitfusion進行TensorFlow深度學(xué)習(xí)

發(fā)布時間:2021-12-23 16:18:04 來源:億速云 閱讀:198 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了如何在Kubernetes上使用Bitfusion進行TensorFlow深度學(xué)習(xí),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

背景介紹

隨著 AI 技術(shù)的快速發(fā)展,越來越多的企業(yè)開始將 AI 技術(shù)應(yīng)用到自身業(yè)務(wù)之中。目前,云端 AI 算力主要由三類 AI 加速器來提供:GPU,F(xiàn)PGA 和 AI ASIC 芯片。這些加速器的優(yōu)點是性能非常高,缺點是 成本高昂,缺少異構(gòu)加速管理和調(diào)度。大部分企業(yè)因無法構(gòu)建高效的加速器資源池,而不得不獨占式地使用這些昂貴的加速器資源,導(dǎo)致 資源利用率低,成本高。

以 GPU 為例,通過創(chuàng)新的 Bitfusion GPU 虛擬化技術(shù),能夠幫助用戶無需任務(wù)修改就能透明地共享和使用數(shù)據(jù)中心內(nèi)任何服務(wù)器之上的 AI 加速器,不但能夠幫助用戶提高資源利用率,而且可以 極大便利 AI 應(yīng)用的部署,構(gòu)建數(shù)據(jù)中心級的 AI 加速器資源池。

Bitfusion通過提供遠(yuǎn)程GPU池來幫助解決這些問題。Bitfusion使GPU成為頭等公民,可以像傳統(tǒng)的計算資源一樣抽象、分區(qū)、自動化和共享。另一方面,Kubernetes已經(jīng)成為部署和管理機器學(xué)習(xí)負(fù)載的平臺。

下面通過介紹使用最新開發(fā)的Bitfusion Device Plugin,如何快捷在Kubernetes上使用Bitfusion提供的GPU資源池進TensorFlow行流行的TensorFlow深度學(xué)習(xí)開發(fā)。

概念理解

先來簡要介紹一下kubernetes這兩個模塊:

Extended Resource: 一種自定義資源擴展的方式,將資源的名稱和總數(shù)量上報給API server,而Scheduler則根據(jù)使用該資源pod的創(chuàng)建和刪除,做資源可用量的加減法,進而在調(diào)度時刻判斷是否有滿足資源條件的節(jié)點。目前這里的Extended Resource的增加和減少單元必須是整數(shù),比如你可以分配1個GPU,但是不能分配0.5個GPU。該功能由于只是替代了Opaque integer resources,做了些更名的工作,所以在1.8已經(jīng)是穩(wěn)定的狀態(tài)了。

Device Plugin:通過提供通用設(shè)備插件機制和標(biāo)準(zhǔn)的設(shè)備API接口。這樣設(shè)備廠商只需要實現(xiàn)相應(yīng)的API接口,無需修改Kubelet主干代碼,就可以實現(xiàn)支持GPU、FPGA、高性能 NIC、InfiniBand 等各種設(shè)備的擴展。該能力在Kubernetes 1.8和1.9版本處于Alpha版本,在1.10會進入Beta版本。需要通過feature gate打開, 即配置 --feature-gates=DevicePlugins=true

如圖所示,目前我們的處理層在通過device plugin控制單反方面做pod的資源控制,然后由pod內(nèi)的Bitfusion Client 和 Bitfusion Server 在CUDA driver級別進行交互,在BitfusionClient的軟件堆棧中有一個CUDA driver的代理,通過它截獲Client上的所有CUDA服務(wù)訪問,通過網(wǎng)絡(luò)將數(shù)據(jù)和服務(wù)請求發(fā)送給BitfusionServer進行處理。

如何在Kubernetes上使用Bitfusion進行TensorFlow深度學(xué)習(xí)

Bitfusion Device Plugin安裝及使用步驟
以下例子以Kubernetes v1.17.5和Ubuntu 18.04作為安裝環(huán)境,闡述Bitfusion Device Plugin搭建TensorFlow環(huán)境進行Benchmarks測試。目前項目及容器鏡像托管在研發(fā)內(nèi)部服務(wù)器。如無法訪問,可通過VMware客戶代表聯(lián)系我們。

首先我們下載Bitfusion Device Plugin項目

目前項目的代碼以及bitfusion-base暫時未公開,可通過聯(lián)系我們或者客戶代表獲得。獲得后,可繼續(xù)執(zhí)行下面操作。

我們需要先構(gòu)建 Device Plugin 的docker image 由于想知道該平臺的一個整體性能,所以想要跑些Benchmarks,可以從我們提供的 Dockerfile 中構(gòu)建Docker image:
在這里插入圖片描述
然后配置Bitfusion Device Plugin的yaml文件

Bitfusion Device Plugin 是符合 Kubernetes device plugin 接口規(guī)范的設(shè)備擴展插件??梢詿o縫地在一個 Kubernetes 集群里添加 bitfusion.io/gpu 資源,從而在部署應(yīng)用的時候,在容器中使用 bitfusion。

修改如下,更新 device_plugin.yml 文件中的 image ,Device Plugin 將以 DaemonSet 安裝在Kubernetes 節(jié)點上。

apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: bitfusion-cli-device-plugin
 namespace: kube-system
 labels:
 tier: node
spec:
 hostNetwork: true
 containers:
 - name: device-plugin-ctr
 image: bitfusion_device_plugin/bitfusion-device:v0.1
 securityContext:
 privileged: true
 command: ["./start.sh"]
 env:
 - name: REG_EXP_SFC
 valueFrom:
 configMapKeyRef:
 name: configmap
 key: reg-exp
 - name: SOCKET_NAME
 valueFrom:
 configMapKeyRef:
 name: configmap
 key: socket-name
 - name: RESOURCE_NAME
 valueFrom:
 configMapKeyRef:
 name: configmap
 key: resource-name
 volumeMounts:
 - mountPath: "/root/.bitfusion"
 name: bitfusion-cli
 - mountPath: /gopath/run
 name: docker
 - mountPath: /gopath/proc
 name: proc
 - mountPath: "/root/.ssh/id_rsa"
 name: ssh-key
 - mountPath: "/var/lib/kubelet"
 name: kubelet-socket
 - mountPath: "/etc/kubernetes/pki"
 name: pki
 volumes:
 - name: bitfusion-cli
 hostPath:
 path: "/root/.bitfusion"
 - name: docker
 hostPath:
 path: /var/run
 - name: proc
 hostPath:
 path: /proc
 - hostPath:
 path: "/root/.ssh/id_rsa"
 name: ssh-key
 - hostPath:
 path: "/var/lib/kubelet"
 name: kubelet-socket
 - hostPath:
 path: "/etc/kubernetes/pki"
 name: pki

然后使用以下命令進行部署

kubeclt apply -f bitfusion-device-plugin/device_plugin.yml

執(zhí)行完成后,等待一段時間,如果成功部署,可以看到Bitfusion Device Plugin 的狀態(tài)為Running,日志打印出當(dāng)前device-plugin的狀態(tài)

如何在Kubernetes上使用Bitfusion進行TensorFlow深度學(xué)習(xí)
在這里插入圖片描述

構(gòu)建TensorFlow image進行Benchmarks測試

我們已經(jīng)提供了bitfusion-base鏡像,以及構(gòu)建好的bitfusion-tfl-cli鏡像,可以直接拉取使用,或者按照需求自行構(gòu)建。

docker build -f bitfusion-device-plugin/docker/bitfusion-tfl-cli/Dockerfile -t bitfusion-tfl-cli:v0.1
FROM bitfusion-base:v0.1
RUN conda install tensorflow-gpu==1.13.1

在 pod.yaml 中添加標(biāo)簽,并且參考如下修改 參數(shù):

  • resource limit:可以設(shè)置應(yīng)用能使用的 bitfusion.io/gpu 的數(shù)目;

配置 pod bitfusion-device-plugin/example/pod/pod.yaml

---
apiVersion: v1
kind: ConfigMap
metadata:
 name: bfs-pod-configmap
---

apiVersion: v1
kind: Pod
metadata:
 name: bfs-demo
 labels:
 purpose: device-demo
spec:
 hostNetwork: true
 containers:
 - name: demo
 image: bitfusion-tfl-cli:v0.1
 imagePullPolicy: Always
 workingDir: /root
 securityContext:
 privileged: true
 command: ["/bin/bash", "-c", "--"]
 args: ["python /benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py
 --local_parameter_device=gpu
 --batch_size=32
 --model=inception3 "]
 volumeMounts:
 - mountPath: "/root/.bitfusion"
 name: config-volume
 resources:
 limits:
 bitfusion.io/gpu: 1
 volumes:
 - name: config-volume
 hostPath:
 path: "/root/.bitfusion"

Kubernetes上跑TensorFlow的benchmark進行測試

TensorFlow有自己的官方Benchmarks:tensorflow/benchmarks,里面的tf_cnn_benchmarks包含了resnet50, resnet152, inception3, vgg16, googlenet, alexnet等模型,只需要簡單地提供一些參數(shù),便可開始測試。

這里我們選擇inception3模型來做基準(zhǔn)測試,觀察pod內(nèi)的bitfusion client 是否成功和bitfusion server打通

kubeclt apply -f bitfusion-device-plugin/example/pod/pod.yaml

執(zhí)行完之后,等待一段時間,default 項目中可以看到 bfs-demo 的 Pod。

如果部署成功, Pod的log顯示:

如何在Kubernetes上使用Bitfusion進行TensorFlow深度學(xué)習(xí)

上述內(nèi)容就是如何在Kubernetes上使用Bitfusion進行TensorFlow深度學(xué)習(xí),你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI