在 Docker 容器(buster)上安装 Prophet(pystan build)

在 Docker 容器(buster)上安装 Prophet(pystan build)

我想安装先知在 Docker 容器中。我的 Dockerfile 如下所示:

FROM python:3.7

RUN pip install --upgrade pip
RUN pip install fbprophet

使用以下堆栈跟踪在“pip install fbprophet”步骤中构建图像错误:

    Running setup.py install for fbprophet ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-741oj2zp/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.7m/fbprophet
         cwd: /tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/
    Complete output (10 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib
    creating build/lib/fbprophet
    creating build/lib/fbprophet/stan_model
    Importing plotly failed. Interactive plots will not work.
    INFO:pystan:COMPILING THE C++ CODE FOR MODEL anon_model_dfdaf2b8ece8a02eb11f050ec701c0ec NOW.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-741oj2zp/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.7m/fbprophet Check the logs for full command output.

我在网上找到了一些建议,但尝试过都没有成功(此时,我在没有这些建议的情况下构建了容器fbprophet并运行了它,因此我可以实时尝试命令):

  1. 这里问题是未安装 gcc/g++
  • 我试过了apt install g++ gcc,仍然无法构建(它们已经安装)
  1. pnmartinez 的评论这里表明一些缺少构建工具
  • 我这样做了apt-get install build-essential libncursesw5-dev libreadline-gplv2-dev libssl-dev libgdbm-dev libc6-dev libsqlite3-dev libbz2-dev libffi-dev zlib1g-dev(运行apt-get upgrade、、apt-get update之后apt-get dist-upgrade),并重试,结果相同。
  1. 本期 GH建议降级为pystan==2.18
  • 这次提交 在 v0.6 中引入后,Prophet 限制自己只能使用 PyStan <=2.18.1,因此我尝试使用 pip install prophet==0.5,但仍然失败。(我尝试使用 0.2,但仍然失败。)然后我尝试pip3 uninstall pystan && pip3 install pystan==2.18 && pip3 install fbprophet==0.5使用相同的结果。
  1. 从 conda-forge 安装
  • 我研究过这个,但在docker容器中安装一个可用的conda环境似乎相当复杂
  1. 我也开始尝试在基于 Alpine 的容器而不是 Debian 上安装。
  • 我在 Prophet 阶段之前就开始遇到问题,总的来说,我认为在非标准发行版上构建复杂的 C++ 项目并不容易。

问题似乎是在 gcc 尝试构建 PyStan 模型时发生的。我猜是内存不足(有人声称,该cc1plus进程top使用了​​ 2GB,大约占 RAM 的 90%)这里它最多可以使用 8GB)。但是,这是非常常见的软件,几个月前我成功使用相同的 Dockerfile 安装了 fbprophet,所以我不确定为什么这会成为一个问题。(我尝试在 macOS(Big Sur)和 Linux(Fedora 33)上构建它,结果相同。)

答案1

弄清楚了——因为这是一个内存问题,我只需要为 Docker VM 分配更多内存。这个答案解释如何使用 GUI 进行操作。浪费了很多时间……

答案2

嗯,这就是我发现的 - 我为 Docker VM 提供了 6 个 CPU,因此当它尝试构建代码时,GCC 会产生 6 个线程,每个线程都会消耗太多 RAM。我可以说 - 即使 16 Gb 也可能不够。因此,将 Docker VM 的 CPU 数量限制为 4 个 CPU 可能是一个不错的选择。

答案3

对于遇到此问题的其他任何人,我正在构建基础图像python:3.7-slim更改以python:3.7修复该问题

答案4

使用 Mac OSX Big Sur 11.6

我的 Dockerfile 包括

FROM python:3.7-slim

RUN pip install --upgrade pip
RUN pip install pystan==2.19
RUN pip install fbprophet

相关内容