You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中使用pmap并行拟合线性混合模型遇KeyError问题求助

Julia并行拟合线性混合模型pmap报错解决方案

问题场景

在Mac OSX 12.6.3系统、Julia 1.9环境下,尝试用pmap对同一数据集并行拟合不同线性混合模型:

  • 单个模型拟合正常,pmap执行原生函数(如pmap(sqrt, 1:100))也无问题
  • 自定义fit_mm函数用map运行正常,但用pmap时触发错误:
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是用于修改baseFormula的变量列表,df为数据集

核心原因

代码中先执行@everywhere using ...加载依赖包,之后才调用addprocs(2)新增worker进程。@everywhere仅对执行该指令时已存在的进程生效,新增的进程并未加载所需的包,导致运行时找不到StatsModels依赖。

解决方法

方法一:调整代码顺序

先添加进程,再用@everywhere加载所有依赖包,确保新增的worker进程能获取到所需的库:

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

# 定义并行执行的拟合函数
@everywhere begin
    function fit_mm(testVar, f, data)
       # 你的模型拟合逻辑
    end        
end

# 加载数据集...
# 执行并行拟合
pmap(x -> fit_mm(x, baseFormula, df), covs)

方法二:启动Julia时直接指定进程数

启动Julia时通过--procs参数指定并行进程数,这样所有进程启动时共享初始环境,无需在代码中动态添加:

# 启动Julia时指定2个并行进程
julia --procs 2

随后在代码中直接使用@everywhere加载包和定义函数即可,无需调用addprocs。

额外注意事项

  • 确保baseFormula和数据集df能被所有worker进程访问,若变量未自动传递,可通过@everywhere显式声明,或依赖Julia的自动序列化机制。
  • 若数据集df体积较大,建议使用SharedArrays等分布式数据结构,避免重复拷贝数据,提升并行效率。

内容的提问来源于stack exchange,提问作者Claudio Esteban Pérez Leighton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:35:27