亞馬遜、阿里雲等提供的GPU計算服務,底層是個什麼樣的原理?

問題1:虛擬機有辦法使用cuda,從而加速tensorflow、caffe等框架嗎?

目前只知道docker可以,虛擬機好像不行吧?他們用的不是虛擬機嗎?

問題2:多個人動態共享多個GPU資源,是什麼樣的分配方案?怎樣分配?


用的是虛擬機,可參考 Xen - Wikipedia


虛擬化的話,常見的有Xen和VMware EXSI。不知是什麼原因,伺服器大多選了Xen。(也許是vmware報價太高?

Linux系統下一切皆文件,顯卡驅動也不例外。因此不虛擬化只隔離的方案也是有的。

nvidia-docker的話,更適合於部署應用。資源分離上,LXC是一個不錯的選擇。 @陳樂群 有一篇博文介紹了這個,https://abcdabcd987.com/setup-shared-gpu-server-for-labs/ ,細緻的介紹了實踐過程。


「亞馬遜、阿里雲等提供的GPU計算服務,底層是個什麼樣的原理?」

單純虛擬化技術的話,建議看看 Xen (虛擬機體驗之 Xen 篇 -- 令人腦洞大開的奇異架構)和 KVM(KVM虛擬化學習總結之簡介 - 符方春的個人頁面)介紹。

GPU 虛擬化屬於 PCIe 設備虛擬化,有多種多樣的實現。

先看亞麻的 G2 實例(Amazon EC2實例類型-EC2虛擬雲伺服器託管-AWS雲服務):

這裡用的 GPU 為 Grid K2,是 Nvidia 專門面向虛擬化推出的,詳細資料看 http://www.nvidia.cn/content/grid/pdf/GRID_K2_BD-06580-001_v02.pdf 。

亞麻後續推出的 P2 實例

使用了 K80 GPU,這個只能是 pass through 方式。

為什麼 Nvidia 面向虛擬化的 K2 會被面向計算的 K80 取代?有待真相帝解密。

阿里雲最早是物理機,看下 G2 和 G4 的情況(高性能計算HPC_數據預測_數據分析-阿里雲):

物理機沒有多用戶共享,若是小白用戶,程序跑不滿計算資源,錢就嘩嘩溜走了。

後來看到阿里雲又推出了帶 GPU 的 ECS 實例(阿里雲 - 彈性計算)

看上去就是把上面的 G4 物理機做了虛擬化之後的產物。(G2 虛擬化的產物是啥?)。由於 M40 也是 Nvidia 面向計算的產品,虛擬化也只能走 pass through 了。

除了 Nvidia GPU,阿里雲也有 AMD GPU,即 GA1 實例:

A 卡在虛擬化支持方面貌似比 N 卡更進一步:

http://cms-bucket.nosdn.127.net/catchpic/2/2f/2f2f6febb4daecc6e51e9c5f7fea7e7b.png?imageViewthumbnail=550x0

支持 SR-IOV 虛擬化,就能真正實現多用戶共享同一塊 GPU 了。網上找了一張 pass through 和 SR-IOV 的區別圖,以網卡作為例子:

圖片來源:KVM 介紹(4):I/O設備直接分配和 SRIOV [KVM PCI/PCIe PassThrough SRIOV]

「問題1:虛擬機有辦法使用cuda,從而加速tensorflow、caffe等框架嗎?」

如前所述,虛擬機可以通過 pass through 或 SR-IOV 使用 host GPU 資源,看到的設備與你在 host 上看到的是相同型號設備,所以可以像在 host 物理機上一樣安裝驅動、CUDA Toolkit、Caffe/TensorFlow……。

pass through 是簡單粗暴的解法,不支持多用戶共享,也不支持 host 和 vm 共享,即,一旦 pass through 到 vm,你 host 上一切 GPU 使用必須停止(拔掉 pass through GPU 外接顯示器,卸載驅動),否則會引起宕機。

「目前只知道docker可以,虛擬機好像不行吧?他們用的不是虛擬機嗎?」

docker 裡面 GPU 用的也是 pass through,和虛擬機 pass through 類似,不支持多用戶共享。

「問題2:多個人動態共享多個GPU資源,是什麼樣的分配方案?怎樣分配?」

多個人動態共享單個 GPU 資源就是 SR-IOV 要做的事情。目前顯卡對 SR-IOV 的支持還比較初級,估計分配方案也是固定的,有待進一步技術文檔核實。

多個人動態共享多個 GPU 資源就是 MR-IOV 技術,目前 GPU 還不支持。


更正一下@李沐

的太簡潔的回答。

AWS 是 XEN。

ALIYUN 是 KVM 虛擬化+ pci-e透傳,也有物理機。


AWS 是 xen. 因為resource 有限,如果你需要開給support 開ticket 申請。大概三天能下來。


回答第二個問題,阿里亞馬遜和英偉達有合作,基於英偉達GRID解決方案提供基於英偉達GPU的顯卡虛擬化方案,GRID代理VM和GPU的對話。 GRID請見:GRID GPU | GPU 虛擬化 | NVIDIA GRID | NVIDIA


pcie 設備可以從物理機到虛擬機內透傳 passthrough


虛擬機不可以使用CUDA


肯定是虛擬機吧。


推薦閱讀:

如何配一台深度學習工作站,主要用於CNN圖像分類,預算2W以下。

?
有沒有雙顯卡筆記本在Ubuntu下使用cuda的解決方案?
有哪些適用於個人或小型團隊開發者的物理引擎?
IOS 並行編程 是學習 OpenCL還是 CUDA?
你有什麼特別的GPU編程debug技巧?

TAG:雲計算 | CUDA | 深度學習DeepLearning |