基於VMware Bitfusion的GPU共享技術使用場景討論

2021-02-15 關於IT和生活
1. 背景

GPU作為一種加速器晶片,在機器學習,特別是深度學習中得到廣泛的應用。但是,無論是企業、學校、醫院或者政府單位,決定在人工智慧領域進行投入時,領導卻發現:

投入了100萬,光買設備就花了80萬,工程師還經常抱怨GPU資源不夠用當工程師雄心勃勃打算開始幹活,卻發現花了一個多星期,IT環境還沒有搞好

究其原因,大致有以下三個:

GPU採購成本比較高,而且由於技術發展的限制,在實際使用中,比較難於共享,從而導致浪費和不足的情況並存。GPU的使用場景比較複雜,訓練需要大量資源且需要長時間使用,在線推理需要及時響應,而開發和培訓/課程實訓場景的並發用戶數會很多。機器學習的環境配置複雜,且通常情況下數據工程師不擅長。通常,環境涉及到GPU驅動、CUDA、程序設計語言編譯器/解釋器(比如python)、機器學習平臺(比如TensorFlow、PyTorch)等。而且這些軟體對版本都有一定的匹配要求。根據不同人員的使用習慣,有人喜歡用docker,有人喜歡直接運行命令,可能還涉及到Jupyter notebook工具的使用。很多的安裝程序都需要連接到國外伺服器,下載速度很慢。

VMware基於Bitfusion技術的方案正是來應對這樣的場景和需求。

2. 場景與需求

最近我們針對於高校的使用場景做了一個驗證,和大家分享一下。當然,雖然這是高校場景,但對於其他行業,依然具有參考價值。

在高校中,遇到的場景主要包含上課和科研。

在上課場景中,通常情況下,任課老師會根據課程需要事先安裝相應的軟體和工具;在實際課程中,學生每人獲得一個這樣的環境,使用課程中相關的算法進行模型的開發和訓練。在整個過程中,學生關注於機器學習的方法和算法,而不是環境的安裝、配置和故障處理。在科研場景中,科研人員(包括老師和研究生)根據科研任務和場景,開發相應的模型、算法和參數,並且利用GPU進行訓練和調整。


3. 解決方案架構

針對於以上需求,我們構建了以下架構的IT基礎設施服務:

圖1:整體架構圖

首先構建基於Bitfusion的GPU共享池。我們通過創建4臺虛擬機,每臺虛擬機通過vSphere的直通技術使用2塊GPU V100(32GB顯存)的GPU卡。

課程場景的資源,通過Horizon虛擬桌面提供。具體流程如下:

老師通過在虛擬機中安裝課程所需的軟體,製作課程模板。課程使用機器學習常用的Ubuntu16.04和Ubuntu18.04作業系統,並且虛擬機已經安裝了Bitfusion客戶端,可以將任務發送到遠程的Bitfusion伺服器端進行計算。IT管理員通過鏡像模板在上課之前發布虛擬桌面,桌面數量與學生數量保持一致,或者略多一些。學生在上課時,通過實訓教室現有的PC,或者瘦客戶機,或者學生自己的筆記本電腦,通過瀏覽器或者Horizon客戶端登錄到虛擬桌面,根據課程指定的任務。當需要GPU資源時,Bitfusion客戶端會將任務發送到遠程Bitfusion伺服器端執行;當資源不足時,系統會進行排隊。

在科研場景中,科研人員如果是進行模型開發,依然可以在Horizon虛擬桌面中進行;如果是長時間執行的訓練的任務,則建議通過vRealize Automation雲管理平臺申請已經安裝並enable bitfusion的虛擬伺服器。科研人員在虛擬伺服器中執行相關的python代碼,運行在虛擬伺服器中的Bitfusion客戶端會將相關的程序發送到Bitfusion伺服器端執行。當然,如果科研人員希望在虛擬伺服器中使用docker或者Jupyter notebook,也是沒有問題的。

