使用TensorFlow GPU+Python多处理时出现错误?
当我使用TensorFlow GPU+Python多处理时,我注意到一个奇怪的行为 我用一些定制和我自己的数据集实现了一个。由于我将DCGAN调节到某些特性,因此我有培训数据和测试数据用于评估 由于数据集的大小,我编写了并发运行的数据加载程序,并使用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
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