跳到主要内容

CUDA 环境配置指南

CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的并行计算平台和编程模型。本指南将详细介绍如何安装和配置 CUDA 环境。

概述​

什么是 CUDA?​

CUDA 是 NVIDIA 开发的并行计算平台和 API 模型,允许开发者使用 NVIDIA GPU 进行通用计算。主要包括:

  • CUDA Toolkit: 开发工具包
  • CUDA Runtime: 运行时库
  • CUDA Driver API: 驱动 API
  • cuDNN: 深度学习加速库

CUDA 版本说明​

CUDA 版本发布日期支持的 GPU 架构最低驱动版本
12.42024-02Hopper, Ada, Ampere, Volta, Pascal550.00
12.32023-11Hopper, Ada, Ampere, Volta, Pascal545.00
12.22023-06Hopper, Ada, Ampere, Volta, Pascal535.00
12.12023-02Hopper, Ada, Ampere, Volta, Pascal530.00
12.02022-11Hopper, Ada, Ampere, Volta, Pascal525.00
11.82022-08Ampere, Volta, Turing, Pascal520.00

cuDNN 版本对应​

CUDA 版本cuDNN 版本
12.49.0
12.38.9
12.28.9
12.18.9
12.08.8
11.88.7

安装前准备​

检查 GPU 兼容性​

lspci | grep -i nvidia

检查系统版本​

cat /etc/os-release
uname -r

检查现有 CUDA 安装​

nvcc --version
nvidia-smi

检查磁盘空间​

df -h

CUDA 安装需要至少 10GB 空间。

Linux 安装指南​

方法一:使用 Runfile 安装(推荐)​

1. 下载 CUDA Toolkit​

cd /tmp
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run

2. 禁用 Nouveau 驱动​

sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u
sudo reboot

3. 安装依赖​

sudo apt-get update
sudo apt-get install -y build-essential dkms freeglut3-dev libxmu-dev libxi-dev

4. 运行安装程序​

sudo sh cuda_12.4.0_550.54.14_linux.run

5. 选择安装选项​

  • Driver: 选择安装(如果未安装)
  • CUDA Toolkit: 选择安装
  • CUDA Samples: 可选
  • CUDA Documentation: 可选

6. 配置环境变量​

编辑 ~/.bashrc:

export PATH=/usr/local/cuda-12.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-12.4

应用配置:

source ~/.bashrc

7. 验证安装​

nvcc --version
nvidia-smi

方法二:使用包管理器安装​

Ubuntu/Debian​

1. 添加 NVIDIA 仓库​
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
2. 安装 CUDA​
sudo apt-get install -y cuda-12-4
3. 安装 cuDNN​
sudo apt-get install -y cudnn-cuda-12
4. 配置环境变量​
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

CentOS/RHEL​

1. 添加 NVIDIA 仓库​
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo yum install -y https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
2. 安装 CUDA​
sudo yum clean all
sudo yum install -y cuda-12-4
3. 安装 cuDNN​
sudo yum install -y cudnn-cuda-12

方法三:使用 Docker 环境​

1. 拉取 CUDA 镜像​

docker pull nvidia/cuda:12.4.0-devel-ubuntu22.04

2. 运行容器​

docker run --gpus all -it nvidia/cuda:12.4.0-devel-ubuntu22.04 bash

3. 验证 CUDA​

nvcc --version
nvidia-smi

Windows 安装指南​

方法一:使用安装程序(推荐)​

1. 下载 CUDA Toolkit​

访问 CUDA Toolkit 下载页面

选择:

  • Operating System: Windows
  • Architecture: x86_64
  • Version: 10/11
  • Installer Type: exe (local)

2. 运行安装程序​

双击下载的 .exe 文件

3. 选择安装选项​

  • 精简:推荐,自动安装所有组件
  • 自定义:可选择安装组件

4. 配置环境变量​

安装程序会自动配置环境变量:

PATH: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin
CUDA_PATH: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4

5. 验证安装​

打开命令提示符:

nvcc --version
nvidia-smi

方法二:使用 conda 安装​

1. 安装 Miniconda​

下载并安装 Miniconda

2. 创建 CUDA 环境​

conda create -n cuda-env python=3.10
conda activate cuda-env

3. 安装 CUDA Toolkit​

conda install -c nvidia cuda-toolkit=12.4
conda install -c nvidia cudnn=9.0

cuDNN 安装​

Linux 安装​

方法一:使用包管理器​

sudo apt-get install -y cudnn-cuda-12

方法二:手动安装​

1. 下载 cuDNN​

访问 NVIDIA cuDNN 下载页面

需要 NVIDIA 开发者账号。

