多处理机器学习代码永无止境

我正在努力并行运行几种机器学习算法(来自scikit-learn),并且我将Process类与进程之间共享的变量一起使用,以保存结果。

不幸的是,我的代码永无止境。因为我正在运行10种相当繁重的算法,这可能是内存问题吗?还是只是速度慢?

我试图将整个代码分为两部分(我当时认为这样做会更快),但是,它并没有改变任何东西...

请注意,train_bow和test_bow只是浮点向量。

from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import MultinomialNB,ComplementNB,bernoulliNB
from sklearn.ensemble import GradientBoostingClassifier,AdaBoostClassifier,VotingClassifier,ExtraTreesClassifier
from sklearn.svm import SVC,LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier as Knn
from sklearn.feature_extraction.text import TfidfVectorizer

#Custom class
from utilities.db_handler import *
from utilities.utils import *
from multiprocessing import Process,Manager
import json
import pickle as pkl
import os
import numpy as np
import pandas as pd

manager = Manager()
return_dict = manager.dict()

# Use a shared variable in order to get the results
proc = []
fncs1 = [random_forest_classification,SVC_classification,LinearSVC_classification,MultinomialNB_classification,LogisticRegression_classification]
fncs2 = [bernoulliNB_classification,GradientBoosting_classification,AdaBoost_classification,VotingClassifier_classification,ComplementNB_classification,ExtrExtraTrees_classification]

# Instantiating 2 set of processes with relative arguments. Each function
# writes the result on result_dict
for fn in fncs1:
    p = Process(target=fn,args=(train_bow,test_bow,label_train,label_test,return_dict))
    proc.append(p)
    p.start()
for p in proc:
    p.join()

for fn in fncs2:
    p = Process(target=fn,return_dict))
    proc.append(p)
    p.start()
for p in proc:
    p.join()

# then pick te best of the results from return_dict and save them

这段代码给了我一些属于算法的警告,但是没有显示与多处理有关的任何错误或警告。

ningruohai1 回答:多处理机器学习代码永无止境

也许您应该详细调试。检查“长时间”周期的迭代次数。迭代正在进行中还是卡在某个地方?您的初始算法是否可以正常运行(尝试不进行多处理)?如果是这样,则可以将问题隔离到多处理过程中,并查看管理器的接口方式。

还请包括您的系统规格,一般经验法则是您只能在PC上为n个内核运行n个进程

在任务管理器上检查性能规格,以查看正在使用多少内存/内核。

您可能还想启动一个线程,以检查进程是处于活动状态还是已完成,以查看哪些算法不起作用。

使用ML的个人意见,除非您有一台野兽PC,否则它的速度很慢:)

,

我设法用Process替换了Thread

我认为它可能起作用,因为创建许多流程的速度较慢,并且某些经理/调度员/较低级别的实体必须处理并管理这些流程。

我没有启动“控制器”线程,但是一切似乎都可以正常工作。

为帮助队友致谢!

本文链接:https://www.f2er.com/3160960.html

大家都在问