深度学习篇---docker迁移深度学习项目至windows平台

张开发
2026/5/5 22:42:44 15 分钟阅读

分享文章

深度学习篇---docker迁移深度学习项目至windows平台
深度学习项目的环境不是简单的“拷贝代码”而是要复制一整套生态系统Python版本、CUDA版本、cuDNN、PyTorch/TensorFlow版本、各种依赖库的精确版本、环境变量……哪怕两台电脑装的都是Windows只要你没把环境完全对齐代码就很可能跑不起来。通俗比喻搬家 vs 搬房子把项目从一台电脑挪到另一台普通项目就像搬家——把家具代码搬过去就行因为新家格局系统环境差不多。深度学习项目则像搬整个房子连地基一起搬过去。因为你的代码可能依赖Python 3.10而新电脑装了3.12你的模型训练时用了CUDA 11.8新电脑驱动可能只支持CUDA 12.x你用pip install装了一堆库具体版本号自己都记不清了Docker 的做法是把你的“房子”连同“地基”一起打包成镜像到新电脑上直接还原。只要新电脑装了Docker它就能原样复现你的环境。具体怎么做分步骤详解第一步在原电脑上搞清楚你需要什么你不需要把整个电脑打包只需要打包和你项目相关的部分。先梳理清楚代码和数据你的.py脚本、模型权重.pth、训练数据放在哪个文件夹。Python 版本你当时用的是哪个Python项目里有runtime.txt或.python-version吗依赖包清单在原电脑上跑这个命令生成清单pip freeze requirements.txt这会记下所有包及精确版本例如torch2.1.0cu118。CUDA 版本跑nvidia-smi看看右上角显示的 CUDA 版本记住它——这决定了基础镜像选什么。显卡驱动目标电脑只要装了足以支持这个 CUDA 版本的驱动就行这个在Docker外面搞定。第二步给你写一份 Dockerfile环境说明书这个文件告诉Docker“怎么搭你的房子”。我会先给一个GPU版本的因为你做深度学习。# 1. 选择带CUDA的基础镜像底座这里选CUDA 11.8 cuDNN 8的开发版本 FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 # 2. 装Python和你需要的系统包比如git、wget RUN apt-get update apt-get install -y \ python3.10 python3-pip git wget \ rm -rf /var/lib/apt/lists/* # 3. 把python3命令指向python让你习惯用的命令生效 RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 # 4. 设置工作目录容器里的项目文件夹 WORKDIR /workspace # 5. 先只复制依赖清单再安装——为了用Docker缓存加速后续构建 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 6. 把你的全部项目代码和数据复制进去 COPY . . # 7. 容器启动时执行的命令改成你自己的比如训练脚本 CMD [python, main.py]解释几个设计原因先COPY依赖文件再安装Docker构建时每一行都是一层如果代码变了但依赖没变以前装好的层可以直接复用不用重新下载几百兆的PyTorch。用清华镜像源-i https://pypi.tuna.tsinghua.edu.cn/simple在国内装PyTorch会快非常多。基础镜像选了什么如果你原电脑CUDA是11.8就选对应的PyTorch官网也有针对你CUDA版本的安装命令把它们浓缩进requirements.txt里了。第三步写 .dockerignore 文件必做避免把垃圾打进去和Dockerfile同级目录创建.dockerignore内容类似__pycache__ *.pyc .git .vscode .idea *.pth *.ckpt data/raw_data这能防止把模型权重、原始数据等巨大文件意外打包进镜像导致镜像动辄几十GB。模型权重和数据建议通过挂载卷的方式传入不要打进镜像里。第四步在原电脑上构建镜像打开PowerShell进入项目根目录docker build -t my-dl-project:v1 .完成后你会看到一个属于自己的镜像docker images第五步把镜像搬到新电脑方法有几种对个人迁移最直接的是方案A导出为文件用U盘/移动硬盘拷贝# 原电脑导出镜像为tar包 docker save -o my-dl-project.tar my-dl-project:v1 # 把tar包拷到新电脑 # 新电脑载入镜像 docker load -i my-dl-project.tar方案B推送到Docker Hub如果镜像不太大且网络好docker tag my-dl-project:v1 你的用户名/my-dl-project:v1 docker push 你的用户名/my-dl-project:v1 # 新电脑直接 pull第六步在新电脑上运行新电脑必须已经装好Docker Desktop for WindowsNVIDIA 显卡驱动版本要≥你CUDA要求的那个NVIDIA Container Toolkit这是让Docker能用GPU的关键装好后新电脑才能用GPU跑然后运行容器# --gpus all 让Docker能调用显卡 docker run --gpus all -it --rm my-dl-project:v1整体流程总结图下面这张图概括了从“梳理环境”到“在新电脑上跑起来”的整个 Docker 迁移流程。最后几个关键提醒模型权重文件.pth不要打进镜像里。镜像应该只是“环境”数据通过-v挂载进去docker run --gpus all -v D:\我的模型:/workspace/models -v D:\我的数据:/workspace/data 项目名如果你训练需要多卡--gpus all会自动识别新电脑上的所有兼容GPU。如果不想走Docker还有更轻量的conda env export→conda env create流程但它在Windows上复现GPU版本的成功率远不如Docker。

更多文章