在 Kubernetes 安裝 Orion vGPU 使用 TensorFlow 運行深度學習訓練

概覽

本文將使用 KubeSphere 容器平臺,在 Kubernetes 上部署 Orion vGPU 軟件進行深度學習加速,並基於 Orion vGPU 軟件使用經典的 Jupyter Notebook 進行模型訓練與推理。node

在開始安裝 Orion vGPU 和演示深度學習訓練以前,先簡單瞭解一下,什麼是 vGPU 以及什麼是 Orion vGPUpython

什麼是 vGPU

vGPU 又稱 虛擬 GPU,早在幾年前就由 NVIDIA 推出了這個概念以及相關的產品。vGPU 是經過對數據中心(物理機)的 GPU 進行虛擬化,用戶可在多個虛擬機或容器中 共享該數據中心的物理 GPU 資源,有效地提升性能並下降成本。vGPU 使得 GPU 與用戶之間的關係再也不是一對一,而是 一對多git

爲何須要 vGPU

隨着 AI 技術的快速發展,愈來愈多的企業開始將 AI 技術應用到自身業務之中。目前,雲端 AI 算力主要由三類 AI 加速器來提供:GPU,FPGA 和 AI ASIC 芯片。這些加速器的優勢是性能很是高,缺點是 成本高昂,缺乏異構加速管理和調度。大部分企業因沒法構建高效的加速器資源池,而不得不獨佔式地使用這些昂貴的加速器資源,致使 資源利用率低,成本高github

以 GPU 爲例,經過創新的 vGPU 虛擬化技術,可以幫助用戶無需任務修改就能透明地共享和使用數據中心內任何服務器之上的 AI 加速器,不但可以幫助用戶提升資源利用率,並且能夠 極大便利 AI 應用的部署,構建數據中心級的 AI 加速器資源池web

什麼是 Orion vGPU

Orion vGPU 軟件由 VirtAI Tech 趨動科技 開發,是一個 爲雲或者數據中心內的 AI 應用、CUDA 應用提供 GPU 資源池化、GPU 虛擬化能力 的系統軟件。經過高效的通信機制鏈接應用與 GPU 資源池,使得 AI 應用、CUDA 應用能夠不受 GPU 物理位置的限制,部署在雲或者數據中心內任何一個 物理機、Container 或者 VM 內。後端

Orion vGPU 軟件架構

因爲咱們將在 KubeSphere 容器平臺上部署 Orion vGPU 軟件至 Kubernetes,在部署前咱們先簡單瞭解一下 Orion vGPU 的軟件架構。api

Orion Client

Orion Client 爲一個運行時環境,模擬了 NVidia CUDA 的運行庫環境,爲 CUDA 程序提供了 API 接口兼容的全新實現。經過和 Orion 其餘功能組件的配合,爲 CUDA 應用程序虛擬化了必定數量的虛擬 GPU(Orion vGPU)。因爲 Orion Client 模擬了 NVidia CUDA 運行環境,所以 CUDA 應用程序能夠透明無修改地直接運行在 Orion vGPU 之上。bash

Orion Controller

Orion Controller 是一個長期運行的服務程序,其負責整個 GPU 資源池的資源管理。其響應 Orion Client 的 vGPU 請求,並從 GPU 資源池中爲 Orion Client 端的 CUDA 應用程序分配並返回 Orion vGPU 資源。該組件能夠部署在數據中心任何網絡可到達的系統當中,每一個資源池部署一個 Orion Controller。資源池的大小取決於 IT 管理的需求,能夠是整個數據中心的全部 GPU 做爲一個資源池,也能夠每一個 GPU 服務器做爲一個獨立的資源池。能夠認爲它就像一箇中介,幫忙溝通 Orion Client 和 Server。服務器

Orion Server

該組件爲一個長運行的系統服務,負責 GPU 資源化的後端服務。Orion Server 部署在每個物理 GPU 服務器上,接管本機內的全部物理 GPU。Orion Server 經過和 Orion Controller 的交互把本機的GPU加入到由 Orion Controller 管理維護的GPU資源池當中。微信

當 Orion Client 端應用程序運行時,經過 Orion Controller 的資源調度,創建和 Orion Server 的鏈接。Orion Server 爲其應用程序的全部 CUDA 調用提供一個隔離的運行環境以及真實 GPU 硬件算力。

