使用 Docker 在 PyTorch 环境中训练模型
在机器学习和深度学习任务中,使用 Docker 可以方便地构建和管理环境,特别是在涉及复杂依赖关系和 GPU 加速时。本文介绍如何基于官方 PyTorch 镜像构建训练环境,并在容器中运行训练脚本。
准备工作
首先编写一个 Dockerfile,描述镜像应该包含的依赖和启动命令。官方 PyTorch 镜像已经内置对应版本的 torch、torchvision、CUDA 和 cuDNN,通常不要在镜像里再次 pip install torch torchvision,否则容易把 CUDA 版本和 PyTorch 版本装乱。
下面示例使用一个明确版本的官方镜像。实际项目中应根据服务器 NVIDIA 驱动版本选择匹配的 CUDA 镜像标签。
1 | # 使用官方 PyTorch 镜像作为基础镜像 |
requirements.txt 中只放业务依赖,例如:
1 | pandas |
其中,train.py 是训练脚本,也放在同一目录。
构建 Docker 镜像
在 Dockerfile 所在目录下,打开终端并运行以下命令来构建 Docker 镜像:
1 | docker build -t test_train . |
test_train 是生成的 Docker 镜像名称。
运行 Docker 容器
构建完成后,我们可以使用以下命令来运行 Docker 容器,并在其中执行训练脚本:
1 | docker run --gpus all -it --rm --shm-size=4g test_train |
在这个命令中,--gpus all 用于启用 GPU 支持,-it 表示以交互模式运行容器,--rm 表示容器停止后立即删除,--shm-size 用于设置容器共享内存大小。训练脚本如果使用 DataLoader(num_workers>0) 或较大的 batch,过小的共享内存可能导致 worker 异常退出。
总结
通过使用 Docker,我们可以更稳定地构建和管理 PyTorch 环境,并在其中运行训练任务。关键是固定基础镜像标签、避免重复安装 PyTorch 核心包,并让镜像的 CUDA 版本与宿主机驱动能力匹配。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Clang's Blog!
评论







