您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在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進行處理。
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)
構(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顯示:
上述內(nèi)容就是如何在Kubernetes上使用Bitfusion進行TensorFlow深度學(xué)習(xí),你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(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)容。