基於Docker安裝的MindSpore-1.2 GPU版本


技術背景

在前面一篇博客中,我們介紹過MindSpore-CPU版本的Docker部署以及簡單的案例測試,當時官方還不支持GPU版本的Docker容器化部署。經過MindSpore團隊的努力,1.2.0版本的MindSpore-GPU終於推出了Docker版本的安裝解決方案:

在本文中我們將針對這一方案進行直接的測試,並補充其中一些很有可能被忽略的細節,接下來直接上手。

更換華為雲鏡像源

在華為雲官方提供的鏡像源倉庫中找到適配自己系統的源,然后按照其中的指導進行配置。這里我們本地使用的是Ubuntu 20.04版本,可以按照如下的方法更新apt的源:

root@ubuntu2004:~# cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
root@ubuntu2004:~# sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
root@ubuntu2004:~# sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
root@ubuntu2004:~# apt-get update

更新鏡像源會需要一定的時間,等待即可,這一步一般不會出什么問題。

MindSpore-GPU-Docker的安裝

這里可以參考MindSpore官方的指導文檔一步步的進行操作,其中遇到一些非常規問題時我們再看看解決的策略:

root@ubuntu2004:~# DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID)
root@ubuntu2004:~# curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
gpg: 找不到有效的 OpenPGP 數據。

第二步的操作時非常容易出問題的地方,因為本地的主機列表無法解析這個鏈接的ip地址。一開始我跟參考鏈接1的作者類似的,以為是需要上Google才能夠解決此類的問題,但是后來嘗試了一下參考鏈接1中的解決方案,發現是可以生效的,這里直接演示解決的方法:

root@ubuntu2004:~# vi /etc/hosts # 在文檔的最后面加上下面的四行ip地址與域名相對照的列表
root@ubuntu2004:~# cat /etc/hosts | grep nvidia # 查詢修改情況
185.199.108.153 nvidia.github.io
185.199.109.153 nvidia.github.io
185.199.110.153 nvidia.github.io
185.199.111.153 nvidia.github.io

經過上述的簡單配置之后,繼續MindSpore-GPU-Docker的安裝步驟:

root@ubuntu2004:~# curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
OK
root@ubuntu2004:~# curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
deb https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /
#deb https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/$(ARCH) /
#deb https://nvidia.github.io/nvidia-container-runtime/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu18.04/$(ARCH) /
root@ubuntu2004:~# apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2
root@ubuntu2004:~# systemctl restart docker

到這里所需要的依賴就已經安裝完成了,最后還有一步是需要修改docker的配置文件,使得MindSpore可以使用Docker的nvidia-container-runtime

root@ubuntu2004:~# vi /etc/docker/daemon.json # 修改成如下所示的配置
root@ubuntu2004:~# cat /etc/docker/daemon.json 
{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

root@ubuntu2004:~# systemctl daemon-reload # 重新加載配置
root@ubuntu2004:~# systemctl restart docker # 重啟Docker

上述配置都完成之后,終於到了最后一步,使用Docker來拉取MindSpore的官方鏡像:

root@ubuntu2004:~# docker pull swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu:1.2.0
1.2.0: Pulling from mindspore/mindspore-gpu
6e0aa5e7af40: Pull complete 
d47239a868b3: Pull complete 
49cbb10cca85: Pull complete 
4450dd082e0f: Pull complete 
b4bc5dc4c4f3: Pull complete 
5353957e2ca6: Pull complete 
f91e05a16062: Pull complete 
7a841761f52f: Pull complete 
698198ce2872: Pull complete 
05a2da03249e: Pull complete 
b1761864f72a: Pull complete 
29479e68065f: Pull complete 
4bf6be16ed12: Pull complete 
c429d95fc15b: Pull complete 
48c41c211021: Pull complete 
349cae3c1ede: Pull complete 
768237cdcd4d: Pull complete 
2fd2faf6c353: Pull complete 
268f4496a02c: Pull complete 
e962d4980323: Pull complete 
f1d280968a28: Pull complete 
bc3e02707e81: Pull complete 
Digest: sha256:3318c68d63cfe110e85d7ed93398b308f8458624dc96aad9a4d31bc6d345daa7
Status: Downloaded newer image for swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu:1.2.0
swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu:1.2.0

關於Docker這里要多說兩點:

  1. Docker在Ubuntu20.04上面的安裝不是apt-get install docker,而是apt-get install docker.io
  2. 關於更多Docker的使用示例,可以參考這些以往的博客(博客1博客2博客3博客4博客5)。

MindSpore-GPU的測試

測試用例同樣也來自於MindSpore的官方文檔,這里只是額外補充了一個本地的目錄映射,將測試目錄/home/dechin/projects/mindspore/test/映射為MindSpore容器中的/home目錄,這樣在容器內操作所導致的文件變更都會在本地測試目錄下同步。需要注意的是,這里的目錄映射只能采用絕對路徑而不能采用相對路徑:

dechin@ubuntu2004:~/projects/mindspore/test$ sudo docker run -it -v /dev/shm:/dev/shm -v /home/dechin/projects/mindspore/test/:/home --runtime=nvidia --privileged=true swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu:1.2.0 /bin/bash
[sudo] dechin 的密碼: 
root@0b44a5a66fca:/# cd /home/
root@0b44a5a66fca:/home# vim mindspore_test.py # python文件的具體內容在后面
root@0b44a5a66fca:/home# python mindspore_test.py 
[[[[2. 2. 2. 2.]
   [2. 2. 2. 2.]
   [2. 2. 2. 2.]]

  [[2. 2. 2. 2.]
   [2. 2. 2. 2.]
   [2. 2. 2. 2.]]

  [[2. 2. 2. 2.]
   [2. 2. 2. 2.]
   [2. 2. 2. 2.]]]]

如下所示是剛才在容器中用於測試的python代碼:

# mindspore_test.py

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

context.set_context(mode=context.PYNATIVE_MODE, device_target="GPU")

x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.add(x, y))

我們可以看到最終是成功的運行了,說明MindSpore-GPU的Docker容器化環境部署成功。

總結概要

繼上一篇文章介紹了MindSpore的CPU版本的Docker容器化部署之后,MindSpore官方團隊推出了MindSpore的GPU版本的Docker容器化部署方案,本文針對這一方案進行了安裝測試,並且對於其中一些安裝的時候可以遇到的問題的細節進行了處理。之所以采用容器化的解決方案,主要是為了做到SDK環境與編程環境的隔離,釋放本地環境配置與部署的壓力。當然,也使得本地的開發環境更加的“干凈”。

版權聲明

本文首發鏈接為:https://www.cnblogs.com/dechinphy/p/dmg.html
作者ID:DechinPhy
更多原著文章請參考:https://www.cnblogs.com/dechinphy/

參考鏈接

  1. https://blog.csdn.net/weixin_43002433/article/details/108888927
  2. https://www.cnblogs.com/dechinphy/p/mindspore.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM