起きていた問題
Scanpyで描いたUMAPに再現性がない。
予想としてはPCAの部分で相違が生まれていそう。
環境
こちらのDockerイメージをスパコンのSingularityコンテナとして利用。
バージョン情報:
scanpy==1.7.0 anndata==0.7.5 umap==0.5.1 numpy==1.19.2 scipy==1.5.2 pandas==1.1.3 scikit-learn==0.23.2 statsmodels==0.12.0 python-igraph==0.9.0 louvain==0.7.0 leidenalg==0.8.3,
解決方法
#1187で議論されているように、環境変数OMP_NUM_THREADS
を設定し、BLAS librariesが使用するCPU数を制限することで再現性が確保された。
import os
os.environ['OMP_NUM_THREADS'] = '1'
import numpy as np
import pandas as pd
import scanpy as sc
〜以下省略〜
疑問・補足
ローカルのDockerコンテナおよびJupyterLab上では、同様にしても再現性を確保できなかった。
なぜ?
また今回は上記の環境変数OMP_NUM_THREADS
のみの指定で再現性が確保されたが、
#313で取り上げられている通り、ハッシュランダム化を無効化する、
os.environ['PYTHONHASHSEED'] = '0'
についても指定しておいたほうが良さそう。