場景演示

Orion vGPU 的使用包括如下三類場景:

  • 場景一:Docker 容器中使用本地節點 GPU 資源
  • 場景二:KVM 虛擬機中使用本地節點 GPU 資源
  • 場景三:在沒有 GPU 的節點上使用遠程節點上的 GPU 資源

本文僅對場景一進行演示說明,該場景很是適用於教學及推理場景,後續的文章會對場景三說明如何經過 RDMA 使用遠程節點 GPU 資源。

安裝 NVIDIA 驅動和插件

假設您已有 KubeSphere 集羣環境,那麼可參考 KubeSphere 官方文檔擴容一個 GPU 主機做爲新的 GPU 節點。本文使用了一臺 Ubuntu 18.04 的 GPU 節點經過 KubeSphere 加入了 Kubernetes 集羣,並在 GPU 節點安裝 NVIDIA 驅動和 NVIDIA Docker 插件,在本文中暫不對該步驟進行詳細說明。

安裝 Orion vGPU 軟件

經過安裝 Orion vGPU 軟件,容器得以使用 Orion vGPU 資源加速計算。安裝完成後,咱們將會在容器中運行與測試 TensorFlow 的部分深度學習訓練。

以下咱們可使用 KubeSphere 在 Kubernetes 之上容器化部署 Orion vGPU 的三個組件以及它的 Kubernetes Device Plugin。

安裝 Orion Controller

在上述已經對 Orion Controller 進行過介紹,它能夠部署在集羣的任意節點。通常說來,會經過選擇器讓 Controller 運行在指定的節點上,從而把 Controller 的 IP 地址肯定下來。本文爲了配置簡單,僅安裝在了 GPU 物理節點上:

(1)代碼克隆到集羣中任意主機節點本地。

$ git clone https://github.com/virtaitech/orion

(2)部署 Orion Controller,默認只部署一份 Orion Controller:

$ cd orion/orion-kubernetes-deploy
$ vi deploy-controller.yaml

添加節點選擇器,如上圖,保存。而後執行以下命令部署 Controller:

$ kubectl create -f deploy-controller.yaml

執行完成後在 KubeSphere 界面的 default 項目中能夠看到 Controller 的 Pod:

安裝 Orion Kubernetes Device Plugin

Orion Kubernetes device plugin 是符合 Kubernetes device plugin 接口規範的設備擴展插件。配合 Orion GPU 能夠無縫地在一個 Kubernetes 集羣裏添加 Oiron vGPU 資源,從而在部署應用的時候,在容器中使用 Orion vGPU。

以下,修改 deploy-plugin.yaml 文件,添加節點選擇器,使 Device Plugin 將以 DaemonSet 安裝在物理 GPU 節點上。

$ kubectl create -f deploy-plugin.yaml

執行完成後,等待一段時間,在 KubeSphere 界面的 default 項目中能夠看到 deploy-plugin 的 Pod。

安裝 Orion Server

Orion Server 將在物理 GPU 節點以 DaemonSet 形式部署,以部署支持 CUDA 10.0 的 Orion Server爲例。

$ vi deploy-server-cuda10.0.yaml

添加節點選擇器,使 Orion Server 安裝在物理 GPU 節點上。

修改後保存便可執行安裝:

$ kubectl create -f deploy-server-cuda10.0.yaml

執行完以後,等待一段時間,在 KubeSphere 界面的 default 項目中能夠看到 orion-server 的 Pod。

安裝 Orion Client 應用

Orion Client 將安裝在物理 GPU 節點,而且使用一個 Jupyter Notebook 做爲 Client 應用來使用 vGPU。在 deploy-client.yaml 中添加標籤,而且參考以下修改 args:

  • resource limit:能夠設置應用能使用的 virtaitech.com:gpu 的數目;
  • ORION_GMEM:容器內應用申請的vGPU顯存大小。
$ kubectl create -f deploy-client.yaml

執行完以後,等待一段時間,default 項目中能夠看到 orion-client 的 Pod。

新建一個 deploy-service.yaml 文件用來爲 orion-client 建立服務,內容以下:

