python中cudalaunchhostfunc的实现

Python021

python中cudalaunchhostfunc的实现,第1张

python中cudalaunchhostfunc的实现如下。根据查询相关公开资料显示,通过cudaLaunchHostFunc开发者者可以在流中插入一个CPU函数。下面的代码中的CPU函数MyCallback会在device-to-hostt拷贝完成后开始执行。

做深度学习的小伙伴们可能都会在安装环境的时候经常遇到的cuda版本驱动版本以及和显卡是如何对应的,经常搞得特别糊涂,官网没有直接提供他们的对应关系,导致我们在升级显卡的时候发现原来的软件环境不兼容,出现各种奇奇怪怪的问题。

NVIDIA系列显卡做深度学习,需要在宿主机安装显卡驱动(driver),需要在docker中安装英伟达的科学计算库(cuda),在python中安装深度学习库(我主要用pytorch),driver依赖显卡,cuda依赖driver,pytorch依赖cuda,于是就会有一些版本依赖问题.

最近我在将显卡从GTX2070升级到GTX3090的时候,发现自己原来pytorch程序总会在.cuda()命令卡十分钟左右,并且还有其他异常。后来才知到GTX3090需要cuda11以上的版本才能正常运行,而我使用的python库pytorch为0.4.1,cuda版本为9.0,受制于当前pytorch版本,无法使用最新的显卡,那么这个是如何看出来的呢?又如何解决?

英伟达官网(参考 cuda-GPUs )并没有给出一个直接的关联关系,而是给了一个 Compute Capability ,让人摸不到头脑。

实际上这是一个中间数据,还需要另外一张表才能找到和cuda的对应关系,经过搜索我在维基百科(参考 CUDA ) 找到了答案。

同时,cuda对显卡驱动也有特定的要求,从英伟达官网(参考 cuda )继续寻找答案

我们再查询深度学习库(参考 pytorch )的版本对cuda的依赖关系

综合以上分析,GTX3090需要Compute Capability在8.6以上的cuda,而满足这个要求的cuda又只有11.0以上的版本。而cuda11版本又需要版本号>450的显卡驱动。

其实,从表中我们也可以分析出,cuda和显卡驱动基本都是向下兼容的,意味着我安装最新的cuda和显卡驱动,基本上可以支持以前的几乎所有显卡。当然了,代价是需要更新我们的python深度学习库比如pytorch,tensorflow等指定cuda的版本,否则可能会出现一些兼容问题。

所以最后我安装最新驱动,重新构建了docker,用英伟达官方提供的cuda11的作为基础镜像,参考github Docker-Ubuntu-Unity-noVNC , 更新pytorch0.4.1到1.7.1,甚至升级python版本3.5为3.9,索性兼容性还不错,只做了少量改动,问题完美解决。

https://developer.nvidia.com/cuda-GPUs

https://en.wikipedia.org/wiki/CUDA

https://pytorch.org

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html