当前位置 博文首页 > 陆言君:基于Docker安装的MindSpore-1.2 GPU版本

    陆言君:基于Docker安装的MindSpore-1.2 GPU版本

    作者:陆言君 时间:2021-05-06 18:17

    继上一篇文章介绍了MindSpore的CPU版本的Docker容器化部署之后,MindSpore官方团队推出了MindSpore的GPU版本的Docker容器化部署方案,本文针对这一方案进行了安装测试,并且对于其中一些安装的时候可以遇到的问题的细节进行了处理。之所以采用容器化的解决方案,主要是为了做到SDK环境与编程环境的隔离,释放本地环境配置与部署的压力。当然,也使得本地的开发环境更加的“干净”。

    技术背景

    在前面一篇博客中,我们介绍过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
    bk
    下一篇:没有了