【问题标题】:Pandas on OpenShift v3OpenShift v3 上的熊猫
【发布时间】:2018-02-12 07:40:02
【问题描述】:

现在 OpenShift Online V2 已宣布服务终止,我希望将我的 Python 应用程序迁移到 OpenShift Online V3,即 OpenShift NextGen。 Pandas 是一项要求(并在requirements.txt 中列出)

这对get pandas installed in v2 来说已经很重要了,但是 V3 不允许在构建过程中进行手动交互(或者是这样吗?)。

当我尝试构建我的应用程序时,构建过程会在一小时后停止。 pip 已下载并安装了 requirements.txt 的内容,并且正在为选定的包运行 setup.py。日志文件的和是

Running setup.py install for numpy
Running setup.py install for Bottleneck
Running setup.py install for numexpr
Running setup.py install for pandas

然后进程停止,没有任何错误消息。

有人知道如何在 OpenShift V3 上构建需要 pandas 的 Python 应用程序吗?

【问题讨论】:

  • 您尝试从 requirements.txt 文件安装多少个不同的 Python 包?即使在重新创建与 Jupyter datascience-notebook 相同的软件包列表时,也从未见过构建映像需要这么长时间。你是哪种在线环境?
  • requirements.txt 包含 69 行。 pip 快速运行并停止运行 setup.py for pandas 在大约 1 小时后构建失败之前。我正在使用 OpenShift Online 3 Starter 来了解移植工作的规模。
  • 您在哪个特定的 Starter 层实例上,us-east-1、us-west-1 还是其他?有些有时很慢。
  • 这是美国西部(俄勒冈州)。从网址我相信它是starter-us-west-2
  • 你的仓库是公开的吗?我不在 us-west-2 上,但如果我能抽出时间,我或许可以在 us-east-1 上尝试一下,看看是否能找出原因。下周要去旅行,所以不能保证。

标签: python pandas openshift


【解决方案1】:

这将是两件事之一。

编译 Pandas 都会占用大量内存,可能是由于编译器遇到了一些病态的情况。或者,此时生成的图像的大小超过了内部限制,因此分配的磁盘空间不足。

如果是内存,则需要增加分配给构建 pod 的内存。在 Online 中默认为 512Mi。

要增加限制,您需要从 Web 控制台或使用 oc edit 从命令行编辑构建配置的 YAML/JSON。

对于 YAML,您需要添加以下内容:

  resources:
    limits:
      memory: 1Gi

这是设置字段:

$ oc explain bc.spec.resources.limits FIELD: limits <object>

DESCRIPTION:
     Limits describes the maximum amount of compute resources allowed. More
     info: http://kubernetes.io/docs/user-guide/compute-resources/

最大值为 1Gi。似乎增加此值确实可以完成构建,但将其增加到 768Mi 是不够的。

请注意,这会在运行时从compute-resources-timebound 的配额中占用内存,并且由于它在构建期间全部使用它,因此您同时尝试和执行的其他操作可能会被搁置。

FWIW,本地构建的图像大小,而不是在线,仅生成:

172.30.1.1:5000/mysite/osv3test              latest               f323d9b036f6        About an hour ago   910MB

因此,除非在清理之前使用的中间空间是一个问题,否则这不是问题。

因此增加用于构建的内存似乎是答案。

【讨论】:

  • 太棒了!非常感谢,格雷厄姆,一路走好!这是内存限制(而不是图像大小)。 v2 的解决方案是手动删除 gcc 的优化级别。我猜,编译器需要巨大的内存资源来优化 Pandas 附带的这些由计算机生成的大型 c 文件。
  • 如果软件包有二进制轮,您也可以尝试添加文件.s2i/environment,并在其中添加UPGRADE_PIP_TO_LATEST=1。默认情况下,不使用最新的pip 版本,旧版本的二进制轮子存在一些问题。因此,如果有轮子,pip 的较新版本可能会使用它,因此无需从源代码编译它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2015-11-14
  • 1970-01-01
相关资源
最近更新 更多