使用TensorFlow GPU+Python多处理时出现错误?

使用TensorFlow GPU+Python多处理时出现错误?,python,multithreading,tensorflow,multiprocessing,Python,Multithreading,Tensorflow,Multiprocessing,当我使用TensorFlow GPU+Python多处理时,我注意到一个奇怪的行为 我用一些定制和我自己的数据集实现了一个。由于我将DCGAN调节到某些特性,因此我有培训数据和测试数据用于评估 由于数据集的大小,我编写了并发运行的数据加载程序,并使用Python的脚本将其预加载到队列中 代码的结构大致如下所示: class ConcurrentLoader: def __init__(self, dataset): ... class DCGAN ... n

当我使用TensorFlow GPU+Python多处理时,我注意到一个奇怪的行为

我用一些定制和我自己的数据集实现了一个。由于我将DCGAN调节到某些特性,因此我有培训数据和测试数据用于评估

由于数据集的大小,我编写了并发运行的数据加载程序,并使用Python的脚本将其预加载到队列中

代码的结构大致如下所示:

class ConcurrentLoader:
    def __init__(self, dataset):
        ...

class DCGAN
     ...

net = DCGAN()
training_data = ConcurrentLoader(path_to_training_data)
test_data = ConcurrentLoader(path_to_test_data)

这段代码在TensorFlow CPU和TensorFlow GPU上运行良好我在尝试使用TensorFlow和多处理时遇到了相同的错误

E tensorflow/stream_executor/cuda/cuda_blas.cc:366] failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED
但在不同的环境中,tf1.4+cuda 8.0+cudnn 6.0。 示例代码中的matrixMulCUBLAS工作正常。 我也想知道正确的解决办法!
参考对我来说不起作用。

经过几个小时的测试后,我经历了一件非常奇怪的事情:如果tensorflow是最后一次导入,并且初始化了会话等等,那么在初始化数据加载程序和所有其他可以工作的东西之后,最后会发生。至少对于这个特定的DCGAN。这让我想起了我不久前在GitHub中创建的TensorFlow问题:。这也是TensorFlow内部的一个bug:如果最后导入TF,效果很好;如果TF首先与其他LIB(如MatplotLib)一起导入,则给出一个SEGFULT。如果切换导入顺序,错误也会消失,请尝试将TF下移,并尽可能晚地启用会话和其他内容?仍然会出现相同的问题。实际上,我正在尝试训练一个多代理系统,每个代理都有一个网络。为了得到低相关性的批处理数据,我使用多工作多处理来收集数据。然而,它在这里停留了一整天。@daniel451:我也有类似的问题,你能看看吗?
def __init__(self, dataset):
    ...
    self._q = mp.Queue(64)
    self._file_cycler = cycle(img_files)
    self._worker = mp.Process(target=self._worker_func, daemon=True)
    self._worker.start()

def _worker_func(self):
    while True:
        ... # gets next filepaths from self._file_cycler
        buffer = list()
        for im_path in paths:
            ... # uses OpenCV to load each image & puts it into the buffer
        self._q.put(np.array(buffer).astype(np.float32))
E tensorflow/stream_executor/cuda/cuda_blas.cc:366] failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED