3

我正在使用 Parallel Python(pp 库)来运行一个相当大的(并且令人尴尬的并行)作业。我的代码:

# Parallel fit with pp
def fit_label(label, trainX, trainY, label_index):
    # print 'Fitting', i, 'label out of', len(label_index)
    from sklearn.linear_model import SGDClassifier
    import numpy as np
    clf = SGDClassifier(loss='hinge', shuffle=True, alpha=0.000001, verbose=0, n_iter=5)
    temp_y = np.zeros(trainY.shape)
    temp_y[label_index[label]] = 1

    clf.fit(trainX, temp_y)
    return clf

ppservers = ()
job_server = pp.Server(ppservers=ppservers)
print "Starting pp with", job_server.get_ncpus(), "workers"
jobs = [(label, job_server.submit(fit_label, args=(label, trainX, trainY, label_index), modules=('sklearn.linear_model',))) for label in label_index.keys()[0:8]]

这在一个小数据集(即 trainX 和 trainY 有 10,000 行)上运行顺利,但是当我在大约 4GB 的完整数据集(400 万行)上运行它时,我得到了这个错误:

/Users/mc/.virtualenvs/kaggle/lib/python2.7/site-packages/pp.pyc in submit(self, func, args, depfuncs, modules, callback, callbackargs, group, globals)
    458 
    459         sfunc = self.__dumpsfunc((func, ) + depfuncs, modules)
--> 460         sargs = pickle.dumps(args, self.__pickle_proto)
    461 
    462         self.__queue_lock.acquire()

SystemError: error return without exception set

我想我遇到了无法处理大文件的泡菜错误。我能做些什么来解决这个问题吗?我已经在图书馆尝试了很多小时,但multiprocessing从未让它工作——我也很确定我也会遇到这个pickle问题。升级到 Python3 会解决这个问题吗?

In [5]: os.sys.version
Out[5]: '2.7.5 (default, Aug 25 2013, 00:04:04) \n[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)]'
4

0 回答 0