通過Bitfusion的Quota機制,可以給到不同的用戶和場景,不同的最大可使用資源份額,以避免資源的濫用。Bitfusion也可以通過設定,斷開佔用GPU資源但是卻沒有真正使用的客戶端。

4. 測試用例

在本次測試中,我們驗證了以下用例:

使用編輯器編寫python代碼,通過python命令直接運行運行python之後進入到交互命令行,運行相關命令使用Jupyter Notebook打開ipynb文件,並運行相關notebook使用Docker啟動Nvidia提供的容器鏡像,並進入容器內執行相應的python腳本

具體測試過程和結果如下:

4.1 使用編輯器編寫python代碼,通過python命令直接運行

我們使用TensorFlow官方的benchmark工具tf_cnn_benchmarks.https://github.com/tensorflow/benchmarks/tree/master/scripts/tf_cnn_benchmarks使用cifar10數據集https://www.cs.toronto.edu/~kriz/cifar.html,模型採用resnet110,batch_size為64

原生的腳本命令命令如下:

python3  ./benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py  --data_format=NCHW  --batch_size=64  --model=resnet110  --variable_update=replicated  --local_parameter_device=gpu  --nodistortions --num_gpus=1  --num_batches=100  --data_dir=./benchmarks/data/cifar-10-batches-py  --data_name=cifar10  --use_fp16=False

本測試中,我們使用Bitfusion來運行。Bitfusion的具體使用方法可以參看官方文檔 《在vSphere Bitfusion上運行TensorFlow的示例指南》 https://docs.vmware.com/cn/VMware-vSphere-Bitfusion/2.0/vmware-vsphere-bitfusion-20-tensorflow-example-guide.pdf。

我們嘗試以下GPU份額:完整的V100GPU、1/10個GPU、1/20個GPU. 實際使用的顯存分別為:32GB、3.2GB、1.6GB。本項測試的關注點在於我們究竟需要多少GPU,才可以正常運行這個TensorFlow benchmark。

我們使用如下命令調整GPU的份額:

bitfusion run -n 1 -p 1 -- python3  ./benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py  --data_format=NCHW  --batch_size=64  --model=resnet110  --variable_update=replicated  --local_parameter_device=gpu  --nodistortions --num_gpus=1  --num_batches=100  --data_dir=./benchmarks/data/cifar-10-batches-py  --data_name=cifar10  --use_fp16=False

bitfusion run -n 1 -p 0.1 -- python3  ./benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py  --data_format=NCHW  --batch_size=64  --model=resnet110  --variable_update=replicated  --local_parameter_device=gpu  --nodistortions --num_gpus=1  --num_batches=100  --data_dir=./benchmarks/data/cifar-10-batches-py  --data_name=cifar10  --use_fp16=False

bitfusion run -n 1 -p 0.05 -- python3  ./benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py  --data_format=NCHW  --batch_size=64  --model=resnet110  --variable_update=replicated  --local_parameter_device=gpu  --nodistortions --num_gpus=1  --num_batches=100  --data_dir=./benchmarks/data/cifar-10-batches-py  --data_name=cifar10  --use_fp16=False

以上所有的配置中,tf_cnn_banchmarks處理的結果均大致為:1200 images/second。當然,這個性能數據和直接使用本地的GPU還是有一些差距,主要原因是本次測試,由於條件的限制,並沒有做優化。具體的優化可以參看:《VMware vSphere BitfusionPerformance Best Practices Guide》https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/performance/bitfusion-perf-best-practices.pdf

如果採用0.05個GPU支持單個任務,則一塊V100 GPU(32GB顯存)則可以同時支持20個並發tf_cnn_benchmarks任務。如果用戶希望增加更多的並發任務,則需要調整batch_size參數。在實際應用中,由於系統提供排隊機制,當單個任務執行時間不是很長的情況下,可以有更多的學生同時使用。

4.2 運行Python,並進入到交互命令行,運行相關命令

