1. 程式人生 > >【MindSpore】Docker上成功使用MindSpore1.0.0的GPU版本

【MindSpore】Docker上成功使用MindSpore1.0.0的GPU版本

本文是在宿主機Ubuntu16.04上安裝Docker(nvidia-docker),併成功進行MindSpore1.0.0的GPU訓練;

  • Ubuntu 16.04
  • Docker
  • Nvidia-docker (cuda:10.1-base)----可使用GPU的docker容器
  • mindspore-gpu:1.0.0 Dokcer hub上配置好的mindspore-gpu映象

一、 先講述成功的流程
【1】mindspore官網GPU安裝教程檢視具體流程

  • 系統需要ubuntu18.04,但是我的ubuntu系統版本是16.04,因為是多人共用系統,不能直接升級系統,只能通過安裝docker的方式;
cat /proc/version     # 使用此命令檢視系統版本

【2】安裝Docker—我的系統已安裝docker
這裡提供一篇參考文章:在ubuntu16.04上安裝docker的文章

docker version   # 宿主機內執行,用於檢視docker是否安裝成功

 

【3】安裝nvidia-docker

  • 需要先確認已安裝了docker 和 nvidia-driver
nvidia-smi   # 檢查nvidia-driver 是否安裝
  • 1

  • 為什麼需要安裝nvidia-docker
nvidia-docker是一個可以使用GPU的docker,nvidia-docker是在docker上做了一層封裝,
通過nvidia-docker-plugin,然後呼叫到docker上,
其最終實現的還是在docker的啟動命令上攜帶一些必要的引數。
因此在安裝nvidia-docker之前,還是需要安裝docker的。

docker一般都是使用基於CPU的應用,而如果是GPU的話,就需要安裝特有的硬體環境,
比如需要安裝nvidia driver。
所以docker容器並不直接支援Nvidia GPU。
為了解決這個問題,最早的處理辦法是在容器內部,全部重新安裝nvidia driver,
然後通過設定相應的裝置引數來啟動container,然而這種辦法是很脆弱的。
因為宿主機的driver的版本必須完全匹配容器內的driver版本,這樣導致docker image無法共享,
很可能本地機器的不一致導致每臺機器都需要去重複操作,這很大的違背了docker的設計之初。

為了使docker image能很便利的使用Nvidia GPU,從而產生了nvidia-docker,
由它來製作nvidia driver的image,這就要求在目標機器上啟動container時,確保字元裝置以及驅動檔案已經被掛載。
nvidia-docker-plugin是一個docker plugin,被用來幫助我們輕鬆部署container到GPU混合的環境下。
類似一個守護程序,發現宿主機驅動檔案以及GPU 裝置,並且將這些掛載到來自docker守護程序的請求中。
以此來支援docker GPU的使用。
  • 安裝nvidia-docker2.0過程 安裝nvidia-docker2.0官方教程

1、ubuntu系統移除nvidia-docker 1.0


sudo docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f

sudo apt-get purge nvidia-docker

2、安裝依賴包

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update


3、安裝nvidia-driver2.0

4、驗證nvidia-docker安裝成功;
docker run --runtime=nvidia --rm nvidia/cuda:10.1-base nvidia-smi

【4】拉取mindspore-gpu:1.0.0映象Dokcer hub上配置好的mindspore-gpu映象

【5】注意:此處一定是使用nvidia-docker run 命令生成新容器,並直接python進入編譯環境即可(映象mindspore-gpu中已安裝python3.7.5);

# 原docker命令生成新容器(mindspore/mindspore-gpu:1.0.0 是映象名)
docker run -it mindspore/mindspore-gpu:1.0.0  /bin/bash

# 現nvidia-docker命令生成新容器
nvidia-docker run -it mindspore/mindspore-gpu:1.0.0  /bin/bash
  • 1
  • 2
  • 3
  • 4
  • 5

直接執行mindspore官網提供的程式碼,驗證是否成功;

import numpy as np
from mindspore import Tensor
from mindspore.ops import functional as F
import mindspore.context as context

context.set_context(device_target="GPU")   #  此處一定要注意將裝置改為GPU,原始碼是Ascend
x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(F.tensor_add(x, y))

 

若出現以下結果,則安裝驗證通過;

二、這裡是踩過的坑

【1】最開始是直接在docker上安裝顯示卡驅動等,因為我的宿主機nvidia-driver是418.39版本,但是docker容器內安裝的是推薦的nvidia-driver450版本,兩者好像不相容,中間一直各種出錯;
參考至:
【Docker】在docker中安裝顯示卡驅動、CUDA、CUDNN等

【2】得知有nvidia/cuda映象,但是還是需要安裝nvidia-docker;

【3】加入mindspore官網qq群:871543426 --有專業人員可幫忙解答問題;
在群裡問疑惑,有人解答說有mindspore-gpu的映象,簡直太好用了。

 

&n