kind: Service
apiVersion: v1
metadata:
name: orion-client
labels:
app: jupyter
annotations:
kubesphere.io/serviceType: statelessservice
spec:
ports:
- name: tcp-8888
protocol: TCP
port: 8888
targetPort: 8888
nodePort: 30110
selector:
app: jupyter
type: NodePort
externalTrafficPolicy: Cluster

其中 labels 與 deploy-client.yaml 中的 Pod 一致,NodePort 爲須要暴露的外網服務 而後執行以下命令建立服務:

$ kubectl create -f deploy-service.yaml

此時可經過外網訪問 Jupyter Notebook。查看 orion-client 的日誌拿到 token,便可登陸 Jupyter Notebook。

訓練一個簡單的 CNN 模型

如下將在 Jupyter Notebook 訓練一個簡單的 CNN 模型實現 mnist 手寫數字分類。

  1. 在 Jupyter Notebook 頁面點擊 new-python3
  1. mnist.txt 文件中的內容拷貝到上面新建的文件中。鼠標放到代碼上,點擊運行,運行結果以下:

提示:mnist.txt 文件下載地址:https://kubesphere-docs.pek3b.qingstor.com/files/AI/mnist.txt

  1. 訓練的過程當中,咱們能夠在宿主機上經過 nvidia-smi 工做監視物理 GPU 的使用狀況:
  1. 從圖中能夠看到,真正使用物理 GPU 的進程是 Orion Server 的服務進程  /usr/bin/oriond,而不是容器中正在執行 TensorFlow 任務的 Python 進程。這代表容器中的應用程序使用的是 Orion vGPU 資源,對物理 GPU 的訪問徹底由 Orion Server 所接管。

GPU 深度學習訓練測試:人臉識別

  1. 在 Jupyter 頁面上傳 facenet.tar 文件:

提示:facenet 下載地址:https://kubesphere-docs.pek3b.qingstor.com/files/AI/facenet.tar

  1. 進入 orion-client 容器:
$ kubectl exec -it orion-client-td2jl -n default /bin/bash
  1. 安裝 Python 依賴包:
$ pip3 install scikit-image==0.10
$ pip3 install numpy==1.16.0
  1. 解壓文件 facenet.tar 文件:
$ tar xvf facenet.tar
  1. 在 Jupyer 頁面進入 facenet/src,點擊 facecomp.ipynb
  1. 打開 facecomp.ipynb 後,鼠標放到代碼中,點擊運行,在提示輸入 model file path 時,輸入預訓練權重路徑 20180408-102900,按下 Enter 鍵:
  1. 提示輸入須要計算的照片時,輸入 a1.jpg a2.jpg b1.jpg b2.jpg c1.jpg c2.jpg (這裏隨機選擇了 VGGFace2 數據集中 3 我的共 6 張照片做爲示例),按下 Enter 鍵。

將計算並顯示 6 張人臉照片相互之間的距離,同一我的的照片,距離較近。以下圖所示:

  1. 訓練的過程當中,咱們能夠在宿主機上經過 nvidia-smi 工做監視物理 GPU 的使用狀況:
  1. 結論與上一個訓練相同,真正使用物理 GPU 的進程是 Orion Server 的服務進程  /usr/bin/oriond,代表容器中的應用程序使用的是 Orion vGPU 資源。

總結

本文經過 Step-by-step 向你們介紹了 vCPU,以及如何使用 KubeSphere 容器平臺 在 Kubernetes 之上安裝部署 Orion vGPU,並使用官方 TensorFlow 的兩個示例進行模型訓練與推理,最終演示了 vGPU 的第一個應用場景在 Docker 容器中使用本地節點 GPU 資源

充分證實了 vGPU 可以兼容已有的 AI 應用和 CUDA 應用,無需修改已有應用程序。而且,藉助 Orion vGPU 對 GPU 資源池的管理和優化,提升了整個雲和數據中心 GPU 的利用率和吞吐率。

後續咱們將推出第二篇文章並結合示例說明 vGPU 的另外一個典型應用場景 如何經過 RDMA 使用遠程節點 GPU 資源

參考

  • VirtAI Tech 官網
  • GitHub virtaitech/orion
  • NVIDIA 虛擬 GPU 技術


本文分享自微信公衆號 - KubeSphere()。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索