此類情形,我們需要首先申請遠程GPU資源,然後再運行相關的命令和腳本,最後需要釋放遠程的GPU資源。相關的命令可以參考Bitfusion官方文檔 - 《VMware vSphere Bitfusion 用戶指南》 https://docs.vmware.com/cn/VMware-vSphere-Bitfusion/2.0/vmware-vsphere-bitfusion-20-user-guide.pdf

在下面這個示例中,我們首先申請單塊GPU,2048M的顯存;然後進入Python交互式命令行,運行tensorflow的代碼獲得GPU信息;最後釋放GPU。

$ bitfusion request_gpus -n 1 -m 2048
Requested resources:
Server List: 192.168.131.36:56001
Client idle timeout: 0 min

$ bitfusion client -- python3
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
...
>>> print(tf.test.gpu_device_name())
...
2020-09-27 18:08:42.584300: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties:
name: Tesla V100-PCIE-32GB major: 7 minor: 0 memoryClockRate(GHz): 1.38
pciBusID: 0000:00:00.0
totalMemory: 2.00GiB freeMemory: 1.41GiB
...
2020-09-27 18:08:42.592493: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/device:GPU:0 with 1217 MB memory) -> physical GPU (device: 0, name: Tesla V100-PCIE-32GB, pci bus id: 0000:00:00.0, compute capability: 7.0)

/device:GPU:0
...

>>> quit();

$ bitfusion release_gpus

從以上驗證結果我們可以看到Bitfusion支持交互式Python運行方式。

4.3 使用Jupyter Notebook打開ipynb文件,並運行相關notebook

Jupyter Notebook 作為一個代碼、輸出、文檔、多媒體資源整合在一起的多功能科學運算平臺,深受數據科學工作者的喜愛,被廣泛的應用在機器學習的各個教程中。

Jupyter Notebook 支持自定義kernel來運行代碼,所以我們有機會構建基於Bitfusion的python kernel。如下圖所示:

圖2:使用Bitfusion kernel運行Jupyter Notebook

具體的做法可以參看《Bitfusion Jupyter Integration—It’s Full of Stars》https://blogs.vmware.com/vsphere/2020/08/bitfusion-jupyter-integration-its-full-of-stars.html

需要指出的是,kernel在定義的時候,就需要指定所用的GPU資源。所以,如果在課程中,需要使用不同大小的GPU資源,則可能需要定義多個kernel。

本次測試使用TensorFlow官方的標準教程(tutorial)中的穿戴用品的圖像識別 - https://github.com/tensorflow/docs/blob/master/site/en/r1/tutorials/keras/basic_classification.ipynb

在測試中,我們發現只需要配置0.02個V100 GPU資源就可以順利運行basic_classification的應用;也就是說,一塊V100的GPU卡可以同時給到50個學生使用。

與交互式python類似,當用戶在Jupyter Notebook的網頁中,選定一個kernel開始運行的時候,這個kernel就佔據了GPU資源,直到kernel被停止。也就是說,如同4.1中的超配(overcommit)之後的排隊,在使用Jupyter Notebook時候,不能使用。

4.4 使用Docker啟動Nvidia提供的容器鏡像,並進入容器內執行相應的python腳本

隨著Docker的流行,很多數據科學家也開始使用Docker。Docker的優勢在於docker image中已經安裝好了運行環境,用戶省去了很多繁瑣的安裝配置工作。用戶通過切換docker images也可以很容易的切換運行環境。不管是Nvidia,還是framework的供應商(比如TensorFlow),也都提供了docker images給到大家使用。當然,使用docker也帶來的一些麻煩,就是用戶必須要了解docker的使用。

在bitfusion結合docker的場景中,docker image 管理員需要基於官方的鏡像,通過 docker build 構建基於bitfusion的docker image。比如如下的Dockerfile就是在nvcr.io/nvidia/tensorflow:19.03-py3中加入bitfusion的支持,生成新的docker image。

$ cat Dockerfile
FROM nvcr.io/nvidia/tensorflow:19.03-py3 
MAINTAINER XXX University Bitfusion

#  Set initial working directory
WORKDIR /home/bitfusion/downloads/
 
