努力
加油

在阿里云服务器上如何搭建深度学习环境?

在阿里云 ECS 上搭建深度学习环境,核心不在于“装软件”,而在于选对实例规格和优化资源调度。很多新手直接买台普通通用型服务器装 PyTorch,结果跑个模型就 OOM(内存溢出)或者 GPU 占用率极低,纯属浪费钱。

下面按实际生产环境的逻辑,分步骤拆解如何高效、稳定地搭建环境。

一、 选型:别拿 CPU 跑训练

首先明确一点:推理(Inference)可以用 CPU,但训练(Training)必须用 GPU。

  1. 实例规格选择

    • 入门/学习:推荐 ecs.gn6i-c4g1.xlarge 或类似配置(NVIDIA T4 显卡)。性价比高,适合跑 ResNet、BERT 微调等中等规模任务。
    • 进阶/企业级:如果涉及大模型训练或大规模并行,考虑 ecs.gn7 系列(A100/A800 等,需提前确认库存和配额)或 ecs.gn6v(V100)。
    • 注意:GPU 实例通常没有公网 IP 默认分配,或者带宽极小,建议搭配一块弹性公网 IP(EIP),并按量付费或包年包月,视使用频率而定。
  2. 镜像选择

    • 不要从零开始装系统:去阿里云镜像市场,搜索“Deep Learning”或“PyTorch”。官方或社区维护的镜像已经预装了 CUDA、cuDNN 和基础驱动。
    • 自定义镜像:如果你有自己的 Docker 镜像或特定的依赖库,可以先在一台机器搭好,制作成自定义镜像,然后快速创建新实例。这是最省时间的做法。

二、 环境搭建:容器化优于裸机安装

在云服务器上,强烈建议使用 Docker + JupyterLab 的方式。原因有三:

  1. 隔离性:不同项目依赖冲突少(比如 TF 1.x 和 TF 2.x 共存)。
  2. 可移植性:代码和环境一起打包,换服务器不用重新配环境。
  3. 远程访问:JupyterLab 通过浏览器访问,比 SSH 终端直观得多,支持多标签页。

步骤 1:登录服务器并检查驱动

SSH 登录你的 ECS 实例后,先确认 NVIDIA 驱动和 CUDA 版本是否匹配:

nvidia-smi
nvcc --version

如果这两个命令有输出且版本号对应(例如 Driver 450+ 支持 CUDA 11.0+),说明基础环境没问题。如果没输出,可能需要重装驱动,但大多数云厂商镜像已处理好。

步骤 2:安装 Docker

阿里云 CentOS 7/8 或 Ubuntu 20.04/22.04 镜像通常自带 Docker 或可通过 apt/yum 一键安装:

# Ubuntu 示例
sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker

确保当前用户有权限操作 Docker(避免每次加 sudo):

sudo usermod -aG docker $USER
newgrp docker

步骤 3:拉取并运行 JupyterLab 容器

推荐使用 NVIDIA 官方提供的 ngc 镜像,它们已经内置了常用的深度学习框架。

以 PyTorch 为例:

docker run -itd 
    --name dl-env 
    --gpus all 
    -p 8888:8888 
    -v /home/ubuntu/data:/workspace/data 
    -v /home/ubuntu/code:/workspace/code 
    pytorch/pytorch:latest-cuda11.8-cudnn8-runtime

参数解析:

  • --gpus all:关键!让容器能调用宿主机的所有 GPU。
  • -p 8888:8888:将容器的 8888 端口映射到主机。记得在阿里云控制台的安全组中放行 TCP 8888 端口。
  • -v ...:挂载本地目录到容器内。这样你在宿主机修改文件,容器内即时生效,数据也不会因容器删除而丢失。

启动后,终端会输出一段包含 http://localhost:8888/?token=... 的链接。复制这个 token,然后在浏览器中输入 http://<你的ECS公网IP>:8888/?token=... 即可进入 JupyterLab。

三、 性能优化与避坑指南

  1. 网络提速

    • 下载大型数据集(如 ImageNet)或模型权重时,国内网络可能较慢。建议在阿里云 OSS 上建立 Bucket,上传数据后,使用内网 Endpoint 挂载到 ECS 实例,速度可达千兆甚至万兆,远超公网下载。
    • 或者使用阿里云提供的“镜像提速器”配置 Docker pull 速度。
  2. 显存管理

    • 在 Jupyter 中调试代码时,容易忘记关闭进程导致显存泄漏。定期执行 nvidia-smi 监控。
    • 如果遇到 OOM,尝试减小 batch size,或使用混合精度训练(AMP, torch.cuda.amp)。
  3. 断点续训

    • 云服务器并非绝对稳定(虽然概率很低),但为防万一,务必设置自动保存 checkpoint 策略。
    • 利用阿里云的“快照”功能,定期为系统盘和数据盘打快照。这是最后的兜底保障。
  4. 成本节约

    • 如果只是偶尔训练,可以使用“抢占式实例”(Spot Instance),价格仅为按量付费的 1-10%。但需注意,阿里云可能会在几小时内回收实例,因此必须实现状态持久化(即所有中间结果都保存在 OSS 或云盘上,而非仅存在于内存或本地磁盘)。
    • 训练结束后,立即释放实例或停止实例(停止不收费,但保留的云盘仍计费),避免闲置扣费。

四、 替代方案:PAI(平台人工智能)

如果你的团队不是纯粹的技术极客,而是更关注业务交付,可以考虑直接使用阿里云的 PAI (Platform for AI) 服务。

  • 优势:无需自己管服务器、驱动、CUDA 版本。提供可视化的 Notebook 环境,内置多种主流框架,支持分布式训练调度。
  • 适用场景:团队协作、需要复杂分布式训练、不想运维基础设施。

总结

在阿里云搭建深度学习环境,最佳实践是:

  1. 选 gn 系列 GPU 实例;
  2. 用 Docker 封装环境;
  3. JupyterLab 作为交互界面;
  4. OSS 存储数据;
  5. 安全组放行必要端口。

这套组合拳既能保证开发体验流畅,又能兼顾成本和稳定性。别在 SSH 命令行里一行行敲 pip install,那是 2015 年的做法了。