0

模型拟合在 CentOS 上单线程运行

我正在拟合 Beta 回归模型与betaregbetamix中的函数混合。我最初在 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()这两种情况的输出表明没有parallel加载到 HPC 上下文中。但是,显式添加library(parallel)并没有什么不同。

相同的 BLAS 库版本

另一个想法是,也许 BLAS 库是不同的,但是,它们似乎也匹配(尽管显然是特定于平台的构建)。

osx-64 BLAS

## Matrix products: default
## BLAS/LAPACK: /Users/user/miniconda3/envs/betareg/lib/libopenblasp-r0.3.12.dylib

linux-64 BLAS

## Matrix products: default
## BLAS/LAPACK: /home/user/mm-stem-cluster/.snakemake/conda/80842b70/lib/libopenblasp-r0.3.12.so

如何让 CentOS 执行以使用所有分配的线程?

4

1 回答 1

0

使用 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)
于 2021-03-09T04:10:47.077 回答