CentOS 7 配置 Python 3.12.4 + RTX 4090 深度学习环境全记录

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 文件)。

最终解决方案

  1. 彻底清理并重新配置 (使用 --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
  2. 手动复制缺失的 .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
  3. 验证 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 仍在加载,尽管已配置黑名单。

步骤

  1. 创建黑名单文件:

    复制代码
    echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf
    echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf
  2. 重建 initramfs:

    复制代码
    dracut --force
  3. 编辑 GRUB 内核参数(更可靠):

    复制代码
    vi /etc/default/grub
    # 在 GRUB_CMDLINE_LINUX 末尾添加:rd.driver.blacklist=nouveau modprobe.blacklist=nouveau
    grub2-mkconfig -o /boot/grub2/grub.cfg
  4. 重启:

    复制代码
    reboot
  5. 验证:

    复制代码
    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 模块

相关推荐
DreamLife☼1 小时前
Agent开发环境搭建完全指南
python·docker·typescript·node·工业知识点
李可以量化1 小时前
miniqmt 行情的备选方案 ---tdxrs(下)
python
2601_962381582 小时前
Python爬虫requests框架详解!零基础学会网络请求,抓取全网数据
爬虫·python·网络请求·数据抓取·requests框架
李可以量化2 小时前
miniqmt 行情的备选方案 ---tdxrs(上)
python
Cenxi2 小时前
f-string 完全手册:60 题从入门到实战
python
2601_962299882 小时前
Python编写Linux命令指南
linux·python·开发·命令·指南
此冬歌咏2 小时前
自动化服务器运维监控系统(python+shell)
linux·运维·服务器·开发语言·python·自动化
zhanghaha13143 小时前
Python进阶教程:23_Scrapy 爬虫框架 零基础超详细教程
python·信息可视化
爱读源码的大都督3 小时前
DeepSeek面试官问:生产RAG系统回答不准确,该如何定位和优化?这样回答,能让面试官当场给你Offer!
java·后端·python