一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系

目录

主要参考

一、CUDA/cudnn/CUDA Toolkit/NVCC区别简介

参考 Pytorch 使用不同版本的 cuda

  • CUDA:为”GPU通用计算”构建的运算平台。
  • cudnn:为深度学习计算设计的软件库。
  • CUDA Toolkit (nvidia): CUDA完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。
  • CUDA Toolkit (Pytorch): CUDA不完整的工具安装包,其主要包含在使用 CUDA 相关的功能时所依赖的动态链接库。不会安装驱动程序。
  • (NVCC 是CUDA的编译器,只是 CUDA Toolkit 中的一部分)

注:CUDA Toolkit 完整和不完整的区别:在安装了CUDA Toolkit (Pytorch)后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,不需要重新进行编译过程。如需要为 Pytorch 框架添加 CUDA 相关的拓展时(Custom C++ and CUDA Extensions),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit。

二、CUDA Toolkit具体组成

参考 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么
参考 一个文件夹内含有bin lib include 三个文件,该咋使用啊

一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系
一般的结构中,include 包含头文件,bin 包含可执行文件,lib 包含程序实现文件编译生成的library,src包含源代码,doc或help包含文档,samples包含例子。
  • Compiler:NVCC
  • Tools:分析器profiler、调试器debuggers等
  • Libraries:科学库和实用程序库
  • CUDA Samples:CUDA和library API的代码示例
  • CUDA Driver:驱动,需要与”有CUDA功能的GPU”和”CUDA”都兼容。CUDA工具包都对应一个最低版本的CUDA Driver,CUDA Driver向后兼容。

; 三、NVCC简介

参考 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么
参考 CUDA nvcc编译步骤简单讲解(转摘)

  • nvcc其实就是CUDA的编译器,cuda程序有两种代码, 在cpu上的host代码和在gpu上的device代码。
  • .cu后缀:cuda源文件,包括host和device代码
  • nvcc编译例子
nvcc –cuda x.cu –keep

四、版本管理

参考 Pytorch 使用不同版本的 cuda
参考 conda安装的cudatoolkit, cudnn与在主机上安装的cuda, cudnn有何关系?
参考 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么

1、pytorch运行时的CUDA版本

(1)查看cuda 运行版本 和 编译时的版本


import torch.utils.cpp_extension
torch.utils.cpp_extension.CUDA_HOME

import torch
torch.version.cuda

(2)pytorch寻找可用CUDA的过程:

  • 查找可用的cuda路径
    1、环境变量CUDA_HOME 或 CUDA_PATH
    2、/usr/local/cuda
    3、which nvcc的上级上级目录
    (which nvcc 会在环境变量PATH中找)
    4、如果上述都不存在,则torch.utils.cpp_extension.CUDA_HOME为None,会使用conda安装的cudatoolkit,其路径为cudart 库文件目录的上级目录(此时可能是通过 conda 安装的 cudatoolkit,一般直接用 conda install cudatoolkit,就是在这里搜索到 cuda 库的)。
    测试过程(1):改掉默认可以的搜索路径
CUDA_HOME=''
cd /usr/local
sudo mv cuda cuda_old
which nvcc

测试过程(2):测试torch.utils.cpp_extension.CUDA_HOME路径和torch.version.cuda 版本

conda list | grep cudatoolkit

python
import torch.utils.cpp_extension
torch.utils.cpp_extension.CUDA_HOME

import torch
torch.version.cuda

测试过程(3):把上述修改的路径改回去


cd /usr/local
sudo mv  cuda_old cuda
  • 在确定好使用的 cuda 路径后,基于 cuda 的 Pytorch 拓展即会使用确定好的 cuda 目录中的可执行文件( /bin )、头文件( /include )和库文件( /lib64 )完成所需的编译过程。

2、conda下的cudatoolkit

通过 conda 安装 cudatoolkit 包含的库文件在 ~/miniconda3/lib 中,或者在miniconda3/pkgs/cudatoolkit-xxx/lib 中查看)

cd ~/miniconda3/lib
ls | grep -E 'libcu|libnpp|libnv'
cd ~/miniconda3/pkgs/cudatoolkit-xxx/lib

ls | grep -E 'libcu|libnpp|libnv'

conda 的 cudatoolkit只包含pytorch或其他框架( tensorflow、xgboost、Cupy)会使用到的so库文件。

3、nvidia-smi和nvcc显示的CUDA版本

nvidia-smi

一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系
nvcc -V

一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系

CUDA主要有两个API:runtime API、driver API

  • 用于支持driver API的必要文件(如libcuda.so)是由GPU driver installer安装的。
  • 用于支持runtime API的必要文件(如libcudart.so以及nvcc)是由CUDA Toolkit installer安装的。
    nvidia-smi属于driver API、nvcc属于runtime API。
    nvcc属于CUDA compiler-driver tool,只知道runtime API版本,甚至不知道是否安装了GPU driver。

4、使用环境变量查找CUDA

  • 一般的安装CUDA时,大家都会在~/.bashrc中添加如下内容
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
  • 上述这个代码存在一个BUG,即在LD_LIBRARY_PATH不存在时,LD_LIBRARY_PATH会被赋值为”:/usr/local/cuda/lib64″而不是”/usr/local/cuda/lib64″,有一个冒号的区别。这个BUG对于pytorch来说,是无所谓的,哪怕不加,pytorch也会通过/usr/local/cuda找到外部的CUDA。但对于一些兼容性没那么好的代码而言,环境变量是最重要的,在~/.bashrc中,应使用这段代码来添加环境变量
if [ $LD_LIBRARY_PATH ]; then
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
else
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64
fi

if [ $PATH ]; then
    export PATH=$PATH:/usr/local/cuda/bin
else
    export PATH=/usr/local/cuda/bin
fi

if [ $CUDA_HOME ]; then
    export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
else
    export CUDA_HOME=/usr/local/cuda
fi

Original: https://blog.csdn.net/qq_41094058/article/details/116207333
Author: 健0000
Title: 一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/527339/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球