Docker映像和以奇异性导入的同一映像之间的不同行为

问题描述

我最近开始使用Docker来确保研究的计算可重复性。由于我所在机构的HPC服务仅支持奇异性,因此当我使用HPC执行部分分析时,我想以奇异性导入Docker映像。但是,当我这样做时,我发现基于原始Docker映像的结果不同于基于以奇异性导入的Docker映像的结果。

这是我直接基于Docker映像构建简单的贝叶斯回归模型的工作。它在本地运行,也在AWS的实例上运行,从而产生相同的输出(如预期)。

docker pull akiramurakami/gramm-mor:v1.0
docker run -it akiramurakami/gramm-mor:v1.0 bash
Rscript -e 'library("brms"); library("tidyverse"); set.seed(1); d <- tibble(x = rnorm(100),y = 2 * x - 1 + rnorm(100)); m <- brm(y ~ x,data = d,seed = 1); summary(m)'

下面是输出的一部分。

Population-Level Effects: 
          Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept    -1.04      0.10    -1.23    -0.85 1.00     3812     2469
x             2.00      0.11     1.79     2.21 1.00     4625     3037

这是我使用奇点在HPC上所做的事情。

singularity pull docker://akiramurakami/gramm-mor:v1.0
singularity exec gramm-mor_v1.0.sif Rscript -e 'library("brms"); library("tidyverse"); set.seed(1); d <- tibble(x = rnorm(100),seed = 1); summary(m)'

结果不同(请参见Bulk_ESSTail_ESS列)。

Population-Level Effects: 
          Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept    -1.04      0.10    -1.23    -0.84 1.00     3798     2826
x             2.00      0.11     1.78     2.22 1.00     4275     2913

这是为什么,并且有一种方法可以导入和使用奇异的Docker映像,使其产生的结果与基于原始Docker映像的结果相同?

下面是使用的Dockerfile。

FROM rocker/r-ver:3.6.3
LABEL "maintainer"="xxx"

RUN apt-get update -qq && apt-get -y --no-install-recommends install \
  file \
  git \
  libapparmor1 \
  libclang-dev \
  libcurl4-openssl-dev \
  libedit2 \
  libssl-dev \
  lsb-release \
  multiarch-support \
  psmisc \
  procps \
  python-setuptools \
  sudo \
  wget \
  libxml2-dev \
  libcairo2-dev \
  libsqlite-dev \
  libmariadbd-dev \
  libmariadbclient-dev \
  libpq-dev \
  libssh2-1-dev \
  unixodbc-dev \
  libsasl2-dev \
  clang
  
# https://github.com/stan-dev/rstan/wiki/Installing-RStan-on-Linux
RUN Rscript -e 'dotR <- file.path(Sys.getenv("HOME"),".R"); \
  if (!file.exists(dotR)) dir.create(dotR); \
  M <- file.path(dotR,"Makevars"); \
  if (!file.exists(M)) file.create(M); \
  cat("\nCXX14FLAGS=-O3 -march=native -mtune=native -fPIC","CXX14=clang++",file = M,sep = "\n",append = TRUE)'

RUN Rscript -e 'options(repos = list(CRAN = "http://mran.revolutionanalytics.com/snapshot/2020-07-01")); \
  install.packages(c("brms","data.table","devtools","SnowballC","tidyverse","dplyr"))'

2020年8月29日更新
我已经问过the same question at the Stan Forums,并收到了一些有用的评论(尽管仍然不清楚所涉及差异的确切原因)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...