为什么在Julia 0.3.12MixedModels 0.3.22和Julia1.2MixedModels 2.2.0之间的混合模型拟合时间存在巨大差异?

问题描述

我正在运行一个线性混合效应模型,该模型的数据集包含约500K个观测值。 我有一个连续的响应(即Y),24个类别变量(即X1,...,X24), 8个连续变量(即Z1,...,Z8)和一个ID变量(即1160级ID),用于指定随机效果。 线性混合模型公式为Y〜X1 + ... + X24 + Z1 + ... + Z8 +(0 + X1 | ID)+ ... +(0 + X24 | ID)

在Windows中,为了适合Julia 0.3中的模型,我使用以下命令使用MixedModels包(版本0.3.22):

  1. 试穿步骤fit1 = lmm(my_formula,my_DATA),并且
  2. 适合的步骤fit(fit1)

预装配步骤需要〜38秒,装配步骤需要〜14秒;总共52秒

同样,在Windows中,使用MixedModels(版本2.2.0)在Julia 1.2中拟合了该模型:

  1. 试穿步骤fit2 = LinearMixedModel(@formula(my_formula),my_DATA),并且
  2. 适合的步骤fit!(fit2)

在这种情况下,预拟合步骤大约需要20秒,而拟合步骤大约需要301秒(共321秒)

在同一服务器上设置Linux Docker并将Julia 1.2与MixedModels(版本2.2.0)一起使用时:

  1. 试穿步骤fit3 = LinearMixedModel(@formula(my_formula),my_DATA),并且
  2. 适合的步骤fit!(fit3)

预拟合步骤需要约21秒,而拟合步骤需要约108秒(总计129秒)。 在这种情况下,如果我考虑将线程数设置为1,则预适配步骤大约需要25秒,而适配步骤大约需要55秒(总共80秒)。

请参见以下摘要结果。请注意,已经研究了更多配置。 关于列,该模型适合Windows或Dockerized Linux(Windows / Linux列)。 我已经检查了在模型拟合之前将线程数设置为1还是允许其采用默认值(列:BLAS.set_num_threads(1))。

+---------------+---------------+-------------------------+--------------+----------+------------+
| Windows/Linux | Julia version | BLAS.set_num_threads(1) | Pre-fit time | Fit time | Total time |
|               | (MixedModels) |                         |              |          |            |
+---------------+---------------+-------------------------+--------------+----------+------------+
|               | 0.3.12(0.3.22)| No                      |       38 sec |   14 sec |     52 sec |
|               +---------------+-------------------------+--------------+----------+------------+
| Windows       | 1.2 (2.2.0)   | No                      |       20 sec |  301 sec |    321 sec |
+---------------+---------------+-------------------------+--------------+----------+------------+
|               | 1.2 (2.2.0)   | No                      |       21 sec |  108 sec |    129 sec |
|               +---------------+-------------------------+--------------+----------+------------+
|               | 1.2 (2.2.0)   | Yes                     |       25 sec |   55 sec |     80 sec |
| Linux Docker  +---------------+-------------------------+--------------+----------+------------+
|               | 1.4 (2.2.0)   | No                      |       25 sec |  108 sec |    133 sec |
|               +---------------+-------------------------+--------------+----------+------------+
|               | 1.4 (2.2.0)   | Yes                     |       24 sec |   57 sec |     81 sec |
+---------------+---------------+-------------------------+--------------+----------+------------+

考虑到我多次运行模型,最终朱莉娅0.3.12与其余方法之间存在数小时的差异。 即使通过使用Julia 1.2在Linux中运行模型并将线程数设置为1,该过程也要花费50%的时间。 有谁知道这种差异源自何处?是否有一种方法可以加快Julia 1.2的拟合过程,或使其与Julia 0.3.12具有可比性?

这是Windows 2012服务器,带有CPU:Intel Xeon @ 3.5GHz E5-2637 v3(4核; 8个线程)和64 GB RAM。 Windows和Linux运行都在同一服务器上执行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...