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驱动配置,说白了就是三个东西要配合好:
- NVIDIA驱动(系统级)
- CUDA工具包
- 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 一张图理清整体脉络
来,我画了张图,把这三者的关系和配置决策点可视化了一下。你一看就懂了:
2.6 我的一些小习惯
- Conda环境命名:用
tf_2.14、pt_2.1这种格式,一看就知道里面是谁。 - Docker镜像:一定要加上
:tag,否则默认拉latest,哪天跑不通了都不知道为什么。 - 驱动版本:我保持 550+ 系列驱动,向下兼容性比较好。
小技巧:环境配好后,把conda list或pip freeze导出来保存,下一次直接还原。
嗯,环境配置这块,说白了就是多试几次。按照上面的步骤来,一般十分钟之内就能跑起来。有坑就看看日志,别慌。