努力
加油

如何在阿里云服务器上部署TensorFlow或PyTorch进行深度学习?

在阿里云 ECS(云服务器)上部署深度学习环境,核心思路其实就两步:选对实例和配好环境。别被那些花里胡哨的教程吓到,本质上就是搞定 GPU 驱动、CUDA/CuDNN 版本匹配,以及 Python 依赖管理。

下面我按实际生产中最稳妥的路径,把步骤拆解清楚。这里以目前最主流的 PyTorch 为例(TensorFlow 逻辑完全一致,只是安装命令不同),操作系统默认使用 Ubuntu 20.04/22.04 LTS(国内用户友好,文档多)。

第一步:选型与购买(别省这一步的钱)

很多人直接在普通 CPU 实例上装 TensorFlow,跑起来慢到怀疑人生。深度学习必须用 GPU 实例。

  1. 实例类型选择:

    • 入门/学习:选 ecs.gn6i-c4g1m2.large 或类似配置(V100/A10 等,具体看当前活动),适合单卡训练。
    • 多卡并行:如果需要多卡同步,注意网络带宽和 NVLink 支持,通常选 gn7i 系列或更高阶的 GPU 实例。
    • 重要提示:GPU 实例通常没有公网 IP 或者流量昂贵,建议绑定一个 弹性公网 IP (EIP),方便 SSH 连接和后期上传下载数据。
  2. 镜像选择:

    • 新手推荐:直接使用阿里云市场里的 “Deep Learning 镜像” 或 “PAI 定制镜像”。这些镜像预装了 CUDA、CUDNN、Python 和部分框架,开箱即用,能省去 80% 的环境配置坑。
    • 进阶推荐:选择标准的 Ubuntu 22.04 LTS 公共镜像。这样你能完全掌控底层环境,适合长期维护和调试。下文基于此方案展开。

第二步:基础环境搭建(SSH 进去之后)

假设你已经通过 SSH 连上了服务器。

1. 更新系统并安装必要工具

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git wget curl unzip

2. 安装 NVIDIA 显卡驱动

这是最容易出错的地方。不要尝试从源码编译驱动,直接用阿里云提供的驱动包或 Ubuntu 仓库版本。

# 查看你的 GPU 型号
nvidia-smi

# 如果没反应,说明驱动没装。执行以下命令自动安装推荐驱动
sudo ubuntu-drivers autoinstall
sudo reboot  # 重启后再次检查 nvidia-smi 是否正常

注意:确保 nvidia-smi 输出的 Driver Version 和 CUDA Version 是匹配的。比如 Driver 535.xx 通常支持 CUDA 12.x。

3. 安装 CUDA Toolkit 和 cuDNN

为了兼容性最好,建议安装与 nvidia-smi 显示的 CUDA 版本向下兼容的最新 Toolkit。

假设 nvidia-smi 显示支持 CUDA 12.2,我们可以安装 CUDA 12.2:

# 下载 CUDA 12.2 (示例链接,请去 NVIDIA 官网确认最新 runfile 或 repo 源)
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_530.30.02_linux.run

sudo sh cuda_12.2.0_530.30.02_linux.run

# 安装过程中:
# - 取消勾选 "Driver" (因为前面已经装过了)
# - 勾选 "Toolkit"
# - 勾选 "Samples" (可选)

配置环境变量(写入 ~/.bashrc):

echo 'export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc

验证:

nvcc --version

4. 安装 cuDNN

CUDA 12+ 推荐使用库文件方式安装,而不是独立的 runfile。

# 下载 cuDNN for CUDA 12.2 (需要注册 NVIDIA 开发者账号)
# 解压后复制头文件和库文件
tar -xzvf cudnn-linux-x86_64-8.9.0.131_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

第三步:Python 环境与框架安装

强烈建议使用 Miniconda 或 Anaconda 来隔离环境,避免污染系统 Python。

1. 安装 Miniconda

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 按照提示操作,最后 source ~/.bashrc

2. 创建虚拟环境

conda create -n dl_env python=3.10 -y
conda activate dl_env

3. 安装 PyTorch (关键步骤)

去 PyTorch 官网 获取对应的安装命令。

假设你用的是 CUDA 12.1:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

如果你要装 TensorFlow 2.x:

pip install tensorflow[and-cuda]
# 或者指定版本
pip install tensorflow==2.15.0

4. 验证安装

import torch
print(torch.__version__)
print(torch.cuda.is_available())  # 必须输出 True
print(torch.cuda.get_device_name(0))

如果是 TensorFlow:

import tensorflow as tf
tf.test.is_built_with_cuda()  # 应返回 True
tf.config.list_physical_devices('GPU')

第四步:实战优化与避坑指南

1. 数据传输瓶颈

在云上跑深度学习,IO 往往是瓶颈。

  • 小数据集:直接放在本地磁盘 /data 下即可。
  • 大数据集:建议将原始数据存储在 OSS (对象存储) 中,然后通过 ossfs 挂载或使用 boto3 SDK 在代码中动态读取。这样节省 ECS 本地 SSD 空间,且 OSS 有内网免费流量优势(如果 ECS 和 OSS Bucket 在同一区域)。

2. 持久化与快照

  • 每次训练完模型,务必将 .pth 或 .ckpt 文件备份到 OSS。
  • 利用阿里云控制台的 自定义镜像 功能。当你配置好所有环境后,制作一个镜像。下次开新机器直接从这个镜像启动,无需重新安装驱动和 CUDA,省时省力。

3. 监控资源

使用 htop 查看 CPU/内存,使用 nvidia-smi dmon -s u 实时监控 GPU 利用率。如果训练时 GPU 利用率低于 50%,通常是数据加载(DataLoader)太慢,需要增加 num_workers 或优化预处理逻辑。

4. 安全组设置

默认安全组只开放了 22 端口。如果你需要远程访问 TensorBoard 或 Jupyter Notebook:

  • 在阿里云控制台 -> 安全组 -> 添加规则。
  • 放行 TCP 端口,例如 6006 (TensorBoard), 8888 (Jupyter)。
  • 切记:不要随意开放 0.0.0.0/0 到高风险端口,除非你设置了强密码或使用了 SSH 隧道。

总结

在阿里云部署深度学习环境,“镜像先行,驱动兜底,Conda 隔离” 是最稳的策略。

  1. 如果能接受预装环境,直接买 Deep Learning 镜像,省心。
  2. 如果追求纯净,走 Ubuntu + NVIDIA 驱动 + CUDA Toolkit + Conda 的标准路径。
  3. 始终关注 CUDA 版本与 PyTorch/TensorFlow 版本的对应关系,这是报错的重灾区。

遇到 ImportError: libcuda.so.1 这类错误,90% 是因为驱动没装好或者 LD_LIBRARY_PATH 没配对;遇到 RuntimeError: CUDA error,先查 nvidia-smi 看显存是否溢出,再查 CUDA 版本匹配度。