Ipython并行集群并行装饰器和高阶函数



我想采用一个现有的函数(例如,从scikit-learn:特别是"predict"函数),并使用多个核心将其应用于一些数据集。

我的第一个天真的方法:

def parallel_predict(classifier):
    @dview.parallel(block=True)
    def predict( matrix ):
        return classifier.predict(matrix)
    return predict

不工作(多个内核不开始旋转)。有办法解决这个问题吗?

或者以某种方式将"不可迭代"的函数传递给@dview.parallel函数?

基于远程执行文档的一些想法。我习惯了@remote装饰器,而不是你用的@parallel装饰器,但希望它们仍然适用于你的情况。(由于某些原因,今天似乎无法加载那个文档)。

是否因为classifier模块在引擎上不可访问而导致远程执行不工作?如果是这样,这可以通过显式地向您的装饰函数添加import语句来解决,通过使用with dview.import_sync(): import classifier(根据本例),或添加@require('classifier'):装饰器(来自文档的同一部分)。至于最后一个选项,不确定多个装饰器是如何交互的(可能最简单的就是给它一个打击)。

第二个想法是,您可以检查远程异常(这里有关于此的文档)。这比什么都得不到要明确得多。例如:

x = e0.execute('1/0')
print x.metadata['error']
x = predict
print x.metadata['error']