前言

我放弃了,使用miniconda配置一个CUDA的编译环境实在是太复杂了,无数个未曾设想的bug,让我心力交瘁。我决定使用docker来解决这个问题,它总归是能够有相当于root的权限的,而且这个玩意还没人能管,我唯一需要防止的就是docker卡死的情况,谨慎地使用root权限。

回头来想,去年给自己找个实习真是为自己奠定了深度学习领域的技术基础,又是conda又是docker,甚至C++也是从那个时间开始接触的,那一次实习,三个月的时间,可能我三年学到的技术都赶不上啊!

感谢实验室的陈芫师姐!

师姐保留了看似非常无用的docker组件,给我留下 了可以操作的空间。

快速使用

docker hub就像github一样,也是一个在线的容器共享平台,上面有很多现成的可以直接使用的容器配置,不用自己写Dockerfile就能直接运行,使用这些容器前,只需要先抓取镜像并运行就可以了,主要通过以下两部分的命令:

抓取镜像

1
docker pull tschenboffee/cuda-dev-tool:<tag>

抓取的镜像将存在docker的镜像列表中,并通过唯一的ID码保存,对于全部本地的镜像,可通过ID码或者name:tag的方式访问,否则docker将尝试在docker hub上寻找对应的镜像。

运行容器

1
docker run -it --name boffee_1 --user 0 --gpus all -v /disk527/Datadisk/xdy_cbf:/disk527/Datadisk/xdy_cbf 54874037447e  /bin/bash

运行容器通过docker run子命令进行,值得注意的是,最好引入一个--name选项,以便于查找运行后的容器名,同时,docker只能在容器第一次运行时才能完成本地目录的挂载。此处需要将全部用到的本地目录挂载映射至docker容器中,使用-v选项。

构建容器

如果需要对容器的软件组成和配置文件有更多个性化的要求,此时可以使用Dockerfile配置文件完成对自定义docker的配置与构建,一个简单的Dockerfile文件如下:

1
2
3
FROM nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip3 install torch torchvision

这个Dockerfile文件的作用是构建一个基于nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04的镜像,然后在这个镜像上安装python3和torch,这样就可以在这个镜像上运行torch的程序了。

常用命令

  1. Dockerfile文件中最常用的是RUN命令,该命令可视为在构建好的容器中的命令行中运行后续指令,注意后续指令不得换行,同一个RUN命令的后续指令也不能超过两行,换行可以使用&&\连接符。
  2. COPY命令用于将本地文件复制到容器中,COPY命令的格式为COPY <src> <dest>,其中<src>是本地文件的路径,<dest>是容器中的路径。
  3. CMD命令用于在容器启动后执行的命令,CMD命令的格式为CMD <command>,其中<command>是容器启动后要执行的命令,可以使用CMD ["/bin/bash"]命令设置默认的shell。
  4. ENV命令可用于配置临时要使用的环境变量。
  5. 几个常用的配置镜像源的命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
RUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse" > /etc/apt/source.list && \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/source.list && \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/source.list && \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/source.list && apt update && apt upgrade -y
RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ && \
conda config --set show_channel_urls yes
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN echo "# frequently used alias command" >> /home/boffee/.bashrc && \
echo "alias pyd='python -Xfrozen_modules=off -m debugpy --listen 127.0.0.1:5678 --wait-for-client'" >> /home/boffee/.bashrc && \
echo "alias ll_mnt='ll /disk527/Datadisk/xdy_cbf'" >> /home/boffee/.bashrc && \
echo "alias cd_mnt='cd /disk527/Datadisk/xdy_cbf'" >> /home/boffee/.bashrc && \
chown boffee:boffee /home/boffee/.bashrc