2. 安装与环境配置:Conda、Docker与GPU驱动配置

环境配置这事儿,说白了就是给框架找个“家”。

我见过太多新手在安装环节卡壳,一卡就是一整天。其实没那么复杂。你把Conda、Docker、GPU驱动这三件事理清楚,后面就顺了。

2.1 三大环境管理工具的对决

先说说市面上主流的三种方式,我挨个试过,各有各的脾气。

工具 核心思路 我推荐谁用
Conda Python级别隔离,包管理顺手 个人开发、快速实验
Docker 操作系统级别容器,完全隔离 团队协作、生产部署
裸装(pip + venv) 轻量级,依赖系统库 老手、定制化需求

我个人习惯是:Conda管Python包,Docker管全线环境。两个一块用,基本没踩过什么大坑。

关键点:环境隔离不是“有就行”,而是“跑起来不打架”。Conda能解决依赖冲突,Docker能解决操作系统差异。

2.2 Conda实战:从零搭一个深度学习环境

安装Conda,我推荐用Miniconda。它比Anaconda轻很多,够用就行。

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

装好后,先配个国内源。不然下载慢得你想砸电脑。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

创建一个深度学习环境,指定Python版本。我喜欢用Python 3.10,比较稳。

conda create -n dl_env python=3.10
conda activate dl_env

然后装框架。这里有个小讲究:

  • PyTorch:推荐用官方命令自动匹配CUDA版本
  • TensorFlow:CUDA版本必须严格对应,否则会报错

个人经验:我在项目里多次踩过坑——Conda的cudatoolkit和系统驱动是两回事。Conda装的CUDA是运行时库,不影响系统驱动。这句话很重要,你记住。

2.3 Docker:一劳永逸的环境打包方案

如果你和我一样,经常要在不同机器上跑实验,那Docker是个好东西。你想想看,写个Dockerfile,整个环境就打包成镜像了,去哪都能跑。

先装Docker,然后拉个官方镜像试试手:

docker pull nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04

写一个简单的Dockerfile:

FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04

RUN apt update && apt install -y python3 python3-pip

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

CMD ["python3"]

构建并运行:

docker build -t my_dl_env .
docker run --gpus all -it my_dl_env

注意:Docker里面装GPU驱动?那是不对的。Docker里只需要nvidia-docker运行时,驱动是宿主机的事。我曾经看到有人试图在容器里装NVIDIA驱动,结果搞坏了宿主机,嗯……希望不是你。

挂载本地代码到容器里,这个命令记得用:

docker run --gpus all -v /home/user/project:/workspace -it my_dl_env

2.4 GPU驱动:绕不开的坎

GPU驱动配置,说白了就是三个东西要配合好:

  1. NVIDIA驱动(系统级)
  2. CUDA工具包
  3. cuDNN库

检查驱动版本:

nvidia-smi

这个命令能看到驱动版本和最高支持的CUDA版本。比如输出里写CUDA Version: 12.1,表示你的驱动可以运行CUDA 12.1及以下的任何版本。

然后就是版本对齐。这里我列个常用搭配表:

PyTorch版本 推荐CUDA版本 TensorFlow版本
2.0.x 11.7 / 11.8 2.12.x
2.1.x 12.1 2.13.x
2.2.x 12.1 2.14.x

避坑指南:别装最新的CUDA。新的不一定稳,老的反而没坑。我一般选NVIDIA官方LTS版,比如12.1或11.8。

验证GPU是否被框架识别:

PyTorch:

import torch
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))

TensorFlow:

import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))
print(tf.test.is_gpu_available())

如果都返回True和设备名,那基本就成了。

注意:我曾经在Ubuntu上遇到过libcudnn.so.8找不到的问题,十有八九是cuDNN没装对。去NVIDIA官网下载对应版本的deb包,手动安装一下就好。

2.5 一张图理清整体脉络

来,我画了张图,把这三者的关系和配置决策点可视化了一下。你一看就懂了:

PyTorch与TensorFlow环境配置关系图 深度学习环境配置决策树 硬件层:NVIDIA GPU + 驱动 (nvidia-smi) 驱动版本决定最高CUDA支持,这是天花板 系统运行时:CUDA Toolkit + cuDNN 用Conda安装 cudatoolkit,或手动安装系统级CUDA Conda 环境 (dl_env) Python + PyTorch / TensorFlow + 依赖包 Docker 容器 (my_dl_env) Dockerfile + nvidia-docker运行时 验证:torch.cuda.is_available() / tf.config.list_physical_devices('GPU')

2.6 我的一些小习惯

  • Conda环境命名:用tf_2.14、pt_2.1这种格式,一看就知道里面是谁。
  • Docker镜像:一定要加上:tag,否则默认拉latest,哪天跑不通了都不知道为什么。
  • 驱动版本:我保持 550+ 系列驱动,向下兼容性比较好。

小技巧:环境配好后,把conda list或pip freeze导出来保存,下一次直接还原。

嗯,环境配置这块,说白了就是多试几次。按照上面的步骤来,一般十分钟之内就能跑起来。有坑就看看日志,别慌。