Dask compute()阻塞并且不执行任何操作

时间:2017-02-03 12:52:32

标签: tensorflow dask

我有一个TensorFlow模型,在训练期间只使用2个核心。我有8个核心,想要在不同的随机样本上训练一堆这些模型进行比较。我以为我会通过并行训练4个模型来节省时间。

import dask.bag as db
seeds = db.from_sequence(range(10), npartitions=4)
accuracies = seeds.map(lambda seed: train_and_get_accuracy(seed))
print(accuracies.compute())

compute()无限期地阻塞,没有CPU使用。我搞砸了什么?

我查看http://dask.pydata.org/en/latest/inspect.html并尝试打印accuracies.dask。我觉得它很好看:

{('from_sequence-41b72669c9abaeca2236693465a55891', 0): [0, 1, 2],
 ('from_sequence-41b72669c9abaeca2236693465a55891', 1): [3, 4, 5],
 ('from_sequence-41b72669c9abaeca2236693465a55891', 2): [6, 7, 8],
 ('from_sequence-41b72669c9abaeca2236693465a55891', 3): [9],
 ('map-lambda-db55048968394cb7b842de6a78e7ee7d', 0): (<function reify at 0x7f9b8355d268>,
                                                      (<class 'map'>,
                                                       <function <lambda> at 0x7f9b78216400>,
                                                       ('from_sequence-41b72669c9abaeca2236693465a55891',
                                                        0))),
 ('map-lambda-db55048968394cb7b842de6a78e7ee7d', 1): (<function reify at 0x7f9b8355d268>,
                                                      (<class 'map'>,
                                                       <function <lambda> at 0x7f9b78216400>,
                                                       ('from_sequence-41b72669c9abaeca2236693465a55891',
                                                        1))),
 ('map-lambda-db55048968394cb7b842de6a78e7ee7d', 2): (<function reify at 0x7f9b8355d268>,
                                                      (<class 'map'>,
                                                       <function <lambda> at 0x7f9b78216400>,
                                                       ('from_sequence-41b72669c9abaeca2236693465a55891',
                                                        2))),
 ('map-lambda-db55048968394cb7b842de6a78e7ee7d', 3): (<function reify at 0x7f9b8355d268>,
                                                      (<class 'map'>,
                                                       <function <lambda> at 0x7f9b78216400>,
                                                       ('from_sequence-41b72669c9abaeca2236693465a55891',
                                                        3)))}

我还能检查什么才能了解​​发生了什么?这是一个Ubuntu 16.04系统。

1 个答案:

答案 0 :(得分:1)

尝试使用主题

默认情况下,dask.bag使用您计算机上的单独进程进行并行化。这是纯Python代码的理想选择(因为GIL),但可能不适合像Tensorflow这样的数字代码,特别是如果Tensorflow库在分叉进程中不能很好地运行(可能就是这种情况?)

您可以通过设置以下

来全局执行此操作
get=

或在计算调用中设置accuracies.compute(get=dask.threaded.get)

npm install socket.io --save 

考虑使用dask.delayed

Dask.bag提供了一个非常简单的界面,有点类似于Spark RDD。对于将来更复杂的算法,您也可以尝试dask.delayed