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 模块

相关推荐
杨杨杨大侠4 小时前
Jev、Kev、Laya:决策模型怎么选,什么时候需要微调?
人工智能·python·agent
LOVE️YOU5 小时前
Python 在定义函数时,究竟定义的是什么?
python
段一凡-华北理工大学5 小时前
大模型应用开发 100 天:Python + LLM 从入门到精通 day26~Prompt 调试与优化——A/B 测试与效果评估
windows·python·大模型·prompt·智能体·提示词工程·高炉智能化
Minecraft红客5 小时前
以撒的结合
python·游戏·电脑·娱乐
Circ.5 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录
开发语言·python
风早爽太6 小时前
用 ‌Render‌ 快速部署网站和常见问题解决
python·fastapi
海海不掉头发6 小时前
阶段五_实验34-38_学习总结
深度学习·神经网络·学习·机器学习
李航19837 小时前
给自己的图形引擎,配上了AI渲染,做设计真是太方便了
人工智能·python·计算机视觉·ai·ai编程
L@ncor7 小时前
第六章 框架开发实践 · 学习笔记(AutoGen / AgentScope / CAMEL / LangGraph)
python·框架·autogen·langgraph·agentscope
Zhou1411367 小时前
SpringSecurity_02_授权与高级功能
开发语言·python