手把手教你离线搞定CUDA和cuDNN:从下载到配置,再到打包迁移完整流程(含超算实战)
手把手教你离线搞定CUDA和cuDNN:从下载到配置,再到打包迁移完整流程(含超算实战)
在科研机构或企业内部,经常会遇到需要在内网服务器或超算平台上部署深度学习环境的场景。这些环境通常严格限制外网访问,甚至完全隔离,给依赖大量开源工具和库的深度学习工作带来了不小挑战。本文将详细介绍如何在完全离线的Linux系统中,从零开始搭建CUDA和cuDNN环境,创建隔离的Anaconda虚拟环境,并最终将整个环境打包迁移到其他机器上使用。
1. 准备工作与环境检查
在开始安装之前,我们需要做好充分的准备工作。首先确认目标机器的硬件配置和操作系统版本,这将直接影响后续软件版本的选择。
关键检查项:
- GPU型号与驱动版本:
nvidia-smi命令可以查看 - Linux发行版与内核版本:
cat /etc/*release和uname -r - 系统架构:
uname -m(通常为x86_64)
注意:CUDA Toolkit需要与NVIDIA驱动版本匹配。驱动版本过低可能导致无法安装最新CUDA。
推荐使用以下命令收集系统信息:
# 查看GPU信息 nvidia-smi # 查看系统信息 cat /etc/*release uname -a版本匹配参考表:
| NVIDIA驱动版本 | 支持的CUDA最高版本 |
|---|---|
| 450.80.02 | CUDA 11.0 |
| 470.82.01 | CUDA 11.4 |
| 515.65.01 | CUDA 11.7 |
| 525.85.12 | CUDA 12.0 |
| 535.86.10 | CUDA 12.2 |
2. 离线安装CUDA Toolkit
2.1 下载合适的CUDA版本
在有网络连接的机器上,访问 NVIDIA开发者网站 下载对应版本的CUDA Toolkit。选择"Linux"→"x86_64"→"Runfile(local)"格式的安装包。
下载示例:
wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run2.2 传输安装包到目标机器
将下载好的.run文件通过U盘或内网传输工具(如scp)复制到目标机器:
scp cuda_12.2.2_535.104.05_linux.run username@remote_host:/path/to/destination2.3 安装CUDA Toolkit
在目标机器上执行以下步骤:
赋予执行权限:
chmod +x cuda_12.2.2_535.104.05_linux.run运行安装程序:
./cuda_12.2.2_535.104.05_linux.run
安装过程中需要注意:
- 输入"accept"接受许可协议
- 取消勾选所有组件,只保留"CUDA Toolkit"
- 修改安装路径到有写入权限的目录(如家目录下)
- 不安装驱动(通常由系统管理员维护)
2.4 配置环境变量
编辑~/.bashrc文件,添加以下内容:
export PATH="/path/to/cuda/bin:$PATH" export LD_LIBRARY_PATH="/path/to/cuda/lib64:$LD_LIBRARY_PATH"使配置生效:
source ~/.bashrc验证安装:
nvcc --version3. 离线安装cuDNN
3.1 下载匹配的cuDNN版本
访问 NVIDIA cuDNN下载页面 ,下载与已安装CUDA版本对应的cuDNN Library for Linux。
版本匹配原则:
- CUDA 12.x → cuDNN 8.x
- CUDA 11.x → cuDNN 8.x
- CUDA 10.x → cuDNN 7.x
3.2 安装cuDNN
将下载的压缩包传输到目标机器后,执行以下步骤:
解压文件:
tar -xzvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz复制文件到CUDA目录:
cp cudnn-*-archive/include/cudnn*.h /path/to/cuda/include/ cp -P cudnn-*-archive/lib/libcudnn* /path/to/cuda/lib64/ chmod a+r /path/to/cuda/include/cudnn*.h /path/to/cuda/lib64/libcudnn*
4. 离线创建Anaconda环境
4.1 安装Miniconda
下载Miniconda安装脚本并传输到目标机器:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh安装命令:
bash Miniconda3-latest-Linux-x86_64.sh -b -p /path/to/miniconda初始化conda:
source /path/to/miniconda/bin/activate conda init4.2 创建离线虚拟环境
在有网络的机器上准备环境:
conda create -n myenv python=3.9 conda activate myenv conda install numpy pandas scipy导出环境配置:
conda env export > environment.yml下载所有依赖包:
conda pack -n myenv -o myenv.tar.gz在目标机器上恢复环境:
mkdir -p /path/to/envs/myenv tar -xzf myenv.tar.gz -C /path/to/envs/myenv
5. 环境打包与迁移实战
5.1 使用conda-pack打包环境
conda install -c conda-forge conda-pack conda pack -n myenv -o myenv.tar.gz --ignore-editable-packages5.2 跨机器传输环境包
使用scp命令传输打包好的环境:
scp myenv.tar.gz username@remote_host:/path/to/destination5.3 在目标机器上恢复环境
创建环境目录:
mkdir -p ~/.conda/envs/myenv解压环境包:
tar -xzf myenv.tar.gz -C ~/.conda/envs/myenv激活环境:
source ~/.conda/envs/myenv/bin/activate
5.4 验证环境完整性
import torch print(torch.cuda.is_available()) # 应返回True print(torch.backends.cudnn.version()) # 应显示cuDNN版本6. 超算平台实战技巧
在超算平台上部署深度学习环境有其特殊性,这里分享几个实用技巧:
模块系统集成:许多超算使用环境模块系统,可以创建自定义模块文件:
# 示例模块文件 #%Module1.0 prepend-path PATH /path/to/cuda/bin prepend-path LD_LIBRARY_PATH /path/to/cuda/lib64作业脚本配置:在提交作业时正确加载环境:
#!/bin/bash #SBATCH --gres=gpu:1 source /path/to/miniconda/bin/activate conda activate myenv python your_script.py存储优化:超算通常有临时存储空间,合理利用:
# 使用$TMPDIR加速IO密集型任务 cp /slow/storage/data $TMPDIR/ cd $TMPDIR多节点注意事项:确保环境在所有计算节点上可用:
# 使用rsync同步环境到所有节点 rsync -avz /path/to/env/ compute-node:/same/path/
在实际项目中,我发现将CUDA安装在用户目录而非系统目录可以避免权限问题,特别是在没有root权限的超算环境中。另外,定期使用conda clean -a可以节省宝贵的存储空间。
