[转][基础]Deep Learning常用工具的相关概念
下列大部分内容转载自:
https://zhuanlan.zhihu.com/p/91334380
硬件设备及软件库概念
显卡(GPU),是可以执行并行运算的硬件设备
显卡驱动,通常指 NVIDIA driver,是软件驱动,封装对底层硬件设备的操作,向外提供上层运算API
- GPU架构:Tesla、Fermi、Kepler、Maxwell、Pascal,指的是芯片
- 芯片型号:GT200、GK210、GM104、GF104等
- 显卡系列:GeForce、Quadro、Tesla
- GeForce显卡型号:G/GS、GT、GTS、GTX
GPU架构指的是硬件的设计方式,例如流处理器簇中有多少个 core、是否有L1 or L2缓存、是否有双精度计算单元等等。每一代的架构是一种思想,如何去更好完成并行的思想
芯片就是对上述 GPU 架构思想的实现,例如芯片型号 GT200 中第二个字母代表是哪一代架构,有时会有100和200代的芯片,它们基本设计思路是跟这一代的架构一致,只是在细节上做了一些改变,例如GK210比GK110的寄存器就多一倍。有时候一张显卡里面可能有两张芯片,Tesla k80用了两块 GK210 芯片。这里第一代的 GPU 架构的命名也是 Tesla ,但现在基本已经没有这种设计的卡了,下文如果提到了会用 Tesla 架构和 Tesla 系列来进行区分。
而显卡系列在本质上并没有什么区别,只是 NVIDIA 希望区分成三种选择,GeFore 用于家庭娱乐,Quadro 用于工作站,Tesla 系列用于服务器。Tesla 的 k 型号卡为了高性能科学计算而设计,比较突出的优点是双精度浮点运算能力高并且支持 ECC 内存,但是双精度能力好在深度学习训练上并没有什么卵用,所以 Tesla 系列又推出了 M 型号来做专门的训练深度学习网络的显卡。需要注意的是 Tesla 系列没有显示输出接口,它专注于数据计算而不是图形显示。
最后一个 GeForce 的显卡型号是不同的硬件定制,越往后性能越好,时钟频率越高显存越大,即 G/GS < GT < GTS < GTX。
CUDA 英文全称是Compute Unified Device Architecture,是显卡厂商 NVIDIA 推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。按照官方的说法是,CUDA是一个并行计算平台和编程模型,能够使得使用GPU进行通用计算变得简单和优雅。
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。
conda 安装的 cudatoolkit V.S. 直接在NVIDIA官网安装的 cuda
原生安装的 cuda 是 conda-cudatoolkit 的超集,可以自己尝试这两种安装,然后肉眼比对,差别一目了然。再有不懂的,去 nvidia 官网看文档,慢慢的,就懂了。
调用哪个 cuda 库要看生成 tensorflow / pytorch 库的时候,设置的链接库寻找目录,以 pytorch 为例,项目根目录下的 setup.py 中指定链接库的搜索目录,其中 cuda 的根目录 CUDA_HOME
在 tool.setup_helpers.cuda 中有获取逻辑,大概过程是:
- 先取默认 cuda 安装目录 /usr/local/cuda
- 如默认目录不存在(例如安装原生 cuda 到其他自定义位置),那么搜索 nvcc 所在的目录
- 如果 nvcc 不存在,那么直接寻找 cudart 库文件目录(此时可能是通过 conda 安装的 cudatoolkit,一般直接用 conda install cudatoolkit,就是在这里搜索到 cuda 库的),库文件目录的上级目录就作为
CUDA_HOME
。 - 如果最终未能得到
CUDA_HOME
,那么生成的 pytorch 将不使用 CUDA。
(以上过程的 pytorch 源码版本 '1.3.0')
详细的可去看 pytorch 源码。tensorflow 源码我没看过,不过思路应该差不多。
然后,通过 conda 安装 cudatoolkit 包含的库文件均在 miniconda3/lib 中可以找到(或者直接在 miniconda3 / pkgs / cudatoolkit-10.x.xxx /lib 中查看),
ls -al libcu*
ls -al libnpp*
ls -al libnv*
参考:
https://zhuanlan.zhihu.com/p/91334380