# Update package list
RUN apt-get update
 
# Install Bitfusion. Assumes deb for Ubuntu16.04
# resides in mounted directory, /pkgs
COPY bitfusion-client-ubuntu1604_2.0.0beta5-11_amd64.deb .
RUN apt-get install -y ./bitfusion-client-ubuntu1604_2.0.0beta5-11_amd64.deb
# Must run list_gpus to pull in env and tokens
RUN bitfusion list_gpus

製作新的docker image,然後通過運行docker run進入到docker進程的shell,下面用戶就可以運行相關的Python代碼了。

sudo docker build -t tensorflow:19.03-py3-bitfusion .
 
sudo docker run --rm --privileged --pid=host --ipc=host \
   --net=host -it \
   -v /data:/data \
   -v /dev/log:/dev/log \
   tensorflow:19.03-py3-bitfusion

具體的方式可以參看這份文檔。《AI/ML, vSphere Bitfusion, and Docker Containers—A Sparkling Refreshment for Modern Apps》https://blogs.vmware.com/vsphere/2020/06/ai-ml-vsphere-bitfusion-and-docker-containers-a-sparkling-refreshment-for-modern-apps.html

從以上驗證結果我們可以看到Bitfusion支持在容器環境中使用。

5. 方案主要優勢使用Bitfusion統一管理所有的GPU資源,按需使用,用完自動歸還,儘可能減少idle的情況,大大提升了GPU資源的使用效率Bitfusion GPU共享機制對用戶使用透明,用戶不需要改變任何代碼使用Horizon虛擬桌面和即時克隆技術,可以提供統一的環境給到學生,讓學生可以專注在課程本身,而不是環境的安裝和配置科研人員可以利用到更多的GPU資源,更快的完成訓練任務得到反饋,提高了科研的效率6. 擴展討論

本方案主要解決的是學習、開發和訓練的場景,依然適合於其他行業的類似場景。針對於推理場景,特別是在線推理,本架構很容易擴展支持。

圖3:支持開發、訓練和推理的架構

7. 總結

GPU最為一種加速器資源,在數據科學特別是機器學習場景中,被廣泛採用。當前的GPU使用方式,無論是資源使用效率,還是運行環境的運維上,都存在很大的挑戰。VMware的Bitfusion技術應運而生,使得GPU資源可以在多個客戶端分時共享,並且可以根據應用需求靈活動態的切割顯存。本文基於高校的教學和科研場景,結合VMware Horizon虛擬桌面產品和vRealize雲管理平臺產品,設計解決方案,並進行了相關驗證,驗證基本覆蓋了常用的使用場景和工具。通過擴展,該解決方案架構依然適用於其他行業。



正文完

參考文獻:

vSphere Bitfusion 2.0.0 安裝指南:https://docs.vmware.com/cn/VMware-vSphere-Bitfusion/2.0/vmware-vsphere-bitfusion-20-installation-guide.pdfVMware vSphere Bitfusion 用戶指南: https://docs.vmware.com/cn/VMware-vSphere-Bitfusion/2.0/vmware-vsphere-bitfusion-20-user-guide.pdf在 vSphere Bitfusion 上運行 TensorFlow 的示例指南: https://docs.vmware.com/cn/VMware-vSphere-Bitfusion/2.0/vmware-vsphere-bitfusion-20-tensorflow-example-guide.pdfBitfusion Jupyter Integration—It’s Full of Stars: https://blogs.vmware.com/vsphere/2020/08/bitfusion-jupyter-integration-its-full-of-stars.htmlAI/ML, vSphere Bitfusion, and Docker Containers—A Sparkling Refreshment for Modern Apps: https://blogs.vmware.com/vsphere/2020/06/ai-ml-vsphere-bitfusion-and-docker-containers-a-sparkling-refreshment-for-modern-apps.html

