深度学习篇---docker迁移深度学习项目至linux平台
本文介绍了使用Docker实现深度学习项目从Windows开发环境到Linux生产环境的无缝迁移方案。核心方法是通过Docker容器封装完整的Linux运行环境,包括Python、PyTorch和CUDA等依赖项。具体步骤分为:1)在Windows上构建Docker镜像并导出;2)在Linux服务器上配置Docker和NVIDIA容器工具包后导入镜像运行。文章详细说明了Linux环境准备、GPU支
在Windows上开发深度学习项目,最后部署或迁移到Linux上跑。好消息是:Docker 做这件事几乎完美,因为容器内部就是Linux环境,你在Windows上构建的镜像,放到Linux上跑,天然无缝。
核心思路:一次打包,到处运行
你用Docker打包的镜像,里面装的是 Linux版的Python、Linux版的PyTorch、Linux版的CUDA库,不依赖你宿主机是Windows还是Linux。所以流程分为两大步:
-
在Windows上,把项目做成Docker镜像
-
把镜像搬到Linux服务器,用GPU跑起来
唯一不同的就是第二步的Linux环境准备。
第一步:在Windows上打包(和之前一样,快速回顾)
假设你已经按上轮说的,在项目根目录准备了三个文件:
Dockerfile(以PyTorch + CUDA 11.8为例):
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
RUN apt-get update && apt-get install -y \
python3.10 python3-pip git wget \
&& rm -rf /var/lib/apt/lists/*
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
WORKDIR /workspace
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
CMD ["python", "main.py"]
.dockerignore:
__pycache__ *.pyc .git *.pth *.ckpt data/
然后在PowerShell里构建并导出:
docker build -t my-dl-project:v1 .
docker save -o my-dl-project.tar my-dl-project:v1
第二步:在Linux服务器上恢复并运行
这是你需要重点看的新部分。
2.1 给Linux装好Docker
Ubuntu/Debian 系统:
# 官方一键安装脚本
curl -fsSL https://get.docker.com | bash
# 把当前用户加入docker组,免sudo
sudo usermod -aG docker $USER
# 退出重新登录生效
CentOS/RHEL 系统:
curl -fsSL https://get.docker.com | bash
sudo systemctl enable docker --now
sudo usermod -aG docker $USER
验证:
docker --version
2.2 给Linux装上NVIDIA Container Toolkit(让Docker能调用GPU)
这是最关键的一步,没有它,容器里就看不到显卡。
Ubuntu/Debian 安装:(推荐 nvidia 官方源)
# 添加nvidia官方仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# 安装
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
CentOS/RHEL 安装:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
sudo yum install -y nvidia-container-toolkit
sudo systemctl restart docker
验证GPU是否可用:
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
如果能看到类似你Windows上 nvidia-smi 的输出(显卡型号、驱动版本、CUDA版本),就说明Docker已经能调用GPU了。
2.3 把镜像导入Linux
把Windows上导出的 my-dl-project.tar 传到Linux服务器(用U盘、scp、或者网盘都行),然后在Linux上加载:
docker load -i my-dl-project.tar
验证:
docker images
你就能看到 my-dl-project:v1 了。
2.4 在Linux上用GPU跑你的项目
基本运行(直接执行CMD里写的命令,比如python main.py):
docker run --gpus all --rm my-dl-project:v1
更实用的运行方式:挂载数据、进入交互终端
docker run --gpus all -it --rm \
-v /home/你的用户名/data:/workspace/data \
-v /home/你的用户名/models:/workspace/models \
my-dl-project:v1 \
bash
-
-v 宿主机目录:容器内目录:把Linux上的数据目录挂进去,这样模型权重、训练数据就不用打进镜像里 -
最后加
bash:覆盖默认的CMD,让你先进终端手动执行
进去之后,你就可以像在Windows上一样运行:
python main.py
# 或者
python train.py --batch_size 32
第三步:Windows ↔ Linux 双向无忧的核心原理图
下面这张图清晰地展示了 Docker 如何抹平两个操作系统之间的差异,实现整个深度学习项目的平滑迁移。

一份可以直接在多平台使用的Docker Compose编排
如果你的项目变复杂了(比如需要配合MySQL、Redis一起跑),直接用Docker Compose,在Windows写的 docker-compose.yml 在Linux上也照用不误。
version: '3.8'
services:
trainer:
image: my-dl-project:v1
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
volumes:
- /home/用户名/data:/workspace/data
- /home/用户名/models:/workspace/models
command: python train.py --epochs 100
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
在Linux上启动:
docker compose up
几个跨平台特别要注意的点
-
路径分隔符:Windows路径是
D:\data\images,Linux是/home/user/data/images。但在Docker里,容器内部永远用Linux风格/workspace/data,你只需要在-v挂载时写对宿主机的路径就行。 -
GPU驱动:Linux服务器不需要装CUDA Toolkit本身,只需要装好NVIDIA驱动和nvidia-container-toolkit,容器内部镜像已经自带了正确的CUDA版本。
-
文件权限:有时候Linux上挂载的目录会有权限问题,简单粗暴的做法是在Dockerfile里加一句
RUN chmod -R 777 /workspace,或者运行时加-u root。 -
如果你的Linux服务器是租的云GPU(比如AutoDL、矩池云):它们通常已经内置了Docker和nvidia-docker,你只需要上传镜像或直接传tar包就行,不用自己装。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)