背景
基于s2cnn的开源项目跟进一个研究有一段时间了,第一次移植到win平台上,遇到各种问题,终于将所有包全部装好后,遇到一个错误:
解决
细看这个错误,发现是一个底层的问题。硬着头皮开始调试
首先在最后定位到最后报错的语句,这里是python自带的ctypes包,但能够发现一些线索
发现 self._name
是
原来是在调用一个动态链接库,用的是nvrtc
,查了一下是CUDA的一个动态链接库,其文档在NVRTC (Runtime Compilation) :: CUDA Toolkit Documentation (nvidia.com)
后面92很容易猜到是CUDA版本号,但是本机的CUDA版本:
基本可以断定是CUDA版本不对应的问题,那么只需要将这个加载的文件名改一下就好。那么:
- 这个文件是什么?
- 在哪里改?
对于第一个问题,看NVRTC文档,可知
找到CUDA文件夹位置
拷贝文件名
对于第二个问题,通过仔细分析程序,发现定义在了pynvrtc
这个python库中,这个python库的功能就是为C++写的程序提供上层接口。对这个动态链接库的命名就定义在这里https://github.com/NVIDIA/pynvrtc/blob/fffa9f6f4a7ee1d452346cbdf68b84b5246ccffb/pynvrtc/interface.py#L96
把它改成我的版本
成功解决问题
结论
找到pynvrtc/interface
第96行,把def_lib_name
变量改成符合你的NVRTC名,这个名字在CUDA驱动bin
文件夹内。
夜到了三点,但是调出一个BUG还是exciting呢!