相關焦點

  • VMware Bitfusion GPU共享技術的應用場景
    根據不同人員的使用習慣,有人喜歡用docker,有人喜歡直接運行命令,可能還涉及到Jupyter notebook工具的使用。很多的安裝程序都需要連接到國外伺服器,下載速度很慢。VMware基於Bitfusion技術的方案正是來應對這樣的場景和需求。2.
  • VMWare Fusion Pro 11 中文專業版 – 蘋果 macOS 強大的虛擬機
    使用 VMware Fusion,可以在基於 Intel 的 Mac 計算機上無縫運行 Windows、Linux 以及其他 PC 作業系統。這可以讓習慣了 Mac 的操作方式的你更加自如地使用 Windows。
  • 基於 Kubernetes 的 GPU 類型調度實現
    面對這類新要求,基於 Kubernetes 的雲原生技術為人工智慧提供了一種新的工作模式。憑藉其特性,Kubernetes 可以無縫將模型訓練、inference 和部署擴展到多雲 GPU 集群,允許數據科學家跨集群節點自動化多個 GPU 加速應用程式容器的部署、維護、調度和操作。
  • VMware中 虛擬機設置共享文件目錄
    第五步: 一般共享的存儲目錄,默認在/mnt/hgfs路徑下。第六步: 為了驗證是否已經創建了共享目錄,可以在terminal窗口鍵入 vmware-hgfsclient 命令;輸出內容如下: WinLinShare 。說明,共享目錄創建的沒有問題。
  • 使用VMware Workstation創建共享虛擬機,讓資源更好的整合使用
    其中的一個比較實用的功能就是可以創建共享虛擬機,我們可以在性能較好的PC機上安裝虛擬機系統,在區域網中連接該VMware Workstation的虛擬機,達到資源的整合使用。讓實際的工作中的測試,還原等變得更加的便捷。下面就來看看如何創建一個共享虛擬機。
  • VMware 14 下載|VMware Workstation 14中文版下載-太平洋下載中心
    vmware workstation 14是一款功能強大的桌面虛擬計算機軟體。VMware 14讓用戶可在同個桌面上同時運行多個作業系統,能模擬出非常完善的網絡環境,方便用戶在多個作業系統間自由切換,特別適合it設計人員使用。
  • 不花一分錢,上千塊的mac vmware虛擬機免費使用
    常用的虛擬機軟體有三款:VirtualBox(VB)、VMware Fusion (VF)和 Parallels Desktop (PD)VB 免費,但不好用;PD 使用體驗最好,但價格也不便宜,訂閱版售價 498 元/年,永久版 698元,專業版和企業版價格會更高;而 VF 的使用體驗介於二者之間但售價卻是最貴的,1000
  • 2020年深度學習如何挑選GPU?這篇 GPU 最全攻略請查收
    > 16-bit capability > Tensor Cores > FLOPs2 如何選擇NVIDIA/AMD/GoogleNVIDIA的標準庫使在CUDA中建立第一個深度學習庫變得非常容易。
  • Too much fusion?
    新東方網>英語>英語學習>閱讀寫作>正文Too much fusion?49 來源:cityweekend.com 作者: With its industrial dining room filled with overstuffed powder blue furniture, MTL Fusion had us a bit
  • VMware虛擬機 軟體安裝及使用方法說明
    一、安裝vmware  安裝vmware很簡單的,我只是說說我的鬱悶事。  安裝vmware workstation我遇到的問題:」win2003 server標準版上無法安裝vmware workstation5.5.3 ? 「 當時我在cu上發貼問過。
  • 基於極速分析技術的數據共享平臺
    本平臺具有如下創新點:項目上線多個月以來,運行效果良好,目前已經應用在簡訊營業廳、CRM瓶頸應用、經分報表平臺、大數據共享等多個業務場景。基於此平臺,營業資料庫CPU負載在月底月初降低5%以上。 本項目主要是為了有效整合分散異構的信息資源,消除「信息孤島」現象,提高企業的信息化水平。
  • VMware今年到底會放出多少大招?
    VMware 宣布與英偉達(NVIDIA)一起為 VMware Cloud on AWS推出基於NVIDIA GPU 的加速服務給關注 AI 計算領域的朋友們以及正在應用 AI 技術的企業送來了一波真驚喜
  • 使用GPU.js改善JavaScript性能
    https://gpu.rocks你是否曾經嘗試過運行複雜的計算,卻發現它需要花費很長時間,並且拖慢了你的進程?有很多方法可以解決這個問題,例如使用web worker或後臺線程。高性能計算是使用GPU.js的主要優勢之一。如果你想在瀏覽器中進行並行計算,而不了解WebGL,那麼GPU.js是一個適合你的庫。為什麼要使用GPU.js為什麼要使用GPU執行複雜的計算的原因不勝枚舉,有太多的原因無法在一篇文章中探討。以下是使用GPU的一些最值得注意的好處。GPU可用於執行大規模並行GPGPU計算。
  • 2020 年深度學習如何挑選 GPU?這篇 GPU 最全攻略請查收
    > 16-bit capability > Tensor Cores > FLOPs2 如何選擇NVIDIA/AMD/GoogleNVIDIA的標準庫使在CUDA中建立第一個深度學習庫變得非常容易。
  • PyTorch中使用DistributedDataParallel進行多GPU分布式模型訓練
    例如,如果你要使用兩個GPU和32的批處理大小,一個GPU將處理前16條記錄的向前和向後傳播,第二個處理後16條記錄的向後和向前傳播。這些梯度更新然後在gpu之間同步,一起平均,最後應用到模型。(也可以結合使用這些技術,例如同時使用模型和數據並行化,但這是一個高級主題,我們不在這裡介紹)因為這篇文章是對DistributedDataParallel並行API的介紹,所以我們不會再進一步討論模型並行化的細節——但請關注以後關於這個主題的文章!
  • 如何使用Vmware安裝虛擬機
    環境搭建物理機: win10虛擬機軟體:VMware Workstation Pro15.2虛擬機作業系統: win7 64位步驟:安裝vmware虛擬機,授權這裡不多說,自己去百度 很多密鑰,當然也可以來群裡要下載系統鏡像,我選擇的是:cn_windows_7_ultimate_with_sp1
  • 2020年深度學習如何挑選 GPU?這篇 GPU 最全攻略請查收
    以下是針對不同深度學習架構的一些優先準則:Convolutional networks and Transformers: Tensor Cores > FLOPs > Memory Bandwidth > 16-bit capabilityRecurrent networks: Memory Bandwidth
  • 基於Ethereum塊鏈網絡的智能合約平臺bitJob介紹
    打開APP 基於Ethereum塊鏈網絡的智能合約平臺bitJob介紹 發表於 2019-06-03 14:06:05 bitJob是一項前景光明立足於社會的項目,基於Blockchain技術,旨在為學生的課外兼職和工作經驗進行改革 旨在改變學生的生活方式,並在學習中獲得職業經驗。
  • 《私塾小課堂》fusion 360 導入的使用 03
    使用fusion360時,我們可以使用兩種方式來導入文件,今天,我們通過這篇文章來介紹一下這兩種方法,並介紹一下兩種方法的使用場景。現在我們先介紹第一種方法,這種方法非常的簡單,我們先打開fusion360,進入主界面:先打開上方的文件,然後選擇從文件新建設計。
  • Ubuntu下如何安裝VMware Tools
    在工作中,很多人都會使用到虛擬機,在虛擬機安裝系統,但是裝完系統之後,有很多不便,通過VMware Tools才能解決這些問題,下面小編給大家介紹一下如何在Ubuntu中安裝VMware Tools!首先,點擊依次虛擬機菜單欄中的【虛擬機】-->【安裝VMware Tools】;等待幾秒鐘後,在Ubuntu系統中會自動出現如何內容;如果是redhat,可以直接在這個文件夾中打開【Terminal】,對這些文件進行操作,但是Ubuntu中不能直接打開終端,我們可以將這些文件複製到桌面,然後在終端中使用命令【cd Desktop】進入桌面,操作這些文件