首页 > 其他分享 >不同命令查看cuda版本的区别

不同命令查看cuda版本的区别

时间:2023-01-27 17:55:41浏览次数:54  
标签:nvcc usr 查看 version CUDA 版本 cuda

image-20221127101331830

image-20221127173114598

nvcc --version
# 查看 CUDA runtime api 的版本,为实际使用的版本
ls -l /usr/local | grep cuda
# cuda 默认安装在 /usr/local 目录,查看当前目录下有哪些 cuda 版本
nvidia-smi
# 查看 CUDA driver api,指的是当前 driver 能支持的最高 runtime api 版本
cat /usr/lib/cuda/version.txt
# 一些情况下的路径为 /usr/lib/cuda/version.json
cat /usr/share/doc/nvidia-cuda-toolkit/version.txt
# 属于作为 Linux 发行版的安装版本,不一定是实际使用的版本

CUDA APIs

​ CUDA 是由 NVIDIA 推出的通用并行计算架构,通过一些 CUDA 库提供了一系列 API 供应用程序调用,开发者可以通过这些 API 利用 GPU 来处理图像、视频解码等。

​ CUDA 的 API 是可以分层理解的,当出现 nvcc --versionnvidia-smi 显示版本不一致时,应该认识到二者或许并不是同意层次的 API,有时并不是一起安装的。

​ CUDA API体系包括:

  • CUDA Libraries( CUDA 函数库)
  • CUDA Runtime API ( CUDA 运行时 API )
  • CUDA Driver API ( CUDA 驱动 API )
image-20221127213539784 image-20221127213839307
  1. CUDA Driver API

    • 是 GPU 设备的抽象层,通过提供一系列的接口来操作 GPU 设备,性能好但编程难度高

    • 用于支持 driver api 的必要文件(如 libcuda.so)是由 GPU driver installer 安装的

      nvidia-smi 查询的就是此类 API

  2. CUDA Runtime API

    • 是对 CUDA Driver API 进行了一定的封装,从而降低开发难度

    • 用于支持 runtime api 的必要文件(如 libcudart.sonvcc)是由 GPU Toolkit installer 安装的

      nvcc --version查询的就是此类 API

      • nvcc:cuda 编译器(将程序编译成可执行的二进制文件)
      • NVIDIA System Management Interface 命令行实用工具,用于帮助管理和监控 NVIDIA GPU 设备
    • CUDA Toolkit Installer 通常集成了 GPU driver installer,此时 runtime api 与 driver api 的版本应该一致。但如果是单独进行 GPU driver installer 的安装,版本有有可能不一致。driver api 向下兼容 runtime api,故保证 nvidia-smi的版本 >= nvcc --version的版本即可。

    • nvcc --version只知道它自身构建时的 CUDA runtime 版本,并不知道安装了什么版本的 GPU driver(甚至不知道是否安装了 driver);nvidia-smi只知道它自身构建时的 CUDA driver 版本,并不知道安装了什么版本的 GPU runtime(甚至不知道是否安装了 runtime)

  3. CUDA Librabies

    • 是对 CUDA Runtime API 更高一层的封装,通常是一些成熟的高效函数库
    • 支持开发者自己封装一些函数库进行调用
    • 常见的库有 cuFFTcuBLAS

对于 nvcc --version

​ 此方式显示的版本将作为差异修正时的依据,此前应该选择并确认需要使用的执行文件。

  1. 查看实际执行的文件

    $ which nvcc
    /usr/local/cuda-11.2/bin/nvcc
    
  2. 查看所有可执行文件

    $ find /usr -type f -iname nvcc
    /usr/local/cuda-11.2/bin/nvcc
    /usr/lib/nvidia-cuda-toolkit/bin/nvcc
    /usr/bin/nvcc
    

    ​ 从以上可以看出,nvcc --version实际是运行 /usr/local/cuda-11.2/bin/nvcc这个可执行文件。但当多个 cuda 版本同时存在时,需要查看内部具体执行的版本。

  3. 查看实际运行的执行文件并修改为对应版本

    ( 假设实际运行的文件需为 /usr/bin/nvcc

    $  vim /usr/bin/nvcc                             
    #!/bin/sh
    # exec /usr/lib/nvidia-cuda-toolkit/bin/nvcc "$@"
    exec /usr/local/cuda-11.2/bin/nvcc "$@
    

​ 对文件内容进行修改,目的是让 exec 的实际命令为对应版本

   $ vim ~/.bashrc  
   export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH
   export PATH=/usr/local/cuda-11.2/bin:$PATH
   export CUDA_HOME=/usr/local/cuda-11.2

​ 此处最好使用 /usr/local/cuda-11.2/bin:$PATH 代替 $PATH:/usr/local/cuda-11.2/bin,否则可能会出现一些路径带来的版本差异问题

cat 版本不同

​ 在经过上述修改后,nvcc --version应该显示ls -l /usr/local | grep cuda下的一个期望使用版本,且二者版本低于nvidia-smi的支持最高版本。

​ 对于不同的 cat /usr/lib/cuda/version.txt 下版本,作出解释:

  • /usr/lib/cuda/version.txt 属于 Linux distribution 的一部分安装版本
  • /usr/local/cuda是手动进行安装的,不依赖于系统分发的

​ 使用的版本应该依照 PATHwhich 的结果。会仍然存在两个版本,所以以何种方式进行版本的查询更加重要,这能帮助我们对使用的内容更加明确。


参考资料

CUDA环境详解

三种方法查看的CUDA版本均不同如何排查

How to get the CUDA version?

/usr/local/cuda/version.txt does not match with /usr/lib/cuda/version

标签:nvcc,usr,查看,version,CUDA,版本,cuda
From: https://www.cnblogs.com/ining/p/17069111.html

相关文章