r语言 - 在CentOS上不使用多线程



模型拟合在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)

相关内容

  • 没有找到相关文章

最新更新