目录
- 1.调用关系
- 2.版本依赖
- 3.anaconda环境的cuda版本
- 4.感想
1.调用关系
AI应用层
比如目标分类,检测,切割等等用户的应用或者项目。它调用的是AI框架层里的具体AI框架,比如pytorch。
AI框架层
pytorch/tensorflow等属于这层,是具体的AI基础服务实现,比如对神经网络的封装,自动梯度推导等等等等。它调用的是cuDNN和CUDA ToolKit。这样,AI框架才能使用英伟达的GPU加速功能。而cuDNN调用CUDA ToolKit,是对CUDA ToolKit的进一步封装或优化。
图中可以看到,AI框架除了调用cuDNN外,还会调用CUDA ToolKit,为啥呢?因为在cuDNN里没有找到所需要的接口时,只能自己调用CUDA去实现类似cuDNN的封装了。
英伟达GPU工具层
英伟达基于GPU驱动开发出了工具层,包含了cuda toolkit和cuDNN,主要是为AI框架层提供友好的调用GPU加速的接口。
CUDA ToolKit就是非常流行的,常挂在嘴边的,网上到处问的“CUDA怎么装”的CUDA。cuDNN调用CUDA ToolKit,它是对CUDA ToolKit的进一步封装或优化,专门针对深度学习的优化。
驱动层
英伟达为各个操作系统提供的GPU驱动,主要是激活显卡的基础服务。
英伟达驱动装好,里面包含了cuda driver(注意是driver而不是toolkit),它决定了能装的cuda toolkit的最高版本。
强调下,重要的一点是:驱动上显示的cuda版本号决定了能安装的最高cuda toolkit版本号,因为驱动是向下兼容的。比如驱动显示的cuda toolkit版本是12.9,那么你anaconda各个环境里里装的cuda版本只要≤12.9的都可以调用gpu加速,否则使用不了gpu加速。
所以大部分博客一上来都从nvidia-smi命令开始,找到你电脑支持的最高cuda toolkit版本。但是如果你看到你所需要的CUDA版本你达不到要求,不要灰心,因为驱动版本决定了cuda toolkit最高版本,重新装驱动,它就变了。
GPU硬件
硬件不再多说。
2.版本依赖
总之呢,驱动版本依赖GPU硬件,cuda toolkit(常说的要装的“cuda”)依赖驱动版本。cudnn版本依赖cuda toolkit版本。也就是说GPU硬件决定驱动版本,驱动版本决定cuda toolkit版本,cuda toolkit决定cudnn版本。
比如你装pytorch或者tensorflow所需cuda版本是xxx,cudnn版本是yyy,那么你应该先敲命令nvidia-smi看下当前驱动版本号和它支持的最高cuda toolkit版本号,如果达不到要求,先别灰心,再去英伟达官网看下哪个GPU驱动版本支持该cuda版本,或者干脆安装当前时间空间中GPU支持的最新GPU驱动版本,这样理论上基本上所有cuda版本都能装,但是也要看GPU硬件,垃圾的gpu硬件装最新的驱动可能有兼容性问题和性能损耗,不过只要不是低端gpu或者过时20多年了的gpu,应该官网都会支持比较新的驱动,需要自己去探索。
3.anaconda环境的cuda版本
当你的电脑驱动更新到最新或者某个较新的稳定的版本后,又装了AI框架所需的某个版本的cuda后,这个就是系统性的全局cuda版本,或者不装CUDA,也没问题,为啥?因为在anaconda创建很多环境,各个环境各自下载了独立的不同版本的cuda toolkit,只要不超过你硬件驱动版本支持的最高cuda toolkit,都能调用GPU硬件。这个确实很方便。比如你装了pytorch1.10.0版本的环境了,然后再装个新的环境装pytorch2.x版本完全可以!强大呀!
可惜这些都是老外的!
4.感想
英伟达光卖GPU硬件可不赚钱,但是和它深度捆绑的CUDA生态(且闭源)形成了垄断王国,霸权主义,现在看cuda就是个中间件,但是和硬件深度绑定。如果是通用的中间件,那各家GPU公司都起来了!我觉得未来应该开源打败闭源,消灭捆绑销售,gpu价格就降下来了!