[实战] 深度学习环境搭建:Docker + SSH + Jupyter
摘要: 本文记录了在 GPU 裸金属服务器上,基于 NVIDIA 官方 PyTorch 镜像搭建开发环境的全过程。包含 Docker 高性能参数解析、SSH 端口冲突解决 (2222端口) 以及 JupyterLab 后台配置。
1. 宿主机操作:拉取与启动容器
首先在宿主机拉取 NVIDIA 官方 PyTorch 镜像。为了最大化发挥 A800 的性能,启动参数至关重要。
1.1 拉取镜像
bash
docker pull nvcr.io/nvidia/pytorch:25.11-py31.2 启动容器 (High Performance Flags)
请根据实际情况替换挂载目录 /home/test/test11/limu。
bash
docker run -it \
--gpus all \
--ipc=host \
--network host \
--privileged=true \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--shm-size=20G \
-v /home/test/test11/limu:/workspace/limu \
--name pytorch-dev-env \
nvcr.io/nvidia/pytorch:25.11-py3 bash关键参数详解 (Critical Parameters)
--gpus all: 启用所有 8 张 A800 显卡。--network host: 关键。让容器直接使用宿主机网络栈,极大提升多卡通信 (NCCL) 效率,但意味着容器端口直接暴露,SSH 需避开宿主机的 22 端口。--ipc=host: 共享内存,防止 PyTorch DataLoader 多进程 (num_workers > 0) 报错。--privileged=true: 给予容器特权,方便进行系统级配置。
2. 容器内配置:SSH 服务
由于使用了 --network host,容器和宿主机共用 IP。宿主机通常占用了 22 端口,必须将容器的 SSH 端口改为其他(如 2222)。
2.1 安装基础工具
进入容器后执行:
bash
apt-get update
apt-get install -y iproute2 net-tools inetutils-ping openssh-server vim2.2 修改 SSH 配置
编辑配置文件:
bash
vim /etc/ssh/sshd_config修改或添加以下核心配置:
ini
# 1. 修改端口 (防止与宿主机冲突)
Port 2222
# 2. 允许 Root 登录
PermitRootLogin yes
# 3. (可选) 加速登录
UseDNS no2.3 重启服务与验证
bash
# 设置 root 密码
passwd root
# 重启服务
service ssh restart
# 验证监听端口
netstat -tulnp | grep 2222此时,你可以在本地通过 SSH 直连容器:
bash
ssh -p 2222 root@YOUR_SERVER_IP3. JupyterLab 交互式开发
3.1 安装与配置
在容器环境中,可能需要忽略系统包限制:
bash
# 安装
pip install jupyterlab --break-system-packages
# 设置访问密码
jupyter lab password3.2 后台启动脚本
bash
# 切换到工作目录
cd /workspace
# 后台启动 (无浏览器模式, 监听 8888)
nohup jupyter lab --ip=0.0.0.0 --port=8888 --allow-root --no-browser > jupyter.log 2>&1 &访问方式
浏览器输入: http://YOUR_SERVER_IP:8888
4. 环境固化 (Docker Commit)
环境配置完美后,切记保存镜像,防止容器误删导致环境丢失。请在宿主机终端执行:
bash
# 1. 查看容器 ID
docker ps
# 假设 ID 为 3513904c20bc
# 2. 提交为新镜像
docker commit -m "Install SSH(2222) + Jupyter + Tools" 3513904c20bc pytorch-jupyter:v1
# 3. 以后启动只需运行
# docker run -it --gpus all --net=host ... pytorch-jupyter:v1 bash5. 常用命令速查表 (Cheat Sheet)
| 功能 | 命令 |
|---|---|
| 查看显卡状态 | nvidia-smi |
| 查看端口占用 | netstat -tulnp |
| 重启 SSH | service ssh restart |
| 看 Jupyter 日志 | tail -f jupyter.log |
| 测试外网连通 | ping 8.8.8.8 |
