0

CentOS でモデル フィッティングをシングル スレッドで実行

betaregパッケージbetamix関数を使用してベータ回帰モデルを組み合わせています。私はもともと Mac OS X でコードを開発しましたが、現在はジョブ管理用の LSF とノード上の CentOS を備えた HPC クラスターで実行しています (つまり、大規模に移行しています)。どちらの状況でも、次の 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: 16Snakemake ログがジョブごとに 16 コアの正しい割り当てを明確に示しているにもかかわらず、すべてのジョブがシングルスレッドで実行されていることが監視によって示されます。

パラレルパッケージ?

sessionInfo()両方の状況の出力を比較するとparallel、HPC コンテキストに読み込まれていないことがわかりました。ただし、明示的に追加library(parallel)しても違いはありませんでした。

同一の BLAS ライブラリ バージョン

もう 1 つの考えは、おそらく 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 に答える