PyCuda:可以导入模块,后来却不行了…(PyCUDA示例)

1 投票
3 回答
6751 浏览
提问于 2025-04-16 15:20

示例代码:

import pycuda.autoinit
import pycuda.driver as drv
import numpy

from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  const int i = threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")

multiply_them = mod.get_function("multiply_them")

a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)

dest = numpy.zeros_like(a)
multiply_them(
        drv.Out(dest), drv.In(a), drv.In(b),
        block=(400,1,1), grid=(1,1))

print dest-a*b

结果:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    """)
  File "build/bdist.linux-x86_64/egg/pycuda/compiler.py", line 238, in __init__
  File "build/bdist.linux-x86_64/egg/pycuda/compiler.py", line 223, in compile
  File "build/bdist.linux-x86_64/egg/pycuda/compiler.py", line 149, in _find_pycuda_include_path
ImportError: No module named pycuda

听起来很简单,所以我们来测试一下。

Python 2.7.1 (r271:86832, Feb 17 2011, 14:13:40) 
[GCC 4.3.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycuda
>>> pycuda
<module 'pycuda' from '/home/abolster/lib/python2.7/site-packages/pycuda-0.94.2-py2.7-linux-x86_64.egg/pycuda/__init__.pyc'>
>>> 

好吧,这有点奇怪……

长话短说,即使我在Python控制台里逐行检查这个文件,直到执行mod=SourceModule()这一行之前,一切都没问题。

(最后的错误追踪,我保证)

/home/abolster/lib/python2.7/site-packages/pycuda-0.94.2-py2.7-linux-x86_64.egg/pycuda/compiler.pyc in _find_pycuda_include_path()
    147 def _find_pycuda_include_path():
    148     from imp import find_module
--> 149     file, pathname, descr = find_module("pycuda")
    150 
    151     # Who knew Python installation is so uniform and predictable?

ImportError: No module named pycuda

所以看起来pycuda获取的包含目录和运行时的Python不一样,这不应该发生(我理解是这样的)。

有什么想法吗?(抱歉问题有点长)

Talonmies提到nvcc找不到的问题;除非Python从我想不到的地方获取环境变量,否则没有理由找不到:

[bolster@dellgpu src]$ which nvcc
~/cuda/bin/nvcc

3 个回答

0

我觉得你没有从NVIDIA安装CUDA工具包,也没有把

/usr/local/cuda/lib/

添加到

LD_LIBRARY_PATH

里,这样就找不到pycuda模块的.so文件了。请运行以下命令并给我们结果:

>lld pycuda.so 
1

你要运行的代码没有问题,应该可以正常工作。我猜可能是找不到nvcc这个程序。确保在你使用pycuda.compiler之前,nvcc的路径已经设置在你的环境变量里。

3

把Python换成2.6版本,并重新安装相关的模块,解决了提问者的问题。

撰写回答