最近参加了CCF BDCI 2021的一个比赛,基于MindSpore AI框架实现零售商品识别,这个比赛中使用了华为的新框架,MindSpore,这个框架的环境特别难配置。CPU版本又不支持调试模型,GPU版本的要改底层的glibc,gcc等版本,要是使用的是服务器,这些也不敢折腾,要是改不成功,服务器崩了就很难受,还要重新装服务器系统。因此去网上查找看看有没有比较好的方法,能不用更改这些底层的东西,就能很方便的使用这个框架。
于是发现了docker,下面简要介绍下docker配置MindSpore1.3GPU版本的一些步骤。
我的环境是Ubuntu 18 LTS版本
NVIDIA-docker是docker的升级版,让docker可以只配置宿主机的NVIDIA驱动,然后在docker容器内部直接调用GPU,可以
使用NVIDIA-docker虽然不用配置CUDA和cudnn,但是NVIDIA驱动是必须的,首先看下驱动有没有安装成功。
第一步
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
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
获取sudo权限后,一下子全部粘到shell就行了
sudo apt-get install nvidai-docker2
然后输入docker version就能查看docker是否安装成功。
出现上图即为安装成功。
最后还有一步是需要修改docker的配置文件,使得MindSpore可以使用Docker的nvidia-container-runtime:
vim /etc/docker/daemon.json
编辑成如下形式
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
经过配置环境后,镜像直接拉去就行了。
docker pull swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu:1.3.0
这里安装的是1.3版本,其他版本的镜像请查看官网
到这里,输入 docker images
命令,如果出现有镜像,则表示成功实现
※这里解释下docker里面的几个概念
镜像和容器,这里可以认为镜像(images)是你安装Ubuntu时做的系统盘,容器(container)是你用系统盘安装的系统,每个容器(container)都是一个新的系统。
启动容器命令
sudo docker run -it -v /dev/shm:/dev/shm -v /home/dechin/projects/mindspore/test/:/home -v /home/code/mindspore:/home/Downloads --name ms -p 22:22 --runtime=nvidia --privileged=true swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu:1.3.0 /bin/bash
用到了几个参数,在使用docker时会比较的好用
这是一个很长的命令 解释下这个是什么意思
-it
:指的是用终端的方式进行交互
-v
:表示将宿主机的目录挂载到docker内,这样就能之间在宿主机编辑修改文件,直接将数据集挂载到容器里,在容器内部就能直接运行了,其中冒号前面的是本地的目录,冒号后面是挂载到容器里面的目录。
--name
:给容器起个名字
-p
:将宿主机的端口号和容器之间的端口号建立映射
输入 docker ps -a
命令,就可以查看你启动的容器了
测试代码
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))
如果运行成功,就说明GPU版本的MindSpore环境安装成功了。
好啦,进入到你挂在的目录下,就可以进行进行训练任务了
如果提示container xxxxx is not running
docker start CONTAINER ID
docker exec -it CONTAINER ID /bin/bash
就行了,其中, CONTAINER ID可以通过docker ps -a
命令查看。
附上一些比较常用的docker命令
docker ps -a #show all docker
docker images #show local docker
docker start ID
docker stop ID
docker attach ID
exit = ctrl +d
docker exec -it c62d0ebaf99d /bin/bash # 进入docker
docker rm ID # 删除容器
docker rmi IMAGES # 删除镜像
https://blog.csdn.net/nidongla/article/details/116495024