VMware Bitfusion GPU共享技術的應用場景
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. 使用cifar10資料集~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的示例指南》 。
我們嘗試以下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 Bitfusion Performance Best Practices Guide》
如果採用0.05個GPU支援單個任務,則一塊V100 GPU(32GB視訊記憶體)則可以同時支援20個併發tf_cnn_benchmarks任務。如果使用者希望增加更多的併發任務,則需要調整batch_size引數。在實際應用中,由於系統提供排隊機制,當單個任務執行時間不是很長的情況下,可以有更多的學生同時使用。
4.2 執行Python,並進入到互動命令列,執行相關命令
此類情形,我們需要首先申請遠端GPU資源,然後再執行相關的命令和指令碼,最後需要釋放遠端的GPU資源。相關的命令可以參考Bitfusion官方文件 - 《VMware vSphere Bitfusion 使用者指南》
在下面這個示例中,我們首先申請單塊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)中的穿戴用品的影像識別 -
在測試中,我們發現只需要配置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 安裝指南: VMware vSphere Bitfusion 使用者指南: 在 vSphere Bitfusion 上執行 TensorFlow 的示例指南: Bitfusion Jupyter Integration—It’s Full of Stars: https://blogs.vmware.com/vsphere/2020/08/bitfusion-jupyter-integration-its-full-of-stars.html 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557890/viewspace-2725928/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Debias 技術在金融推薦場景下的應用
- 淺析人臉識別技術應用場景
- 語音識別技術有哪些應用場景?
- 網路虛擬化技術與應用場景
- 實現人工智慧應用場景的關鍵技術人工智慧
- VMware的雲原生應用技術揭祕
- 釘釘協同引擎與應用場景技術探索
- 人臉識別技術的優勢和主要應用場景
- 資料湖Iceberg技術在小米的落地與場景應用
- 關於人工智慧技術應用場景的個人見解人工智慧
- GPU在AI業務中的核心技術與應用GPUAI
- 技術工坊|區塊鏈應用場景暢想(北京)區塊鏈
- 全息投影技術所適用的場景分析
- 總結一些開發語言對應的技術應用場景
- 區塊鏈技術公司 區塊鏈的應用場景思路剖析區塊鏈
- 捷訊技術分享雲伺服器ECS常用的應用場景?伺服器
- 圖技術在美團外賣下的場景化應用及探索
- 低延時音影片技術在OPPO雲渲染場景的應用
- tsv檔案在大資料技術棧裡的應用場景大資料
- 區塊鏈技術應用場景思考-去中心化儲存區塊鏈中心化
- FRAM的應用場景
- Numpy的應用場景
- redis的應用場景Redis
- Vuex 的應用場景Vue
- 數字對映:數字孿生技術的應用場景及作用
- 淺析WebRTC技術在智慧園區影片管理場景中的應用Web
- 【實操】小程式的應用場景分析——線下場景應用
- 渝中區:找準場景應用,區塊鏈技術加速落地區塊鏈
- 關於區塊鏈技術應用於版權領域的場景分析區塊鏈
- 數字孿生在能源電力行業的技術難點和應用場景行業
- 基於IM場景下的Wasm初探:提升Web應用效能|得物技術ASMWeb
- 《Oracle 高階複製技術介紹及應用》-HA技術-應用場景-實戰演練-圖文可下載Oracle
- SAP BTP MTA 應用的應用場景
- ES 應用場景
- Zookeeper應用場景
- 3.4 應用場景
- DDD應用場景
- 理解 Fragment 的應用場景Fragment