CUDA错误:在python中使用并行时发生初始化错误

CUDA错误:在python中使用并行时发生初始化错误,python,cuda,parallel-processing,Python,Cuda,Parallel Processing,我使用CUDA编写代码,但运行速度仍然很慢。因此,我在python中将其更改为使用多处理(pool.map)并行运行。但是我有CUDA错误:初始化错误 这是一个功能: def step_M(self, iter_training): gpe, e_tuple_list = iter_training g = gpe[0] p = gpe[1] em_iters = gpe[2] e_tuple_list = sorted(e_tuple_list, ke

我使用CUDA编写代码,但运行速度仍然很慢。因此,我在python中将其更改为使用多处理(pool.map)并行运行。但是我有
CUDA错误:初始化错误

这是一个功能:

def step_M(self, iter_training):
    gpe, e_tuple_list = iter_training
    g = gpe[0]
    p = gpe[1]
    em_iters = gpe[2]

    e_tuple_list = sorted(e_tuple_list, key=lambda tup: tup[0])
    data = self.X[e_tuple_list[0][0]:e_tuple_list[0][1]]
    cluster_indices = np.array(range(e_tuple_list[0][0], e_tuple_list[0][1], 1), dtype=np.int32)
    for i in range(1, len(e_tuple_list)):
        d = e_tuple_list[i]
        cluster_indices = np.concatenate((cluster_indices, np.array(range(d[0], d[1], 1), dtype=np.int32)))
        data = np.concatenate((data, self.X[d[0]:d[1]]))

    g.train_on_subset(self.X, cluster_indices, max_em_iters=em_iters)
    return g, cluster_indices, data
这里是代码调用:

pool = Pool()
iter_bic_list = pool.map(self.step_M, iter_training.items())
国际热核聚变实验堆的培训也一样:

这就是错误 你能帮我修一下吗?谢谢。

试试看

sudo ldconfig /usr/local/cuda/lib64

我意识到这有点陈旧,但我在芹菜下跑步时遇到了同样的问题:

syncedmem.cpp:63] Check failed: error == cudaSuccess (3 vs. 0)  initialization error
从prefork切换到基于eventlet的池解决了这个问题。您的代码可以类似地更新为:

from eventlet import GreenPool
pool = GreenPool()
iter_bic_list = list(pool.imap(self.step_M, iter_training.items()))

我发现这是cuda为进程ID设置互斥的问题。 因此,当您使用多处理模块时,会生成另一个具有单独pid的子流程。由于GPU的互斥,它无法访问

我发现一个有效的快速解决方案是使用线程模块而不是多处理模块


因此,在gpu中加载网络的pid基本上应该使用它。

感谢您的回复。libcudart的原因是设置路径lib。我设置:sudo ln-s/usr/local/cuda/lib64/libcudart.so/usr/lib/libcudart.so sudo ldconfig。然后它就不显示错误了。但是CUDA-EROROR:初始化仍然显示命令ldconfig是fix-libcudart。因为它看不到路径。你能帮我修复CUDA错误:初始化错误。你能尝试进入NVIDIA_示例/1_实用程序/deviceQuery并运行吗/设备查询?你看到了什么?我也犯了同样的错误。我使用的不是池而是多进程。我应该怎么做?