Julia中的线性回归的并行/多线程版本

4

我使用Julia的GLM包实现了带交互项的回归模型:

Reg = lm(@formula(dep_var ~ var1&var2&var3), data, true)

拟合这个公式需要大量的RAM(>80 GB),但是我注意到计算是在一个核心上进行的,尽管我的操作系统(x86_64-pc-linux-gnu)有 8 个 CPU 核心。

是否可能使用多进程/并行化方法实现线性回归?

我认为这也可能改善模型运行时间。


1
在我的机器上,Julia 执行的 BLAS 操作默认情况下始终是多线程的。也就是说,我从来没有改变过任何环境变量。可能是你计算中的其他因素导致了这个问题吗?你的 RAM 是否在某个时刻达到了最大值?你的机器是否开始使用 Swap?也许尝试一个较小的矩阵操作,比如求逆一个 5000 x 5000 的矩阵,看看你的机器是否只使用了一个核心。 - Colin T Bowers
1个回答

2

拟合回归模型基本上是进行大量矩阵运算。默认情况下,Julia使用BLAS,您可以尝试将其配置为多线程的最简单方法是在多线程环境下运行Julia并设置BLAS.set_num_threads()配置。

在启动Julia之前,请运行:

set JULIA_NUM_THREADS=4

或者在Linux上

export JULIA_NUM_THREADS=4

一旦启动Julia,请运行该命令。

BLAS.set_num_threads(4)

你会发现线性回归模型的表现有所提升。

2
非常感谢您的回答!我尝试了您的建议,但不幸的是 BLAS.set_num_threads(4) 对我没有起作用 - 仍然只使用一个 CPU 核心,并且 Zabbix 监控显示内存使用量增加。此外,模型运行时间增加了约一分钟。 - red_quark
有趣的是,在我的机器上我从来没有需要这样做。执行BLAS操作的Julia代码默认情况下总是多线程的... - Colin T Bowers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接