【慕伏白】如何在远程公共服务器部署个人深度学习 Docker 环境(With GPUs)

文章目录

  • 镜像部署
  • 容器部署
  • 环境配置

背景介绍:
由于远程服务器禁止连接外网,因此我在个人服务器上下载了镜像 pytorch/pytorch ,然后传到服务器上进行部署。
远程服务器已预装 Docker、CUDA ,本教程将在此基础上进行。

镜像部署

  1. 在远程服务器上输入nvidia-smi检查CUDA版本,然后进入Docker Hub搜索相应版本的镜像,注意安装devel后缀的版本,例如:docker pull pytorch/pytorch:2.13.0-cuda13.2-cudnn9-devel,使用docker images检查是否拉取成功
  2. 保存镜像:docker save pytorch/pytorch:2.13.0-cuda13.2-cudnn9-devel > pytorch.tar
  3. 将镜像传至远程服务器:scp ./pytorch.tar [user]@[ip]。这种方式比较简单,但是由于文件较大(约20G)且scp没有断点续传,导致重传了很多次,后续了解到可以使用FileZilla工具
  4. 进入远程服务器,加载镜像:docker load < ./pytorch.tar,使用docker images检查是否加载成功

容器部署

  1. 创建容器:docker run -d -it -p 80:80 --name me-pytorch --gpus all -v ~/workspace:/root/workspace pytorch/pytorch:2.13.0-cuda13.2-cudnn9-devel
  2. 检查容器是否创建/启动成功:docker ps,如果未启动,使用docker start me-pytorch启动容器
  3. 进入容器:docker exec -it me-pytorch /bin/bash

环境配置

  1. 备份配置文件:cp /etc/apt/sources.list /etc/apt/sources.list.bak
  2. 清空原有文件,并写入镜像(阿里源):
cat>/etc/apt/sources.list<<'EOF' deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse EOF
  1. 更新源apt update,并安装VIMapt install vim
  2. 配置ubuntucuda镜像源:
## ubuntuvim/etc/apt/sources.list.d/ubuntu.sources## 替换URIs(两处替换)URIs: http://mirrors.aliyun.com/ubuntu
## cudavim/etc/apt/sources.list.d/cuda.list## 替换,注意手动修改版本号deb http://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2404/x86_64 /
  1. 更新源:apt update,如果报重复源错误configured multiple times,删除ubuntu.sources
mv/etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
  1. 如果出现警告Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg),可以忽略,或者执行cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d
  2. 验证源更新:apt update && apt upgrade
  3. 验证 PyTorch 和 CUDA 的可用性
# 进入python后importtorchprint(torch.__version__)# 打印 PyTorch 版本print(torch.cuda.is_available())# 检查 CUDA 是否可用print(torch.version.cuda)# 打印 CUDA 版本