一文说清楚CUDA环境

1 CUDA是什么

1.1 使用CUDA算的快

CUDA是一个专有的并行计算平台和应用程序编程接口(API),允许软件使用某些类型的图形处理单元(GPU)进行加速的通用处理。

CUDA 由 Nvidia 于 2006 年创建。

图形处理单元(GPU)作为一种专用计算机处理器,满足实时高分辨率 3D 图形计算密集型任务的需求。到 2012 年,GPU 已经发展成为高度并行的多核系统,能够高效地处理大量数据块。这种设计在需要并行处理大量数据块的情况下比通用中央处理器(CPU)更有效,例如:

  • 加密哈希函数
  • 机器学习
  • 分子动力学模拟
  • 物理引擎

艾恩·巴克在 2000 年斯坦福大学期间,使用 32 张 GeForce 显卡创建了一台 8K 游戏机,随后获得了 DARPA 的资助,在 GPU 上进行通用并行编程。此后,他加入了英伟达,自 2004 年以来一直负责 CUDA 的开发。在推动 CUDA 的过程中,黄仁勋希望英伟达的 GPU 成为科学计算的一般硬件。CUDA 于 2006 年发布。大约在 2015 年,CUDA 的关注点转向了神经网络。

1.2 CUDA的市占率高

CUDA拥有庞大的开发者社区和丰富的资源库,在科学计算、深度学习等领域得到了广泛应用,拥有大量的优化库和开发工具,使得这些领域的应用更为便捷。同时,CUDA库是主流深度学习中GPU并行加速的基础,尤其在视觉处理上能力优越。

CUDA生态系统已经具有更高的成熟度和稳定性,开发者可以借助已有的资源和文档进行开发和部署,减少学习曲线和风险,CUDA与英伟达硬件的紧密结合,以及其软硬件绑定的特点,客户切换软硬件的门槛较高,从而形成了极强的客户粘性,

其版本迭代都是根据其自身AI芯片性能特点而进行优化。选择兼容CUDA的AI芯片厂商虽然在软件层面可以实现提供类似CUDA的函数库、API接口以及编译环境,但硬件层面难以实现与英伟达AI芯片的内核、架构、制造工艺等方面的相似性,导致算力利用率不足甚至性能衰减。

CUDA作为生态中很重要的一环,使得英伟达在市场占用上有很大的比率

2023年全球数据中心GPU总出货量为385万颗,其中英伟达的数据中心GPU(包括AI GPU)出货量为376万颗,占总出货量的98%。此外,在销售收入方面,英伟达也占据了98%的市场份额,收入达到362亿美元,是2022年的三倍多。

1.3 CUDA跳不过

在大部分的AI使用场景下,都存在CUDA的身影

1.4 CUDA的软件架构图

CUDA软件环境由三部分组成:

  • CUDA Toolkit - 库(libraries)、运行时(Runtime)和工具(tools)

用于构建 CUDA 应用程序的 用户模式SDK

  • CUDA 驱动程序

用于运行 CUDA 应用程序的 用户模式驱动组件(例如 Linux 系统上的 libcuda.so)

  • NVIDIA GPU 设备驱动程序

NVIDIA GPU 的 内核模式驱动组件

在仅使用 GPU 运行应用程序时(而不是开发应用程序),CUDA Toolkit通常是可选的,不是必须要安装的,因为 CUDA 应用程序通常打包了所需的 CUDA 运行时和库(通过静态或动态链接)

如torch的GPU版本是自带cuda运行时的,见 如何选择与CUDA版本匹配 的Python章节。

1.5 CUDA环境的一般安装流程

1.安装 NVIDIA 驱动程序(不要安装 CUDA 工具包,因为这会引入可能不是必需或想要的额外依赖项)

驱动程序,我们一般在电脑操作系统安装完成后,就安装了,因为要玩游戏哈

2.安装 CUDA Toolkit 工具包。见“ CUDA Toolkit 安装”章节

3.安装其他组件,如 cuDNN 或 TensorRT,具体取决于应用程序的要求和依赖项。见“cuDNN安装”章节

参考:NVIDIA Datacenter Drivers:https://docs.nvidia.com/datacenter/tesla/drivers/index.html

2 CUDA Toolkit 安装

2.1 CUDA Toolkit 所有组件介绍

参考:NVIDIA CUDA Toolkit Release Notes:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#major-components

2.2 确定可以安装的 CUDA Toolkit 版本

为了运行 CUDA 应用程序,系统应具备与 CUDA Toolkit 兼容的 NVIDIA显示驱动程序

每个 CUDA Toolkit 安装包下载下来后,一般都附带了一个 NVIDIA显示驱动程序 包,以便系统没有显示驱动程序使用。

此显示驱动程序支持 CUDA Toolkit 该版本中引入的所有功能。驱动程序包包括用户模式 CUDA 驱动程序(libcuda.so)和运行应用程序所需的内核模式组件。

如图中的 Driver components,这个 Driver components 我们一般在安装电脑操作系统后就都安装完成了,我们只需要确定要安装的 CUDA Toolkit 是被当前系统 NVIDIA显示驱动程序 支持的就可以了

