加速此代码的最佳多处理技术

问题描述

我正在尝试更多地了解并行化以加速此分类代码。不到 24 小时前,我真的开始阅读它(分享一些背景信息)。我想知道哪种多处理技术最适合解决这个问题,以及我可以期待什么样的速度改进。最后,非常感谢有关如何构建代码的建议。我目前正在研究 ray、joblib 和多处理库。

def clf(i):
cal_probs = []
for i,intem in enumerate(price):
    # cross validation strategy
    cv = RepeatedStratifiedKFold(n_splits=5,n_repeats=3,random_state=1)
    # Classifier
    tune_clf = CalibratedClassifierCV(SVC(gamma='scale',class_weight='balanced',C=0.01),method="isotonic",cv=cv).fit(X_train[[price[i],'regime']],y_train[price[i]])
                                                 
    # Calibrated Probabilities
    pred_probs = tune_clf.predict_proba(X[[price[i],'regime']])    
    cal_probs.append(pred_probs)

解决方法

多处理是一件复杂的事情。对您的用例来说“最好”的可能与最适合不同用例的完全不同。

最佳路线高度依赖于您的环境和数据,因为序列化和反序列化会产生大量开销。在许多情况下,转向多处理实际上会减慢您的代码速度。该解决方案存在复杂性,包括 CPU 开销、内存开销、IO 开销以及各种其他需要考虑的因素。

例如,如果它需要一万行高度复杂的并发证明代码来缩短 0.1 秒,您可能不会认为这种速度改进值得维护开销,因此在那里做的“最好”的事情将其保留为单线程解决方案。其他用例可能认为这是可以接受的成本。

如果没有这些信息,给出的任何答案都需要假设所有影响因素对您的相对重要性。

我会说“最好”是使用 CalibratedClassifierCVn_jobs 参数,因为这非常简单且易于实现 - 它不需要进一步的依赖项,您不需要编写任何并行代码。