我正在做一个项目,我将计算任务分配给多个 python 进程,每个进程都与自己的 CUDA 设备相关联。
产生子进程时,我使用以下代码:
import pycuda.driver as cuda
class ComputeServer(object):
def _init_workers(self):
self.workers = []
cuda.init()
for device_id in range(cuda.Device.count()):
print "initializing device {}".format(device_id)
worker = CudaWorker(device_id)
worker.start()
self.workers.append(worker)
CudaWorker 在另一个文件中定义如下:
from multiprocessing import Process
import pycuda.driver as cuda
class CudaWorker(Process):
def __init__(self, device_id):
Process.__init__(self)
self.device_id = device_id
def run(self):
self._init_cuda_context()
while True:
# process requests here
def _init_cuda_context(self):
# the following line fails
cuda.init()
device = cuda.Device(self.device_id)
self.cuda_context = device.make_context()
当我在 Windows 7 或 Linux 上运行此代码时,我没有任何问题。在装有 OSX 10.8.2、Cuda 5.0 和 PyCuda 2012.1 的 MacBook Pro 上运行代码时,出现以下错误:
Process CudaWorker-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/Users/tombnorwood/pymodules/computeserver/worker.py", line 32, in run
self._init_cuda_context()
File "/Users/tombnorwood/pymodules/computeserver/worker.py", line 38, in _init_cuda_context
cuda.init()
RuntimeError: cuInit failed: no device
我没有在我的 Mac 上分叉新进程的情况下运行 PyCuda 脚本没有问题。我只在生成新进程时遇到这个问题。
有没有人遇到过这个问题?