docker配置deep learning环境

发布时间:2026/9/5 4:23:43
docker配置deep learning环境 第一步找镜像官方的 PyTorch 镜像全部托管在 Docker Hub 上。 用浏览器打开这个网址PyTorch 官方 Docker Hub 标签页runtime体积小只能用来跑代码。devel体积大里面包含了nvcc等完整的 C 编译环境。强烈建议做深度学习一律选devel后缀因为你以后免不了要pip install flash-attention或者安装一些奇奇怪怪的第三方 CUDA 算子如果没有devel的编译环境你的pip install会疯狂报错。第二步下载镜像 (Pull)找到你心仪的名字后复制它。在你的服务器终端里输入docker pull命令把它下载到本地docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel(注意这类镜像通常有 5GB ~ 15GB下载需要一段时间请耐心等待。下载完成后用docker images命令就能看到它了。)第三步新建满血启动容器 (Run)现在环境在硬盘里了我们需要把它跑起来。把你刚才图片里的脚本改良一下这就得到了一个最完美、防爆内存、带显卡穿透的 DL 启动模板。docker run -it --name my_env --gpus all --shm-size 16G -v /data/your_name/project:/workspace pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel /bin/bash手把手教你修改上面的模板--name my_experiment_env把my_experiment_env改成你能记住的名字比如yolov8_env。--shm-size 16G这是给 PyTorchDataLoader分配的共享内存服务器内存大的话直接给16G或32G从此告别 Bus Error 报错。-v /data/your_name/project:/workspace冒号前面/data/your_name/project换成你服务器真机上存代码和数据集的真实路径。冒号后面/workspace是容器里的目录不用改。pytorch/pytorch:xxxxxx换成你第二步下载的那个长长的镜像名字。敲下回车后你的终端前缀就会变成类似rootwzl:/workspace#之后退出容器exit启动容器docker start container_name暂停容器docker stop container_name重新进入docker exec -it container_name /bin/bash**************************************************************************1. 关于“退出”的小细节 (exit)如果用docker run -it进的容器敲exit后容器不仅会退出来整个容器也会自动停止运行。如果用docker exec -it进的已经在运行中的容器敲exit出来后容器还在后台继续跑完全不会影响里面正在训练的模型。2. 纠正“停止”与“暂停” (stopvspause)你写的docker stop container_name其实是**“停止关闭容器”**。这就相当于把电脑正常关机里面的程序会被杀掉。这也是最常用的操作。Docker 也有真正的“暂停”命令docker pause container_name。这相当于电脑的“休眠”进程会在内存里冻结可以用docker unpause瞬间唤醒。但 DL 训练一般不用这个用stop就好。3. 核心补充如何制作那份.tar文件打包带走全流程假设在容器里pip install了很多新包配好了一个完美的模型环境想把它拷到另一台没有网的内网服务器上完整的标准流程分为3 步第一步把“容器”固化成“镜像”你笔记里的那步在固化前确实建议先docker stop停止容器防止刚好在写文件导致损坏。docker commit mydocker my_perfect_env:v1(这步做完后用docker images能看到新多出来一个叫my_perfect_env:v1的镜像但它还在现在的电脑里拿不走。)在 Docker 里一个完整的镜像名字其实由两部分组成镜像名 : 标签名Repository : Tag如果不加标签比如只写my_perfect_envDocker 会自动在后台帮你加上默认标签:latest最新版。如果加了标签比如my_perfect_env:v1你就是在明确告诉 Docker这是我这个环境的“第一个版本”。第二步把“镜像”打包成可以拷贝的.tar离线文件⭐ 你漏掉的关键一步使用docker save命令导出docker save -o torch1_13_1.tar my_perfect_env:v1(这会在你的当前目录下生成一个好几个 G 的torch1_13_1.tar文件。现在你可以用 U盘、SCP 把这个文件拷到新电脑去了。)第三步在新电脑上导入镜像你笔记里的最后一步把.tar文件拷到新电脑后执行docker load -i torch1_13_1.tar(导入成功后在新电脑敲docker images就能看到完整的环境了直接docker run就能跑)国内拉取 Docker 镜像不仅是慢最近甚至经常直接超时报错context deadline exceeded。针对这个问题有 3 种主流的解决方法我按操作难度从易到难为你整理好了方法一临时加前缀拉取最快、免配置墙烈推荐⭐这个方法其实就在你最早发给我的那份文档里提到过。它完全不需要修改 Linux 系统配置也不需要重启 Docker非常适合只拉取一两次镜像的场景。操作套路在原本的镜像名字前面硬接上一个国内加速代理的网址。带上前缀直接拉取以拉取 PyTorch 为例前面加上docker.m.daocloud.io/docker pull docker.m.daocloud.io/pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel重命名洗白拉取成功后因为名字太长了不好看用docker tag命令把它改回官方的短名字docker tag docker.m.daocloud.io/pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel(可选)删掉带长前缀的那个原名释放列表空间docker rmi docker.m.daocloud.io/pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel目前比较稳定的前缀有docker.m.daocloud.io或dockerproxy.com方法二配置永久加速源一劳永逸如果你觉得每次加前缀、改名字太麻烦可以修改 Docker 的底层配置文件让它以后每次pull默认走国内的高速通道。打开并编辑 Docker 配置文件如果没有会自动创建sudo nano /etc/docker/daemon.json将以下内容粘贴进去按CtrlO回车保存CtrlX退出{ registry-mirrors: [ https://docker.m.daocloud.io, https://dockerproxy.com, https://mirror.baidubce.com ] }重启 Docker 让配置生效sudo systemctl daemon-reloadsudo systemctl restart docker配置好后你就可以像平时一样直接docker pull pytorch/pytorch:xxxx了。方法三让 Docker 走科学代理终极必杀技由于国内政策经常变化有时候上面的公益加速镜像站也会集体挂掉。如果你实验室的服务器上恰好装了“科学代理”软件比如运行在127.0.0.1:7890你可以强制让 Docker 走你的代理。(注意只在命令行里export http_proxy对 Docker 是无效的必须改系统服务文件)创建代理配置文件夹sudo mkdir -p /etc/systemd/system/docker.service.d新建并编辑配置文件sudo nano /etc/systemd/system/docker.service.d/proxy.conf填入你的代理地址假设你的本地代理端口是 7890[Service] EnvironmentHTTP_PROXYhttp://127.0.0.1:7890/ EnvironmentHTTPS_PROXYhttp://127.0.0.1:7890/ EnvironmentNO_PROXYlocalhost,127.0.0.1重启 Docker起飞sudo systemctl daemon-reloadsudo systemctl restart docker