vSphere Bitfusion執行TensorFlow深度學習任務
題圖攝於北京奧林匹克公園
本文介紹vSphere 7內建的Bitfusion功能如何在Kubernetes中使用,讓應用使用遠端GPU資源。
(本文作者系VMware雲原生實驗室工程師,首發於VMware中國研發中心)
背景介紹
以 GPU 為例,透過創新的 Bitfusion GPU 虛擬化技術,能夠幫助使用者無需任務修改就能透明地共享和使用資料中心內任何伺服器之上的 AI 加速器,不但能夠幫助使用者提高資源利用率,而且可以 極大便利 AI 應用的部署,構建資料中心級的 AI 加速器資源池。
Bitfusion透過提供遠端GPU池來幫助解決這些問題。Bitfusion使GPU成為頭等公民,可以像傳統的計算資源一樣抽象、分割槽、自動化和共享。另一方面,Kubernetes已經成為部署和管理機器學習負載的平臺。
本文透過介紹使用最新開發的Bitfusion Device Plugin,如何快捷在Kubernetes上使用Bitfusion提供的GPU資源池進TensorFlow行流行的TensorFlow深度學習開發。
Extended Resource: 一種自定義資源擴充套件的方式,將資源的名稱和總數量上報給API server,而Scheduler則根據使用該資源pod的建立和刪除,做資源可用量的加減法,進而在排程時刻判斷是否有滿足資源條件的節點。目前這裡的Extended Resource的增加和減少單元必須是整數,比如你可以分配1個GPU,但是不能分配0.5個GPU。該功能由於只是替代了Opaque integer resources,做了些更名的工作,所以在1.8已經是穩定的狀態了。
Device Plugin:透過提供通用裝置外掛機制和標準的裝置API介面。這樣裝置廠商只需要實現相應的API介面,無需修改Kubelet主幹程式碼,就可以實現支援GPU、FPGA、高效能 NIC、InfiniBand 等各種裝置的擴充套件。該能力在Kubernetes 1.8和1.9版本處於Alpha版本,在1.10會進入Beta版本。需要透過feature gate開啟, 即配置 --feature-gates=DevicePlugins=true
docker build -f bitfusion-device-plugin/Dockerfile -t bitfusion_device_plugin/bitfusion-device:v0.1
FROM bitfusion-base:v0.1
RUN apt install curl -y
RUN \
mkdir -p /goroot && \
curl .9.linux-amd64.tar.gz | tar xvzf - -C /goroot --strip-components=1
# Set environment variables.
ENV GOROOT /goroot
ENV GOPATH /gopath
ENV PATH $GOROOT/bin:$GOPATH/bin:$PATH
# Define working directory.
WORKDIR /gopath/src/bitfusion-device-plugin
COPY . .
RUN go build -o bitfusion-device-plugin
RUN cp bitfusion-device-plugin /usr/bin/bitfusion-device-plugin \
&& cp *.sh /usr/bin
CMD ["./start.sh"]
修改如下,更新 device_plugin.yml 檔案中的 image ,Device Plugin 將以 DaemonSet 安裝在Kubernetes 節點上。
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
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 中新增標籤,並且參考如下修改 引數:
resource limit:可以設定應用能使用的 bitfusion.io/gpu 的數目;
---
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"
TensorFlow有自己的官方Benchmarks:tensorflow/benchmarks,裡面的tf_cnn_benchmarks包含了resnet50, resnet152, inception3, vgg16, googlenet, alexnet等模型,只需要簡單地提供一些引數,便可開始測試。
這裡我們選擇inception3模型來做基準測試,觀察pod內的bitfusion client 是否成功和bitfusion server打通
kubeclt apply -f bitfusion-device-plugin/example/pod/pod.yaml
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557890/viewspace-2707077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《深度學習之TensorFlow》pdf深度學習
- 深度學習之Tensorflow框架深度學習框架
- 深度學習Tensorflow實戰,新課進行曲!深度學習
- NLP與深度學習(一)NLP任務流程深度學習
- Tensorflow 深度學習簡介(自用)深度學習
- 深度學習--Tensorflow初體驗深度學習
- 深度學習tensorflow 之 distorted_inputs深度學習
- 深度學習:TensorFlow入門實戰深度學習
- BAIR展示新型模仿學習,學會「像人」那樣執行任務AI
- tensorflow 學習筆記使用CNN做英文文字分類任務筆記CNN文字分類
- 行業專家分享:深度學習筆記之Tensorflow入門!行業深度學習筆記
- 基於TensorFlow的深度學習實戰深度學習
- Tensorflow2 深度學習十必知深度學習
- laravel框架任務排程(定時執行任務)Laravel框架
- 同步任務與非同步任務執行順序非同步
- 微任務和巨集任務哪個先執行
- php:多程式執行任務PHP
- IDEA上執行Flink任務Idea
- 深度學習模型在序列標註任務中的應用深度學習模型
- {Submarine} 在 Apache Hadoop 中執行深度學習框架ApacheHadoop深度學習框架
- TensorFlow系列專題(三):深度學習簡介深度學習
- ML.NET 示例:深度學習之整合TensorFlow深度學習
- Ubuntu深度學習環境搭建 tensorflow+pytorchUbuntu深度學習PyTorch
- Python TensorFlow深度學習迴歸程式碼:DNNRegressorPython深度學習DNN
- Springboot-之定時任務,啟動執行任務Spring Boot
- 《動手學深度學習》TensorFlow2.0版本深度學習
- 如何避免任務重複執行
- Spark叢集和任務執行Spark
- SpringBoot執行定時任務@ScheduledSpring Boot
- 使用screen後臺執行任務
- C# 執行緒與任務C#執行緒
- COVID-19:利用Opencv, Keras/Tensorflow和深度學習進行口罩檢測OpenCVKeras深度學習
- 《深度學習案例精粹:基於TensorFlow與Keras》案例集用於深度學習訓練深度學習Keras
- Django配置celery執行非同步任務和定時任務Django非同步
- 瞭解js執行機制——微任務與巨集任務JS
- 『學了就忘』Linux系統定時任務 — 88、迴圈執行定時任務Linux
- 如何免費雲端執行Python深度學習框架?Python深度學習框架
- 【高併發】通過ThreadPoolExecutor類的原始碼深度解析執行緒池執行任務的核心流程thread原始碼執行緒