以 ubuntu16.04,cuda10.1 为例
1.准备工作
- ubuntu 中安装对应 cuda 版本的显卡驱动,参考链接
- 安装了 docker 和 toolkits,参考链接
- 免 sudo 使用 docker,参考链接
- 测试 docker 的 --gpus 参数是否可用,不可用参考上边链接重新安装 docker
docker run --help | grep -i gpus
2.拉取官方镜像
需要在官方拉取一个封装好 cuda 和 cudnn 的镜像作为初始镜像
- 去 docker hub 寻找需要的镜像
Ctrl+f查找关键词,比如需要cuda10.1+cudnn8,查找 10.1-cudnn8
- 复制 docker pull 命令,在终端拉取镜像
docker pull nvidia/cuda:10.1-cudnn8-devel-ubuntu16.04
下载可能会很慢,提前对 docker pull 进行加速,参考链接
3.创建容器
- 查看当前存在的镜像
docker images
nvidia/cuda 为刚刚拉取的镜像,注意镜像的REPOSITORY,TAG,IMAGE ID
- 通过镜像创建容器,并挂载本地文件夹,文件夹路径根据实际情况写
docker run --gpus all --shm-size 8 -it -v /home/kkjsk/projects:/projects 1e33220823f3 /bin/bash
通过镜像ID创建容器
- 或者
docker run --gpus all -it -v /home/name/projects:/projects nvidia/cuda:10.1-cudnn8-devel-ubutnu16.04 /bin/bash
通过 REPOSITORY:TAG 创建容器
/home/name/projects:/projects 意思是将本地的 /home/name/projects 路径挂载到容器中的 /projects 下,可以自己命名
成功创建并运行了容器,并且命令行输入ls,可以看到挂载的文件夹
- 检测是否可以调用显卡驱动
nvidia-smi
- 检测cuda是否可用
nvcc -V
都没问题,则容器可以成功调用显卡,并使用 cuda
4.安装python
官方镜像中没有安装python,也没有pip,因此需要自行在容器中安装所需的python版本,参考源码安装python
- 注意要把下载的源码包放到挂载的文件夹之下,不然在容器中找不到
- 在容器中安装 python,去掉命令行中的sudo
- 有的帖子会修改 python 安装路径,在 docker 容器中不建议修改
5.打包
可以直接打包一个基础环境,也可以将代码所需的依赖包安装好以后再打包,打包方便移植
容器保存为新镜像,将镜像打包
- 另起终端,查看当前存在的容器
docker ps -a
- 通过容器创建新的镜像
docker commit b0a9e5a5a411(容器ID) kkjsk/docker:python(新镜像的DREPOSITORY:TAG)
- 查看新创建的镜像
docker images
可以看到镜像 kkjsk/docker:python 成功创建
- 将镜像保存为本地压缩包,后缀tar
docker save kkjsk/docker:python(REPOSITORY:TAG) -o cuda10.1_docker.tar(压缩包名)
之后可以在本地看到保存的压缩包
6.导入镜像
在其他电脑使用打包好的镜像时,需要先通过压缩包导入镜像
docker load --input cuda10.1_docker.tar