作为一名长期在Linux环境下折腾深度学习的老兵,我深知在无网络环境中搭建CUDA开发环境的痛苦。本文将基于NVIDIA GeForce RTX 4070 Ti显卡,详细记录在x86_64架构的Linux系统上离线安装CUDA全家桶(驱动+Toolkit+cuDNN)的全过程,包含多个我亲测有效的避坑技巧。
在开始前,必须确认硬件信息。执行以下命令检查NVIDIA显卡是否被系统识别:
bash复制lspci | grep -i nvidia
典型输出示例:
code复制01:00.0 VGA compatible controller: NVIDIA Corporation Device 2782 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 22bc (rev a1)
重要提示:如果未显示任何信息,可能是:
- 显卡未正确安装
- 主板未启用PCIe插槽
- 服务器需要先进入BIOS开启显卡支持
离线安装的关键是提前下载好所有依赖包。对于RTX 40系列显卡,建议使用R515以上版本的驱动:
下载命令:
bash复制wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/595.58.03/NVIDIA-Linux-x86_64-595.58.03.run
chmod +x NVIDIA-Linux-x86_64-595.58.03.run
安装前必须:
具体步骤:
bash复制# 关闭图形界面(以Ubuntu为例)
sudo systemctl isolate multi-user.target
# 禁用nouveau
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
# 安装驱动
sudo ./NVIDIA-Linux-x86_64-595.58.03.run
安装时常见选项:
安装后验证:
bash复制nvidia-smi
正常应显示显卡型号、驱动版本和CUDA版本信息。
CUDA Toolkit版本必须与驱动版本兼容。对于驱动595.58.03,最高支持CUDA 12.0,但实际测试13.2也能正常工作。版本对应关系可参考NVIDIA官方兼容性表格。
从NVIDIA CUDA归档页下载runfile(local)格式的安装包:
bash复制wget https://developer.download.nvidia.com/compute/cuda/13.2.1/local_installers/cuda_13.2.1_595.58.03_linux.run
执行安装:
bash复制sudo sh cuda_13.2.1_595.58.03_linux.run
关键安装选项:
安装后配置环境变量:
bash复制echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
验证安装:
bash复制nvcc --version
cuDNN版本必须与CUDA Toolkit严格匹配。对于CUDA 13.2,推荐使用cuDNN 8.9.x系列。可通过cuDNN归档页查看对应关系。
由于官方推荐通过apt安装,离线环境下需要手动下载.deb或.tgz包。这里介绍两种方案:
bash复制wget https://developer.download.nvidia.com/compute/cudnn/9.20.0/local_installers/cudnn-local-repo-ubuntu2204-9.20.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2204-9.20.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-9.20.0/cudnn-*-keyring.gpg /usr/share/keyrings/
bash复制wget https://developer.download.nvidia.com/compute/cudnn/9.20.0/local_installers/cudnn-linux-x86_64-9.20.0_cuda13-archive.tar.xz
tar -xvf cudnn-linux-x86_64-9.20.0_cuda13-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
验证安装:
bash复制cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
症状: 安装过程中提示"Unable to load the kernel module"
解决方案:
bash复制lsmod | grep nouveau
应无任何输出bash复制uname -r
bash复制sudo apt install linux-headers-$(uname -r)
症状: nvcc --version与nvidia-smi显示的CUDA版本不一致
原因分析:
解决方案:
只要两个版本在官方兼容列表内即可正常工作,无需特别处理。如需精确匹配,可参考NVIDIA官方的版本兼容表。
有时需要同时维护多个CUDA版本,推荐使用update-alternatives管理:
bash复制sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-13.2 132
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.0 120
sudo update-alternatives --config cuda
编译运行CUDA示例程序:
bash复制cd /usr/local/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery
正常输出应包含"Result = PASS"字样,并显示详细的设备信息。
bash复制cd /usr/local/cuda/samples/1_Utilities/bandwidthTest
make
./bandwidthTest
重点关注Host到Device的传输带宽是否接近PCIe的理论值(如PCIe 4.0 x16约32GB/s)。
安装PyTorch测试环境:
bash复制pip install torch --extra-index-url https://download.pytorch.org/whl/cu132
测试脚本:
python复制import torch
print(torch.cuda.is_available()) # 应输出True
print(torch.cuda.get_device_name(0)) # 应显示显卡型号
bash复制sudo /usr/local/cuda/bin/uninstall_cuda_*.pl
我在实际部署中发现,对于生产环境,建议使用容器化方案(如NVIDIA Docker)来隔离CUDA环境,可以避免大部分兼容性问题。另外,对于无网络环境的服务器,可以预先在有网络的机器上拉取所有依赖包:
bash复制mkdir cuda-offline
cd cuda-offline
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances cuda | grep "^\w" | sort -u)
最后提醒,所有NVIDIA组件的安装都需要root权限,操作前务必确认命令的正确性。建议先在测试环境验证整套流程,再应用到生产服务器。