1、起源
看到实验室集群上可以使用nvidia-smi
,但是没有nvcc,就有些好奇为什么(自己对cuda还是很不熟悉)。就以此为切入点对CUDA做了一些了解。
2、总览
cuda包含三大组件,分别是 NVIDIA driver(驱动)、toolkit 和 samples。
-
driver
driver 和toolkit可以分开安装,并且同一台主机上两者支持的CUDA版本可以不一样,只要保证driver cuda version >= toolkit cuda version
driver 安装后会提供
nvidia-smi
命令,会显示GPU硬件信息以及支持的CUDA版本等。而nvcc
命令是toolkit提供的,因此,在没有nvcc
的情况下,也可能有nvidia-smi
命令。driver包含函数库libcuda.so,该函数库提供对 CUDA driver API 的访问。(参考文献【1】)
-
toolkit
toolkit包含函数库libcudart.so
,该函数库提供了对 CUDA runtime API 的访问,以及nvcc编译器等。toolkit同样也包含NVIDIA driver 的安装包,但是在安装过程中可以选择提前单独安装NVIDIA driver,再安装NVIDIA toolkit,这就有可能导致 driver 和 toolkit 显示的CUDA版本不一样。
3.driver API和runtime API的不同
下图由知乎用户周三石提供,感觉很直观地描述了两种API地区别。
driver API更为底层一些,对一般用户不是很友好,例如需要做显式的device初始化,以及context、module的管理(参考文献【2】)。但是使用更为灵活,提供一些runtime API所没有的功能,毕竟runtime API的功能都是包装driver 的功能实现的。
而runtime API把driver API包装了一些,将很多原本需要代码编写的步骤(比如说上面的device初始化)自动完成了,因此会更加容易上手。
具体的不同可以根据参考文献【2】进一步学习。个人感觉最大的一个不同就是使用runtime API需要NVCC编译器,而使用driver API不用。
runtime API需要使用nvida自己的编译器进行编译,并且可以将CUDA kernel链接到同一个executable中。而driver API则完全可以不依赖nvida的编译器,并且通过NVRTC库来实现对kernel code的在线编译,生成PTX string。
4、思考
-
CUDA toolkit是不是只需要一些函数库和编译器就能正常运行成功?我在没有管理员权限的时候如何安装toolkit?
-
CUDA的第三部分samples是什么时候安装的?是和toolkit一起安装的吗?
以上问题应当需要去研究CUDA的安装过程。
我需要做的事情,配置好CUDA环境,测试A100下的NWCHEM-GPU性能。
目前的问题是,找不到CUDA的nvcc,仅安装好了驱动,在没有管理员权限的情况下,是否可以使用conda来配置好CUDA环境。
首先看看CUDA的安装都干了什么。
解答:
根据参考文献【6】的解释,CUDA TOOLKIT主要包含下面所说的几个部分,除了驱动之外,其他都可以通过conda来安装。因此,在实验室已经安装好驱动的情况下,使用conda 安装CUDA Toolkit(不含驱动)就行了。
-
Compiler: CUDA-C和CUDA-C++编译器NVCC位于bin/目录中。它建立在NVVM优化器之上,而NVVM优化器本身构建在LLVM编译器基础结构之上。因此开发人员可以使用nvm/目录下的Compiler SDK来直接针对NVVM进行开发。
-
Tools: 提供一些像profiler,debuggers等工具,这些工具可以从bin/目录中获取
-
Libraries: 下面列出的部分科学库和实用程序库可以在lib/目录中使用(Windows上的DLL位于bin/中),它们的接口在include/目录中可获取。
cudart: CUDA Runtime
cudadevrt: CUDA device runtime
cupti: CUDA profiling tools interface
nvml: NVIDIA management library
nvrtc: CUDA runtime compilation
cublas: BLAS (Basic Linear Algebra Subprograms,基础线性代数程序集)
cublas_device: BLAS kernel interface
… -
CUDA Samples: 演示如何使用各种CUDA和library API的代码示例。
可在Linux和Mac上的samples/目录中获得,Windows上的路径是C:\ProgramData\NVIDIA Corporation\CUDA Samples中。在Linux和Mac上,samples/目录是只读的,如果要对它们进行修改,则必须将这些示例复制到另一个位置。 -
CUDA Driver: 运行CUDA应用程序需要系统至少有一个具有CUDA功能的GPU和与CUDA工具包兼容的驱动程序。每个版本的CUDA工具包都对应一个最低版本的CUDA Driver,也就是说如果你安装的CUDA Driver版本比官方推荐的还低,那么很可能会无法正常运行。
CUDA Driver是向后兼容的,这意味着根据CUDA的特定版本编译的应用程序将继续在后续发布的Driver上也能继续工作。通常为了方便,在安装CUDA Toolkit的时候会默认安装CUDA Driver。在开发阶段可以选择默认安装Driver,但是对于像Tesla GPU这样的商用情况时,建议在官方安装最新版本的Driver。
目前(2021年2月)的CUDA Toolkit和CUDA Driver版本的对应情况如下:
参考文献
【1】lcuda和lcudart有什么区别?
【2】浅谈Cuda driver API
【3】Different CUDA versions shown by nvcc and NVIDIA-smi
【4】CUDA Driver Version和Runtime Version不一致
【5】nvidia-smi 和 nvcc 结果的版本为何不一致
【6】显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?(对cuda 包含什么以及各组件的内容有较为全面的描述)