主页
avatar

Kared

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、搭建炼丹炉环境

  1. Miniconda: 是 Anaconda 的精简发行版,提供了大量的软件包和强大的功能,同时具有良好的虚拟化性能,支持多种操作系统平台及高级功能,为需要广泛的第三方库和跨平台支持的用户提供了一个强大的基础。
  2. 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

完成这些步骤后,便可以在新服务器无缝运行原容器中配置的环境,环境迁移过程简单高效。

Docker Deep Learning PyTorch Conda Miniconda Miniforge 深度学习