我正在尝试使这段代码并行运行。
目前每个型号的运行速度约为6分钟,这太慢了。
d_mtry={}
# ------------------------------------------------------------------------
pass; count = 0; itr = COUNT
while count < itr
kf = KFold(n_splits = 10)
# --------------------------------------------------------------------
for j in range (2, 25):
avg_acc = 0
for train_index, test_index in kf.split(X_train):
X_train_K, X_test_K = X_train[train_index], X_train[test_index]
y_train_K, y_test_K = y_train[train_index], y_train[test_index]
rotf = RRForestClassifier( n_estimators = 30,
criterion = 'entropy',
max_features = j,
n_jobs = -1,
random_state = 1
)
rotf.fit(X_train_K, y_train_K)
y_predict_K = rotf.predict(X_test_K)
y_prob = rotf.predict_proba(X_test_K)
acc_score = accuracy_score(y_test_K, y_predict_K)
avg_acc += acc_score
d_mtry[str(j)] = avg_acc/10
# --------------------------------------------------------------------
best_mtry = max(d_mtry.iteritems(), key=operator.itemgetter(1))[0]
f.write("\n" + "Iteration: " + str(count+1) + " Best M_Try: " + str(best_mtry)+ "\n")
f.write(str(d_mtry))
rotf = RRForestClassifier( n_estimators = 30,
criterion = 'entropy',
max_features = int( best_mtry ),
n_jobs = -1,
random_state = 1
)
# there is more code after this
# I don't think it is relevant,
# it has to do with calculations on the model rotf
# --------------------------------------------------------------------
count += 1
# ------------------------------------------------------------------------
我遇到的主要问题是,对于我所做的尝试,词典并未正确更新。使用 multiprocessing.Pool()
实例进行方法时,它似乎运行得更快,我在另一篇文章中找到了。
此处的目标是根据折叠的平均准确度为 j
(针对max_features
类实例属性)找到最佳值,并在此时使用我创建了我的模型并在测试集上运行它。
最初,我尝试使用GridSearchCV()
,但是在配件上遇到了问题而且从未完成运行,即使在AWS托管的设置上,也有36个内核。
感谢任何帮助。
答案 0 :(得分:0)
我喜欢python以便于原型制作 我也知道,当需要改变架构设计优先级以获得最佳性能时。
n_jobs == -1
实际上占用了所有CPU核心这就是说,没有免费的CPU资源(并且你可能属于财富中的那些孩子,如果不是也属于硬件约束的[SPACE]
维度(是的,在谈论 - RAM计算,后来被翻译成[TIME]
- 维度,一旦你的模型停止适应RAM并且在强化ML模型调整期间性能将跳跃许多数量级)。
如果没有可用的备用资源,任何进程调度都将采用纯 - [SERIAL]
系统调度(一个接一个地进行)或最多采用“仅” - {{系统调度,当实际的执行块被O / S系统调度程序交错到一个受限制的(大小)CPU资源子集时,因为没有其他“免费”CPU核心不是可以做得更好。
在这种情况下,来自multiprocessing
模块的Python代码可用的工具都不会提高代码执行性能,但恰恰相反(可能已经对此进行了基准测试,或者只是在您自己的基础上感受到了这一点)鞋子)。
以上两个命名的系统调度策略都不是真正的 - [CONCURRENT]
系统调度示例。
[PARALLEL]
帮助I / O绑定,而不是CPU绑定的情况除了将初始DataSET加载到RAM之外,没有其他与I / O相关的性能阻塞。因此,任何“增加的”(也是注入的任何multiprocessing
模块工具)并发性永远不会提高您的本地主机处理吞吐量(没有I / O延迟掩码似乎比增加的CPU作业调度交错时的性能损失更好)和上下文转换成本)。
制作了AI / ML原型制造工厂的原型,几乎每周7天,每天24小时都有BAU,这可能对您有所帮助。
考虑一种不同的架构,而不是让dict
全局可访问。
可以协调流程:
host_00是“参数服务器”,告诉其他人[ aMlMODEL, aParamSET, DataSET ]
host_01是一个“工人池成员”,全速运行,n_jobs = -1
一个host_02是一个“工人池成员”,全速运行,n_jobs = -1
一个host_03是一个“工人池成员”,全速运行,n_jobs = -1
..
一个host_NN是一个“工人池成员”,在全速运行,n_jobs = -1
拥有这种原型工厂概念:
- 吞吐量最大,
- 吞吐量可以动态扩展(夜间等),
- 吞吐量几乎与N
成比例的线性比例
- Factory架构有[CONCURRENT]