python-3.x 具有部分共享存储器的多处理

c3frrgcw  于 2023-02-20  发布在  Python
关注(0)|答案(1)|浏览(102)

我手头有一个最小的问题:$Xw = Y$,其中$X$是我的(训练)* 数据 * 矩阵,$w$是一个向量参数化我的模型。

def solve_lsqr(X,Y):
    # something standard
    return w

我想执行一种特定类型的交叉验证,即用一组特定的滞后对数据进行子采样(与scikit-learn的混洗子采样方法相反),因此,该函数不是将所有数据传递给solve_lsqr,而是处理以特定方式选择的数据子集。
我使用python的多处理来并行化我的代码,但我认为我的方法不是最佳的:* 我将整个二次采样数据数组(而不是索引)传递给函数,一旦并行执行,就会完全填满RAM,从而大幅降低性能。*

**我认为将索引集传递给solve_lsqr更合理,并以某种方式通知它数据矩阵$(X,Y)$**的位置。这需要在多处理库的Pool对象中的所有工作者之间共享某种部分内存。部分,因为除了$(X,Y)$之外,所有工作者的内部变量本质上是独立的。

我怎样才能在python中实现它呢?用本机多处理库能做到吗?
谢谢你的帮助。

ebdffaop

ebdffaop1#

解决方案非常简单,只需在solve_lsqr中将数据矩阵$X,Y$声明为global(只读)变量,并使用python切片传递适当的索引。

相关问题