Docker 配置深度学习炼丹炉(初级)
1、拉取并创建容器
首先,我们需要创建基于 ubuntu:22.04
镜像的 Docker 容器用作炼丹炉的搭建。在创建容器的过程中,若本地不存在指定的镜像,Docker 会自动执行拉取操作,省去了手动使用 docker pull ubuntu:22.04
命令来拉取镜像的步骤。以下是创建容器的命令及其参数说明:
docker run -itd \
--gpus all \
--shm-size 16g \
--name container_name \
-v /home/workspace:/workspace \
ubuntu:22.04 /bin/bash
-itd
:-i
(--interactive
) 保持输入开放,-t
为容器分配一个伪终端,-d
(--detach
) 表示运行容器并让它在后台运行。--gpus all
: 将主机上所有的 GPU 分配给容器。也可以设置为device=0,2
指定 GPU 分配给 Docker 容器。--shm-size 16g
: 设置共享内存的大小,此例中设置为 16 GB,这对于需要大量内存的计算任务很有用。--name container_name
: 为创建的容器指定一个名称,让我们能够更容易地识别和引用容器。-v /home/workspace:/workspace
: 将主机上的/home/workspace
目录挂载到容器的/workspace
目录,用于数据持久化和传输。/bin/bash
: 容器启动后执行的命令,此处是启动 Bash 以便进一步操作。
如果创建容器后直接进入容器中,我们需要先使用 Ctrl + D
退出容器,并通过 docker container start <container ID>
命令重启容器,因为退出会导致容器停止运行。然后,使用 docker exec -it <container ID> /bin/bash
命令进入容器,在退出容器时,该方案仍会保持容器持续运行。
在上述命令中的 <container ID>
部分代表容器的标识。除了可以直接使用容器的 ID,你还可以使用容器的名称作为标识来执行命令,因为容器的名称在 Docker 中也是唯一的。
2、搭建炼丹炉环境
- Miniconda: 是 Anaconda 的精简发行版,提供了大量的软件包和强大的功能,同时具有良好的虚拟化性能,支持多种操作系统平台及高级功能,为需要广泛的第三方库和跨平台支持的用户提供了一个强大的基础。
- Miniforge: 是基于 Anaconda 的轻量级开源发行版,用于更小的体积和资源占用。它默认使用 Conda-forge 社区的包源,适合在有限资源下进行开发或快速搭建开发环境的选择,以及避免 Anaconda 定制包和商业许可的用户使用。
① 更新镜像源
为了提高软件包管理的效率和速度,我们需要替换默认的镜像源为阿里云镜像源,并执行必要的更新操作以确保系统的软件包保持最新状态。同时,为了提高操作效率,我们还需要安装一些常用的基础开发工具。
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
apt-get clean && \
apt-get update && \
apt-get install -y curl wget tree vim git
② 安装配置 Miniconda / Miniforge
接下来,我们通过安装 Miniconda 高效地实现 Python 项目的管理,它允许我们创建隔离的编程环境,从而管理不同项目所需的依赖项和包,这样可以有效地防止版本冲突和满足特定项目的需求。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 && \
rm Miniconda3-latest-Linux-x86_64.sh
首先,您需要使用以下命令来编辑您的 ~/.bashrc
文件:
vim ~/.bashrc
在文件末尾,您需要添加以下行,此操作将 Miniconda 目录添加到系统的 PATH 环境变量中,确保能够全局访问其执行命令:
export PATH="/opt/miniconda3/bin:$PATH"
另外,您也可以选择执行下面命令来自动完成该配置工作,这个命令将自动为您处理所有必要的设置项:
/opt/miniconda3/bin/conda init
完成这些更改后,您需要执行以下命令来应用 .bashrc
文件中的修改,并更新您当前的 shell 环境:
source ~/.bashrc
现在,我们已经成功安装并配置了 Miniconda,接下来,我们将介绍如何更新镜像源,以优化软件包下载速度和提升使用体验。我们可以通过下面命令指定将清华大学提供的镜像源地址添加到 conda 和 pip 配置来加速包现在下载安装速度:
/opt/miniconda3/bin/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \
/opt/miniconda3/bin/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
/opt/miniconda3/bin/conda config --set show_channel_urls yes && \
/opt/miniconda3/bin/pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
如果,您想在系统中安装 Miniforge,针对 conda-forge 社区优化的轻量级开源发行版,只需要在安装步骤执行下面安装命令即可:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh && \
bash Miniforge3-Linux-x86_64.sh -b -p /opt/miniforge3 && \
rm Miniforge3-Linux-x86_64.sh
紧接着,安装完成 Miniforge 后,接下来的步骤与之前相似,您只需要按照之前提到的 Miniconda 的设置方式,将 Miniforge 的安装路径添加到系统的 PATH 环境变量。另外,配置并更新镜像源以获得更快的下载速度。
③ 虚拟环境安装 Pytroch
使用 conda 创建一个新的虚拟环境,并选择合适的环境名称。在创建环境时,您可以指定安装的 Python 的版本,这样做的好处是它将隔离环境配置,确保项目的可移植性和复现性。下面是创建新环境的命令示例,其中 myenv
是虚拟环境的名称,而 python=3.10
是指定安装的 Python 版本:
conda create -n myenv python=3.10
创建环境后,您需要使用下面的命令来激活该环境:
conda activate myenv
进入该环境后,我们可以使用 conda 或 pip 安装所需的 Python 包,但在安装 pytorch 之前,还需要确定 GPU 支持的 CUDA 版本,这可以通过 nvidia-smi
命令查询得知。
然后,访问 Pytorch 官网 选择与您的 CUDA 版本相对应的 PyTorch 版本。以conda为例,安装PyTorch的命令如下:
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia
安装完成后,我们可以通过直接运行下面 Python 命令来检查 PyTorch 是否已经安装成功。如果安装成功,您将能够看到打印出 PyTorch 的版本号,而不会出现任何导入错误。
python -c "import torch; print(torch.__version__)"
同时,可以执行下面命令检查 PyTorc 是否h成功识别到了 GPU 设备,如果输出为 True
,则表示 PyTorch 成功识别到了 GPU 设备。如果输出为 False
或者出现错误,则表示没有检测到 GPU 支持,或者 PyTorch 尚未正确安装。
python -c "import torch; print(torch.cuda.is_available())"
请确保在运行这些命令前,python 指的是您希望使用的 Python 版本,特别是如果您的环境中安装了多个版本的 Python 时,有可能需要使用 python3 而不是 python,这取决于您的系统配置。
3、炼丹炉环境迁移
在您完成代码的调试并希望将项目环境迁移至其他(训练)服务器时,操作流程相当简单明了,您只需将容器封装为镜像文件,并将该文件迁移到新服务器,之后基于该镜像重新创建容器即可。
首先,使用 docker commit <container-id> <image-name>:<tag>
命令来将正在运行的容器转换为新镜像:
docker commit container_name image_demo:latest
然后,利用 docker save -o <image-name>.tar <image-name>:<tag>
将这个新建的镜像存储为 .tar 压缩文件,这将便于后续的镜像传输工作:
docker save -o image_demo.tar image_demo:latest
最终,将这个 .tar
镜像文件传输至您的新服务器上,并在新服务器上使用 docker load -i <image-name>.tar
命令来加载并读取镜像文件:
docker load -i image_demo.tar
完成这些步骤后,便可以在新服务器无缝运行原容器中配置的环境,环境迁移过程简单高效。