CentOS 8.2 配置深度学习环境
在 CentOS 8.2 + NVIDIA RTX 3090 上安装 Docker、专有驱动、CUDA、cuDNN,并配置普通用户使用 Docker。
环境
| 项目 | 说明 |
|---|---|
| 操作系统 | CentOS 8.2 |
| GPU | NVIDIA GeForce RTX 3090 |
| 驱动安装包示例 | NVIDIA-Linux-x86_64-470.57.02.run |
| CUDA 示例 | cuda_11.4.1_470.57.02_linux.run |
| cuDNN 示例 | cudnn-11.4-linux-x64-v8.2.2.26 |
| 内核示例 | 4.18.0-305.10.2.el8_4.x86_64(以 uname -r 为准) |
相关概念
| 概念 | 一句话 |
|---|---|
| nouveau | 开源 NVIDIA 驱动;装专有驱动前需禁用。 |
| NVIDIA 专有驱动 | 官方闭源驱动,深度学习 / CUDA 的基础。 |
| CUDA | NVIDIA GPU 并行计算平台与工具链(含 nvcc)。 |
| cuDNN | 深度学习加速库,需与 CUDA 大版本匹配。 |
| DKMS | 内核模块动态构建,内核更新后便于重编驱动。 |
版本组合需互相匹配(驱动 ↔ CUDA ↔ cuDNN ↔ 框架)。下文版本为当时可用组合,换卡/换系统时请对照 NVIDIA 兼容表。
1. 安装 Docker
1.1 基础包
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
1.2 添加稳定仓库(阿里云)
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.3 安装并启动
yum -y install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
2. 安装显卡驱动
2.1 编译依赖
yum -y install pkg-config gcc gcc-c++ \
kernel-devel kernel-headers dkms epel-release
2.2 禁用 nouveau
grub2-editenv - set "$(grub2-editenv - list | grep kernelopts) nouveau.modeset=0"
echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist.conf
重启后验证(应无输出或看不到 nouveau 在用):
lsmod | grep nouveau
可选更新系统:
yum -y update
2.3 取消对 nvidiafb 的 blacklist(如有)
grep nvidia /etc/modprobe.d/* /lib/modprobe.d/*
若看到类似:
/lib/modprobe.d/dist-blacklist.conf:blacklist nvidiafb
需注释掉该行后再装官方驱动,否则可能安装失败。
2.4 运行官方 .run 安装包
建议在多用户文本模式 / 无图形占用 GPU 时安装。带上内核源码路径:
./NVIDIA-Linux-x86_64-470.57.02.run \
--kernel-source-path=/usr/src/kernels/4.18.0-305.10.2.el8_4.x86_64 \
-k $(uname -r)
kernel-source-path必须与当前uname -r对应目录一致。安装后重启,用nvidia-smi验证。
3. 安装 CUDA
./cuda_11.4.1_470.57.02_linux.run
交互中选择 Accept,再按提示 install(若已装驱动,可按向导跳过重复驱动安装,只装 Toolkit)。
写入环境变量(可写入 ~/.bashrc):
export PATH=/usr/local/cuda-11.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
验证:
nvcc -V
4. 安装 cuDNN
tar -xf cudnn-11.4-linux-x64-v8.2.2.26.tgz
cp cuda/include/cudnn*.h /usr/local/cuda-11.4/include
cp cuda/lib64/libcudnn* /usr/local/cuda-11.4/lib64/
chmod a+r /usr/local/cuda-11.4/include/cudnn*.h \
/usr/local/cuda-11.4/lib64/libcudnn*
验证版本宏:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
若
/usr/local/cuda为指向cuda-11.4的符号链接,上述路径一致;否则请改成实际 include 路径。
5. 普通用户使用 Docker
useradd igo
passwd igo
grep docker /etc/group
# 示例:docker:x:985:
usermod -aG docker igo
usermod -aG wheel igo # 赋予 sudo 组(按安全策略决定是否需要)
# 用户重新登录,或:
newgrp docker
之后 igo 可无 sudo 执行 docker(仍受组权限与 rootless 策略约束)。
6. 性能验证(可选)
环境配好后,可运行例如:
- Google BERT 等深度学习样例
- 3DMark 等基准(若在桌面/Windows 双系统或其它环境测图形性能)
以确认 GPU 计算与驱动工作正常。
流程速览
Docker 仓库与安装
→ 禁 nouveau → 处理 nvidiafb blacklist
→ 装 NVIDIA .run → 装 CUDA → 装 cuDNN
→ 用户加入 docker/wheel → nvidia-smi / nvcc / 业务测试
注意
- 装驱动前务必禁用 nouveau,并尽量关闭占用 GPU 的图形界面。
- 内核升级后可能需重装/重编驱动;DKMS 可减轻但非万能。
- CUDA / cuDNN / 驱动版本必须匹配;3090 勿随意混用过旧驱动。
- 容器内用 GPU 还需 NVIDIA Container Toolkit(本文未展开,按需另配)。
- 生产环境慎把用户随便加入
wheel;密码与组权限按规范最小化。