python - 为什么我的优化求解器在 docker 中运行速度较慢?

标签 python performance docker optimization mathematical-optimization

我是 docker 的新手,最近写了一个 dockerfile 来容器化一个名为 SuiteOPT 的数学优化求解器。但是,在针对一些测试问题测试优化求解器时,我在 docker 中遇到的性能比在 docker 外部要慢。例如,线性程序 (demoLP.py) 的一个演示问题在我的机器上需要大约 12 秒才能解决,但在 docker 中需要大约 35 秒。我花了大约一个星期的时间浏览博客和 stackoverflow 帖子以寻找解决方案,但无论我做了什么更改,docker 中的时间总是大约 35 秒。有谁知道可能会发生什么,或者有人能指出我正确的方向吗?

以下是优化求解器的 docker hub 和 PYPI 页面的链接:

Docker hub for SuiteOPT

PYPI page for SuiteOPT

编辑 1:根据 @user3666197 的评论添加额外的想法。虽然我没想到 SuiteOPT 在 docker 容器中表现如此好,但我主要对这个演示问题的 ~3 倍减速感到惊讶。也许问题可以重述如下:如何确定这种减速是否纯粹是由于我在 docker 容器内执行 CPU-RAM-I/O 密集型代码而不是由于某些原因造成的我的 Dockerfile 配置有其他问题吗?

注意:这种容器化的目的是为用户提供一种简单的方法来开始使用 Python 中的优化软件。虽然优化软件在 PYPI 上可用,但有许多非 Python 依赖项可能会给希望使用该软件而不遇到安装问题的人们带来问题。

最佳答案

Q : How can determine whether or not this slowdown is caused purely to the fact that I am executing a CPU-RAM-I/O intensive code inside of a docker container instead of due to some other issue with the configuration of my Dockerfile?

战场:

enter image description here ( Credits: Brendan GREGG )

第 0 步:收集有关主机端运行处理的数据:


 mpstat -P ALL 1 ### 1 [s] sampled CPU counters in one terminal-session (may log to file)

 python demoLP.py  # <TheWorkloadUnderTest> expected ~ 12 [s] on bare metal system 

第 1 步:收集有关相同处理但在 Docker 容器内的数据

加上审查策略--cpus和--cpu-shares中设置(可能 --memory +--kernel-memory 如果使用 )
加上查看 throttled_time 中显示的效果(引用页 13)

cat /sys/fs/cgroup/cpu,cpuacct/cpu.stat
nr_periods 0
nr_throttled 0
throttled_time 0 <-------------------------------------------------[*] increasing?

另外通过以下方式查看 Docker 容器的工作负载 View :

cat /proc/<_PID_>/status | grep nonvolu ### in one terminal session
nonvoluntary_ctxt_switches: 6 <------------------------------------[*] increasing?

systemd-cgtop                           ### view <Tasks> <%CPU> <Memory> <In/s> <Out/s>

第 2 步:

使用上面的流程图根据设置的绝对 CPU 上限策略和 CPU 份额策略检查观察到的指示

关于python - 为什么我的优化求解器在 docker 中运行速度较慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60310124/

相关文章:

python - 如何应用方法来捕获 re.sub 中的组

c# - XML 读取字典的速度随着时间的推移而变慢

windows - 如何在不连接到 Internet 的情况下运行 docker 镜像?

python - 如何根据特定顺序对 pandas 列进行排序?

python - 如何使用索引列表从 pandas 数据框中删除行

asp.net - 在 ASP.NET 4 WebForms 中压缩和缩小 WebResource.axd 和 ScriptResource.axd

c# - 为什么在 C# 中有些迭代器比其他迭代器快?

wordpress - 在 docker 容器中的 nginx 上进行 Woocommerce webhook 调试

ubuntu - ubuntu 16.04 Unity 中的 Docker 图标系统托盘

python - 在 python 中使用 Seaborn 在对图中进行分布