模型拟合在CentOS上单线程运行
我正在拟合β回归模型的混合物与betamix
函数从betareg包中。我最初在Mac OS X上开发代码,但现在正在HPC集群上运行它(即,以的规模移动到), LSF用于作业管理,节点上使用CentOS。对于这两种情况,我使用以下YAML
定义的Conda环境betareg.yaml
name: betareg
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- r-base=4.0.3
- r-tidyverse
- r-magrittr
- r-cowplot
- r-knitr
- r-flexmix
- r-betareg
在我的本地机器上,betamix
步骤自动扩展到所有可用的内核。然而,在我通过Snakemake部署作业并提供threads: 16
的集群上,监控显示所有作业都是单线程运行的,尽管Snakemake日志清楚地显示每个作业正确分配了16个内核。
平行包吗?
比较两种情况下的sessionInfo()
输出,可以发现在HPC上下文中parallel
没有被加载。然而,显式地添加library(parallel)
并没有什么不同。
相同的BLAS库版本
另一个想法是,也许BLAS库是不同的,然而,这些也似乎是匹配的(尽管显然是特定于平台的构建)。
osx - 64布拉斯特区
## Matrix products: default
## BLAS/LAPACK: /Users/user/miniconda3/envs/betareg/lib/libopenblasp-r0.3.12.dylib
linux - 64布拉斯特区
## Matrix products: default
## BLAS/LAPACK: /home/user/mm-stem-cluster/.snakemake/conda/80842b70/lib/libopenblasp-r0.3.12.so
如何让CentOS执行使用所有分配的线程?
使用RhpcBLASctl指定线程
RhpcBLASctl包提供了一个方法blas_set_num_threads()
,该方法似乎足以启用指定数量的线程。对于这个特定的应用程序,我将YAML更新为
betareg.yaml
name: betareg
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- r-base=4.0.3
- r-tidyverse
- r-magrittr
- r-cowplot
- r-knitr
- r-flexmix
- r-betareg
- r-rhpcblasctl
,并添加了以下内容来设置脚本中正确的线程数:
RhpcBLASctl::blas_set_num_threads(snakemake@threads)