微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。