共计 2149 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点
最近在 AutoDL 上租用 GPU 算力跑深度学习任务时,遇到了几个典型问题。首先是 SSH 连接不稳定,经常断开导致训练中断;其次是每次创建新实例都要重复配置环境,非常浪费时间;最后是 GPU 利用率不高,算力资源白白浪费。这些问题严重影响了开发效率,经过一段时间的摸索,总结出了一套完整的解决方案。

实例创建与 SSH 隧道配置
- 登录 AutoDL 控制台,选择适合的 GPU 实例(推荐 RTX 3090 或 A100)
- 创建实例时注意选择 Ubuntu 20.04 系统(兼容性最好)
- 实例创建完成后,在 ” 我的实例 ” 页面找到 SSH 连接信息
配置免密登录的步骤:
- 本地生成 SSH 密钥对:
ssh-keygen -t rsa - 将公钥复制到实例:
ssh-copy-id -p 端口号 root@实例 IP - 测试连接:
ssh -p 端口号 root@实例 IP
对于 SSH 隧道,建议使用以下命令保持稳定连接:
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -p 端口号 -L 8888:localhost:8888 root@实例 IP
Docker 环境构建与镜像缓存
为了避免重复配置环境,我推荐使用 Docker。首先在实例上安装 Docker:
# Ubuntu 20.04
apt update && apt install -y docker.io
然后构建一个基础镜像 Dockerfile:
FROM nvidia/cuda:11.3.1-base
RUN apt update && apt install -y python3-pip
RUN pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
构建并保存镜像:
docker build -t my-dl-env .
docker save my-dl-env > my-dl-env.tar
下次创建新实例时,可以直接加载镜像:
docker load < my-dl-env.tar
持久化会话管理
使用 tmux 可以防止 SSH 断开导致训练中断:
- 安装 tmux:
apt install -y tmux - 创建新会话:
tmux new -s train_session - 分离会话:
Ctrl+b d - 重新连接:
tmux attach -t train_session
GPU 监控与断点续训
这里提供一个 GPU 利用率监控脚本:
import subprocess
import re
def get_gpu_utilization():
result = subprocess.run(["nvidia-smi", "--query-gpu=utilization.gpu", "--format=csv,noheader,nounits"],
capture_output=True,
text=True
)
utilizations = [int(x) for x in result.stdout.strip().split("\n")]
return utilizations
if __name__ == "__main__":
utils = get_gpu_utilization()
print(f"GPU Utilizations: {utils}")
PyTorch Lightning 断点续训示例:
import pytorch_lightning as pl
from pytorch_lightning.callbacks import ModelCheckpoint
# 设置 checkpoint 回调
checkpoint_callback = ModelCheckpoint(
dirpath="checkpoints",
filename="model-{epoch:02d}-{val_loss:.2f}",
save_top_k=3,
monitor="val_loss",
mode="min"
)
trainer = pl.Trainer(
max_epochs=100,
callbacks=[checkpoint_callback],
resume_from_checkpoint="checkpoints/model-epoch=10-val_loss=0.32.ckpt" # 从指定 checkpoint 恢复
)
常见避坑指南
- Jupyter 无法访问 :确保 SSH 隧道正确设置了端口转发(如上面的 -L 8888:localhost:8888)
- 数据丢失 :记得在启动容器时挂载数据卷:
docker run -v /host/data:/container/data - 竞价实例回收 :设置定期保存 checkpoint,并配置云存储自动同步
性能优化建议
根据我的经验,不同实例的性价比对比如下:
- RTX 3090:性价比最高,适合大多数 CV/NLP 任务
- A100:显存大,适合大模型训练
- V100:稳定可靠,但价格相对较高
建议根据任务需求选择,小模型用 3090,大模型用 A100,生产环境用 V100。
开放性问题
随着多平台算力租用需求的增加,如何设计一个跨平台的算力调度系统?需要考虑哪些关键因素?
正文完