2. 解压文件​
tar -xzvf cudnn-linux-x86_64-9.0.0.306_cuda12-archive.tar.xz
3. 复制文件​
sudo cp cudnn-linux-x86_64-9.0.0.306_cuda12-archive/include/* /usr/local/cuda-12.4/include/
sudo cp cudnn-linux-x86_64-9.0.0.306_cuda12-archive/lib/* /usr/local/cuda-12.4/lib64/
sudo chmod a+r /usr/local/cuda-12.4/include/cudnn*.h /usr/local/cuda-12.4/lib64/libcudnn*
4. 验证安装​
cat /usr/local/cuda-12.4/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

Windows 安装​

1. 下载 cuDNN​

访问 NVIDIA cuDNN 下载页面

2. 解压文件​

解压下载的 ZIP 文件

3. 复制文件​

将以下文件复制到 CUDA 安装目录:

bin\*.dll -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin\
include\*.h -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\include\
lib\x64\*.lib -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\lib\x64\

环境配置​

配置环境变量​

Linux​

编辑 ~/.bashrc 或 ~/.zshrc:

# CUDA 路径
export CUDA_HOME=/usr/local/cuda-12.4
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

# cuDNN 路径
export CUDNN_PATH=/usr/local/cuda-12.4

# CUDA 缓存
export CUDA_CACHE_DISABLE=0
export CUDA_CACHE_MAXSIZE=2147483648

应用配置:

source ~/.bashrc

Windows​

系统属性 → 高级 → 环境变量:

CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4
PATH=%CUDA_PATH%\bin;%PATH%

多版本管理​

安装多个 CUDA 版本​

# 安装 CUDA 12.4
sudo sh cuda_12.4.0_550.54.14_linux.run --silent --toolkit --toolkitpath=/usr/local/cuda-12.4

# 安装 CUDA 11.8
sudo sh cuda_11.8.0_520.61.05_linux.run --silent --toolkit --toolkitpath=/usr/local/cuda-11.8

切换 CUDA 版本​

创建切换脚本 switch-cuda.sh:

#!/bin/bash

VERSION=$1

if [ -z "$VERSION" ]; then
echo "Usage: switch-cuda.sh <version>"
echo "Available versions:"
ls -d /usr/local/cuda-* | xargs -n1 basename
exit 1
fi

CUDA_PATH=/usr/local/cuda-$VERSION

if [ ! -d "$CUDA_PATH" ]; then
echo "CUDA $VERSION not found"
exit 1
fi

export CUDA_HOME=$CUDA_PATH
export PATH=$CUDA_PATH/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH

echo "Switched to CUDA $VERSION"
nvcc --version

使用方法:

source switch-cuda.sh 12.4
source switch-cuda.sh 11.8

验证安装​

编译示例程序​

1. 创建测试文件​

创建 vector_add.cu:

#include <stdio.h>

__global__ void vectorAdd(float *a, float *b, float *c, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) {
c[i] = a[i] + b[i];
}
}

int main() {
int n = 1000000;
float *a, *b, *c;
float *d_a, *d_b, *d_c;
size_t size = n * sizeof(float);

a = (float*)malloc(size);
b = (float*)malloc(size);
c = (float*)malloc(size);

for (int i = 0; i < n; i++) {
a[i] = i;
b[i] = i * 2;
}

cudaMalloc(&d_a, size);
cudaMalloc(&d_b, size);
cudaMalloc(&d_c, size);

cudaMemcpy(d_a, a, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_b, b, size, cudaMemcpyHostToDevice);

int blockSize = 256;
int numBlocks = (n + blockSize - 1) / blockSize;
vectorAdd<<<numBlocks, blockSize>>>(d_a, d_b, d_c, n);

cudaMemcpy(c, d_c, size, cudaMemcpyDeviceToHost);

printf("Result: c[0] = %f, c[1] = %f, c[999] = %f\n", c[0], c[1], c[999]);

cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
free(a);
free(b);
free(c);

return 0;
}

2. 编译程序​

nvcc vector_add.cu -o vector_add

3. 运行程序​

./vector_add

预期输出:

Result: c[0] = 0.000000, c[1] = 3.000000, c[999] = 2997.000000

运行 CUDA 示例​

cd /usr/local/cuda-12.4/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

测试 cuDNN​

创建 test_cudnn.cu:

#include <cudnn.h>
#include <stdio.h>

int main() {
cudnnHandle_t handle;
cudnnStatus_t status = cudnnCreate(&handle);

if (status == CUDNN_STATUS_SUCCESS) {
printf("cuDNN initialized successfully\n");
cudnnDestroy(handle);
return 0;
} else {
printf("cuDNN initialization failed: %s\n", cudnnGetErrorString(status));
return 1;
}
}

编译运行:

nvcc test_cudnn.cu -o test_cudnn -lcudnn
./test_cudnn

常见问题​

1. 找不到 nvcc 命令​

问题: nvcc: command not found

解决方案:

export PATH=/usr/local/cuda-12.4/bin:$PATH
source ~/.bashrc

2. 库文件找不到​

问题: error while loading shared libraries: libcudart.so

解决方案:

export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH
sudo ldconfig

3. 版本不匹配​

问题: CUDA 版本与驱动不兼容

解决方案:

nvidia-smi

nvcc --version

确保驱动版本支持 CUDA 版本。

4. 编译错误​

问题: 编译 CUDA 程序失败

解决方案:

nvcc --version
gcc --version
g++ --version

sudo apt-get install build-essential

5. cuDNN 找不到​

问题: cudnn.h: No such file or directory

解决方案:

ls /usr/local/cuda-12.4/include/cudnn*.h

sudo cp cudnn/include/* /usr/local/cuda-12.4/include/
sudo cp cudnn/lib64/* /usr/local/cuda-12.4/lib64/

最佳实践​

1. 版本管理​

  • 使用最新稳定版本
  • 多版本共存时明确指定路径
  • 记录每个项目的 CUDA 版本

2. 环境隔离​

  • 使用 Docker 容器
  • 使用 conda 环境
  • 使用 virtualenv

3. 性能优化​

  • 配置 CUDA 缓存
  • 优化编译选项
  • 使用 NVCC 优化标志

4. 开发建议​

  • 定期更新 CUDA 版本
  • 测试不同版本兼容性
  • 使用 CUDA profiler 优化性能

参考资料​

官方文档​

学习资源​


提示

安装 CUDA 前,请确保已正确安装 NVIDIA 驱动,并检查版本兼容性。

信息

本指南基于 CUDA 12.4 版本编写,不同版本安装步骤可能略有差异。