通常,升级 CUDA Toolkit 工具包需要同时升级工具包和驱动程序,以获得最新的工具包和驱动程序功能。

image-20241116172003538

确定CUDA Toolkit版本

打开CMD命令行执行: nvidia-smi 命令

看到的 CUDA Version:12.4 就是当前系统可以安装 CUDA Toolkit 的最高版本号

Driver Version: 显卡驱动版本号

C:\Users\litx>nvidia-smi
Sat Nov 16 16:19:12 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 552.12                 Driver Version: 552.12         CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                     TCC/WDDM  | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 2050      WDDM  |   00000000:01:00.0 Off |                  N/A |
| N/A   54C    P0              8W /   40W |       0MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

2.3 下载 CUDA Toolkit

打开官方下载页面:https://developer.nvidia.com/cuda-downloads,选择自己的选项,如:

安装完成后使用 nvcc --version 查询 CUDA Toolkit 版本号

C:\Users\litx>nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Aug_15_22:09:35_Pacific_Daylight_Time_2023
Cuda compilation tools, release 12.2, V12.2.140
Build cuda_12.2.r12.2/compiler.33191640_0

如果现在把显卡驱动升级了,而 CUDA Toolkit 没有升级,会发现 nvidia-smiCUDA Version 是大于 nvcc --version 的版本号的

3 cuDNN安装

NVIDIA CUDA深度神经网络库(cuDNN)是一个用于深度神经网络的 GPU 加速库。cuDNN 提供了针对标准例程(如正向和反向卷积、注意力、矩阵乘法、池化和归一化)的高度优化的实现。

cuDNN 加速广泛使用的深度学习框架,包括 Caffe2、Chainer、Keras、MATLAB、MxNet、PaddlePaddle、PyTorch 和 TensorFlow。

3.1 安装条件

有关操作系统、CUDA、CUDA 驱动程序和 NVIDIA 硬件的最新兼容性软件版本,请参阅 NVIDIA cuDNN 支持矩阵。

3.1.1 安装 NVIDIA 显卡驱动程序

在 Windows 系统上安装最新的 NVIDIA 显卡驱动程序。

3.1.2 安装 CUDA 工具包

见“ CUDA Toolkit安装”章节

3.1.3 安装 Zlib

Zlib是cuDNN所需的数据压缩库。

  1. 下载并解压 zlib 包。32 位计算机的用户应下载 32 位 ZLIB DLL。

下载地址:

http://www.winimage.com/zLibDll/zlib123dllx64.zip

http://www.winimage.com/zLibDll/zlib123dll.zip

将 zlibwapi.dll 的目录路径添加到环境变量PATH中。

我把zlib解压后放到C:\Program Files\NVIDIA\zlib123dllx64

并在环境变量PATH中增加了:C:\Program Files\NVIDIA\zlib123dllx64\dll_x64

3.2 下载 Windows 版 cuDNN

下载地址:https://developer.nvidia.com/cudnn

解压下载下的文件 cudnn-windows-x86_64-*_cuda12-archive.zip,并放到 C:\Program Files\NVIDIA\CUDNN 目录

如: C:\Program Files\NVIDIA\CUDNN\v8.9.26\

并把 C:\Program Files\NVIDIA\CUDNN\v8.9.26\ bin 加到环境变量PATH中

参考:https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-892/install-guide/index.html#install-windows

3.3 历史版本

https://docs.nvidia.com/deeplearning/cudnn/archives/index.html

https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-892/install-guide/index.html#install-windows

4 如何选择与CUDA版本匹配的Pytorch

PyTorch 通过调用 CUDA 提供的库(如 cuDNN、cuBLAS),实现了 GPU 加速的深度学习功能。将 CUDA 的底层功能封装为易于使用的高层 API,让开发者专注于模型构建和训练。这使得 PyTorch 用户无需关心 CUDA 的底层实现细节。

PyTorch 的发行版通常会绑定对应版本的 CUDA,例如 torch==2.0.0+cu118 表示这个版本的 PyTorch 使用 CUDA 11.8

选择正确的Pytorch版本:

打开Pytorch官网:https://pytorch.org/get-started/locally/

Start Locally 会看到选择项目和生成的安装命令,

PyTorch Build: 选标准版本Stable

Your OS: 选自己的系统版本

Package: 选包管理工具,官方推荐Conda,我这边选择pip

Language: 我这边选择Python

Compute Platform: 这个CUDA版本选在小于nvidia-smi的CUDA Version,都可以,看你自己的应用程序有没有要求,这个版本就是PyTorch编译时使用的运行时环境,Torch安装后会自带运行时(这时系统中没有单独安装CUDA Toolkit,你也会发现应用程序可以运行在Torch自带CUDA运行时中)

在Python环境中查询,可以查到 torch.cuda.is_available()=True

(venv) PS G:\workspace\idea\py\github\hello-cuda> python
Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec  6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True

Run this Command: 最后根据所选项目生成的安装命令

–END–

原文地址:https://mp.weixin.qq.com/s/mYt89OxVJORnBaCJKijQKg