【问题标题】:PyCuda: Can import module, then I can't... (PyCUDA Samples)PyCuda:可以导入模块,然后我不能...(PyCUDA 示例)
【发布时间】:2011-08-01 12:07:08
【问题描述】:

示例代码:

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 从我想不到的地方获取它的 envars,否则没有理由不应该这样做:

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

【问题讨论】:

  • 看起来只有 pycuda.compiler 有问题?尝试从控制台导入该行,看看会发生什么。
  • 尝试在脚本顶部添加import pycuda 行。有帮助吗?
  • 重复:逐行通过 python 控制台不会抱怨,直到执行 mod=SourceModule(...) 行。
  • @Andrew Bolster:此时 pycuda.compiler.Sourcemodule 将尝试分叉一个 nvcc 进程以将您的源代码编译为 cubin 文件。那就是它失败的时候,这通常意味着找不到nvcc。
  • @talonmies 好吧,不,因为那不是失败的地方...需要更多调查,但感谢您的参与!

标签: python import cuda pycuda


【解决方案1】:

我认为您没有从 nvidia 安装 CUDA 工具包并添加了

/usr/local/cuda/lib/

LD_LIBRARY_PATH

找到pycuda模块的.so并给我们输出:

>lld pycuda.so 

【讨论】:

  • pycuda 不需要 CUDA SDK。它甚至不需要 CUDA 工具包中的任何库 - 它是基于驱动程序 API 构建的,而不是运行时 API。
【解决方案2】:

您尝试运行的代码没有任何问题 - 它应该可以运行。我的猜测是找不到 nvcc。在尝试使用 pycuda.compiler 之前,请确保在您的环境中设置了 nvcc 可执行文件的路径。

【讨论】:

    【解决方案3】:

    更改为 Python 2.6 并重新安装相关模块解决了 OP 的问题。

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 2015-08-04
      • 2018-07-11
      • 2016-08-27
      • 2011-12-17
      • 2017-09-27
      • 1970-01-01
      • 2013-08-27
      • 2015-04-15
      相关资源
      最近更新 更多