betareg 不在 CentOS 上使用多线程
betareg not using multithreading on CentOS
模型拟合在 Cent 上运行单线程OS
我正在拟合 Beta 回归模型与 the betareg package 中的 betamix
函数的混合。我最初在 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 执行使用所有分配的线程?
使用 RhpcBLASctl 指定线程
The RhpcBLASctl package 提供了一种方法 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)
模型拟合在 Cent 上运行单线程OS
我正在拟合 Beta 回归模型与 the betareg package 中的 betamix
函数的混合。我最初在 Mac OS X 上开发了代码,但现在 运行 它(即,在 HPC 集群上 规模化 )用于作业管理的 LSF 和节点上的 CentOS。对于这两种情况,我都使用由以下 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
在我的本地机器上,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 执行使用所有分配的线程?
使用 RhpcBLASctl 指定线程
The RhpcBLASctl package 提供了一种方法 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)