CentOS 7 配置 Python 3.12.4 + RTX 4090 深度学习环境全记录
本文档详细记录了在 CentOS 7 系统上从零开始配置 Python 3.12.4、NVIDIA 驱动、CUDA 12.4 以及 PyTorch GPU 环境的完整步骤,包括遇到的各种问题及其解决方案。
1. 初始环境
- 操作系统:CentOS Linux 7 (Core)
- 内核版本:3.10.0-1160.119.1.el7.x86_64
- 默认 Python:2.7.5
- 显卡:NVIDIA GeForce RTX 4090
- 目标:安装 Python 3.12.4 并启用 GPU 支持
2. 修复 YUM 源(CentOS 7 EOL 后)
问题
CentOS 7 已于 2024 年 6 月 30 日结束生命周期(EOL),官方镜像源已迁移至 vault.centos.org,但该站点屏蔽了部分国家/地区的 IP(返回 403 Forbidden)。
解决方案
改用国内镜像源(阿里云 Vault 镜像)。
操作:
# 备份原 repo 文件
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
# 创建新的 repo 文件,指向阿里云 Vault
cat > /etc/yum.repos.d/CentOS-Vault.repo << 'EOF'
[base]
name=CentOS-7 - Base - Aliyun
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7
enabled=1
[updates]
name=CentOS-7 - Updates - Aliyun
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/updates/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7
enabled=1
[extras]
name=CentOS-7 - Extras - Aliyun
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/extras/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7
enabled=1
[centos-sclo-rh]
name=CentOS-7 - SCLo rh - Aliyun
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/sclo/x86_64/rh/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7
enabled=1
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo - Aliyun
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/sclo/x86_64/sclo/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7
enabled=1
EOF
注意 :阿里云镜像的版本号使用了 7.9.2009(CentOS 7 最终版本),若失效可尝试其他版本。
验证:
yum clean all
yum makecache
安装过程中部分包可能出现 GPG 校验失败,可使用 --nogpgcheck 临时绕过。
3. 安装 GCC 11(devtoolset-11)
原因:CentOS 7 默认 GCC 4.8.5 不支持编译 Python 3.12(需要 GCC 7+)。
操作
yum install -y devtoolset-11 --nogpgcheck
scl enable devtoolset-11 bash # 启用新 GCC 环境
gcc --version # 确认版本为 11.2.1
注意 :每次重新登录需重新执行 scl enable devtoolset-11 bash,或将其加入 ~/.bashrc。
4. 编译安装 OpenSSL 1.1.1w
原因:CentOS 7 自带 OpenSSL 1.0.2k 不满足 Python 3.12 对 SSL 的要求(需要 ≥1.1.1)。
操作
cd /root
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -zxf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl-1.1.1w --openssldir=/usr/local/openssl-1.1.1w shared zlib
make -j $(nproc)
make install
echo '/usr/local/openssl-1.1.1w/lib' > /etc/ld.so.conf.d/openssl-1.1.1w.conf
ldconfig
5. 编译安装 Python 3.12.4
第一次尝试(未指定 OpenSSL 路径)
wget https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tgz
tar -zxf Python-3.12.4.tgz
cd Python-3.12.4
./configure --prefix=/usr/local/python3.12 --enable-optimizations --enable-shared --with-ssl
make -j $(nproc)
make altinstall
结果 :安装成功但 _ssl 模块缺失,因为系统 OpenSSL 版本过低,而 --with-ssl 未指定自定义路径。
第二次尝试(指定 OpenSSL 路径)
使用 --with-ssl=/usr/local/openssl-1.1.1w 重新配置并编译,但 _ssl 模块仍然未被安装(配置阶段检测成功,但 make install 未复制 .so 文件)。
最终解决方案
-
彻底清理并重新配置 (使用
--with-openssl替代--with-ssl):cd /root/Python-3.12.4 make distclean export LDFLAGS="-L/usr/local/openssl-1.1.1w/lib -Wl,-rpath=/usr/local/openssl-1.1.1w/lib" export CPPFLAGS="-I/usr/local/openssl-1.1.1w/include" export PKG_CONFIG_PATH=/usr/local/openssl-1.1.1w/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --prefix=/usr/local/python3.12 \ --enable-optimizations \ --enable-shared \ --with-openssl=/usr/local/openssl-1.1.1w \ --with-openssl-rpath=auto make -j $(nproc) make altinstall -
手动复制缺失的
.so文件 (make altinstall未复制_ssl.so和_hashlib.so):cp /root/Python-3.12.4/Modules/_ssl.cpython-312-x86_64-linux-gnu.so /usr/local/python3.12/lib/python3.12/lib-dynload/_ssl.so cp /root/Python-3.12.4/Modules/_hashlib.cpython-312-x86_64-linux-gnu.so /usr/local/python3.12/lib/python3.12/lib-dynload/_hashlib.so -
验证 SSL:
python3.12 -c "import ssl; print(ssl.OPENSSL_VERSION)" # 输出:OpenSSL 1.1.1w 11 Sep 2023
问题 :为什么 make altinstall 没有自动复制这些文件?推测是 make install 逻辑中的某个条件未满足(可能与 --enable-optimizations 或共享库路径有关),手动复制可临时解决。
6. 安装 NVIDIA 显卡驱动
6.1 禁用 Nouveau 开源驱动
问题 :lsmod | grep nouveau 显示 Nouveau 仍在加载,尽管已配置黑名单。
步骤:
-
创建黑名单文件:
echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf -
重建 initramfs:
dracut --force -
编辑 GRUB 内核参数(更可靠):
vi /etc/default/grub # 在 GRUB_CMDLINE_LINUX 末尾添加:rd.driver.blacklist=nouveau modprobe.blacklist=nouveau grub2-mkconfig -o /boot/grub2/grub.cfg -
重启:
reboot -
验证:
lsmod | grep nouveau # 应无输出
6.2 下载驱动
问题 :中国镜像 cn.download.nvidia.com 返回 403 Forbidden(User-Agent 限制)。
解决 :使用全球域名 download.nvidia.com 下载:
wget https://download.nvidia.com/XFree86/Linux-x86_64/550.120/NVIDIA-Linux-x86_64-550.120.run
6.3 安装驱动
chmod +x NVIDIA-Linux-x86_64-550.120.run
./NVIDIA-Linux-x86_64-550.120.run --no-opengl-files
安装过程中提示重建 initramfs,选择 Yes。
验证:
nvidia-smi # 显示 RTX 4090,驱动版本 550.120,支持 CUDA 12.4
7. 安装 CUDA Toolkit 12.4
操作
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
chmod +x cuda_12.4.1_550.54.15_linux.run
./cuda_12.4.1_550.54.15_linux.run
重要 :在交互界面中取消勾选 Driver(因为驱动已安装),仅安装 Toolkit。
配置环境变量:
echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
验证:
nvcc -V # 显示 Cuda compilation tools, release 12.4
8. 安装 PyTorch 并验证 GPU
pip3.12 install --upgrade pip
pip3.12 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
验证:
python3.12 -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
# 输出:True 和 NVIDIA GeForce RTX 4090
9. 可选:安装 cuDNN
(未实际安装,但提供步骤)
- 从 NVIDIA cuDNN 下载页 选择 cuDNN 8.9.x(与 CUDA 12.4 兼容)且支持 RHEL7/CentOS7 的版本(建议 JIT 配置)。
- 下载 Tar 包或 RPM 包安装。
10. 总结与建议
- YUM 源:必须切换到 Vault 或国内镜像源,否则无法安装任何软件。
- GCC 版本:必须使用 devtoolset-11 等新版 GCC。
- OpenSSL :务必编译新版本,并在编译 Python 时使用
--with-openssl和正确的环境变量。 - SSL 模块缺失 :若编译后
_ssl模块仍未安装,可手动从Modules/目录复制.so文件。 - NVIDIA 驱动:禁用 Nouveau 需重启并验证,若黑名单无效可添加内核参数。
- CUDA:使用 runfile 安装,避免 YUM 源问题,注意取消驱动安装。
最终环境:
- Python 3.12.4(SSL 可用)
- GCC 11.2.1
- NVIDIA 驱动 550.120
- CUDA 12.4
- PyTorch 2.x(支持 CUDA 12.4)
- RTX 4090 正常识别
附录:常见错误及解决
| 错误 | 原因 | 解决方案 |
|---|---|---|
yum makecache 失败 (403) |
官方源不可用 | 改用国内 Vault 镜像 |
scl enable devtoolset-11 报错 |
未安装 devtoolset-11 | yum install -y devtoolset-11 |
_ssl 模块缺失 |
OpenSSL 版本低或路径未指定 | 编译 OpenSSL 1.1.1,重新编译 Python,手动复制 .so |
| NVIDIA 驱动安装失败(Nouveau 占用) | Nouveau 未禁用 | 添加内核参数 rd.driver.blacklist=nouveau,重启 |
| pip 安装 PyTorch 报 SSL 错误 | Python 缺少 SSL 支持 | 修复 _ssl 模块 |