在 Julia 中使用 pmap 并行化拟合线性混合模型

问题描述 投票:0回答:2

我正在尝试使用 Julia 将一组不同的线性混合模型拟合到使用 pmap 的同一数据集(Mac OSX 12.6.3,Julia 1.9)。我可以成功拟合线性混合模型并使用本机函数运行 pmap,例如

pmap(sqrt, 1:100)
。我编写了一个名为
fit_mm
的函数,它接受一个引用数据集列的字符串、要更新的基本公式以及名为
df
的数据集作为输入。我可以使用
map
成功运行它。但是,当我尝试使用 pmap 时,出现以下错误。

julia> # Run map
       pmap(x -> fit_mm(x, baseFormula, df), covs[1:10])
ERROR: On worker 3:
KeyError: key StatsModels [3eaba693-59b7-5ba5-a881-562e759f1c8d] not found

这是我正在使用的汇总代码


using Distributed 
@everywhere using MixedModels
@everywhere using DataFrames
@everywhere using DataFramesMeta
@everywhere using CategoricalArrays
@everywhere using CSV
@everywhere using Term
@everywhere using StatsModels
@everywhere using DelimitedFiles

addprocs(2)

# Function to update formula 
@everywhere begin
    function fit_mm(testVar, f, data)
       ....
    end        
end

# Load data of interest...
# Run map
pmap(x -> fit_mm(x, baseFormula, df), covs) # covs is the list of variables I want to use to modify baseFormula and df is the data
parallel-processing julia mixed-models pmap
2个回答
1
投票

我很抱歉这次没有提供可重现的示例。下次我提问时我会确保这样做。无论如何,我只是想让每个可能读到这篇文章的人知道我解决了这个问题,希望它可以帮助别人。当我关闭和/或重新启动 Julia 时,我注意到出现问题的工作程序中的错误消息不断变化(我有四个工作程序,有时错误分配给工作程序 2,有时分配给工作程序 3,依此类推) )以及未找到的包。我最终发现,如果 addprocs(2) 命令创建了工作程序,那么我应该在声明使用包或函数之前创建工作程序,以便可以将包和函数加载到所有工作程序中。因此,我在声明使用分布式包后立即移动了 addprocs 语句。所以最终的代码是

using Distributed

addprocs(2)
 
@everywhere using MixedModels
@everywhere using DataFrames
@everywhere using DataFramesMeta
@everywhere using CategoricalArrays
@everywhere using CSV
@everywhere using Term
@everywhere using StatsModels
@everywhere using DelimitedFiles

... and then the rest of the code.

这导致代码运行没有问题。


0
投票

是的...需要打开所有的worker,以便在那里定义功能!谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.