docker - Cloud Run - OpenBLAS 警告和应用程序重新启动(不是冷启动问题)
问题描述
问题
我有一个应用程序在Cloud Run实例上运行了 5 个月。该应用程序的启动时间约为 3 分钟,启动结束后,它不需要太多 RAM。这是我在本地运行应用程序时 docker stats 的两个快照:
当应用程序不兴奋时
当应用程序每秒接收 10 个请求时(目前这超出了我们的用例):
当我在本地运行应用程序时没有任何问题,但是当我在 Cloud Run 上部署它时会出现问题。我不断收到:“OpenBLAS 警告 - 无法确定此系统上的 L2 缓存大小,假设为 256k”消息,然后重新启动应用程序。这是一个问题,因为正如我所说,应用程序最多需要 3 分钟才能重新启动,在此期间请求需要很长时间才能得到处理。
我已经通过使用 1 的最小实例并使用谷歌云调度程序每分钟查询一次服务来解决冷启动问题。
例子
在第二个示例中,警告在应用程序重新启动后再次出现,导致连续第二次重新启动,这种情况经常发生。另请注意,这些警告/重启不一定会在用户连接到应用程序时发生,但可能会在唯一的活动归因于 Google Cloud Scheduler 时发生
我尝试将分配的 RAM 和 CPU 增加到 4 个 CPU 和 4 Go 的 RAM(这是一个巨大的过度杀戮),但问题仍然存在。
21 年 2 月更新 截至 21 年 1 月 1 日,我们停止从我们的云运行服务中看到这种行为(也许是由于更新,我不知道)。我确实联系了 GCP 支持,但他们只是告诉我在 OpenBLAS github repo 上提出问题,但由于我无法重现该行为,所以我没有这样做。我会留下这个问题,因为我所做的一切都没有真正奏效。
解决方案
OpenBLAS 执行高性能计算优化,并且需要知道什么是 CPU 容量以将其自身调优。
但是,当您在 Cloud Run 上运行容器时,您会在沙盒 GVisor 中运行它,以提高在同一无服务器平台上运行的所有容器的安全性和隔离性。
此沙箱拦截低级内核调用并丢弃异常/危险的调用。我猜出于这个原因,OpenBLAS 无法确定 L2 缓存大小。在您的环境中,您没有此沙箱,您可以直接访问 CPU 信息。
为什么要重启??这可能是 OpenBLAS 的问题或 Cloud Run 的问题(可疑的内核调用,杀死实例并重新启动它)。
我没有立即解决方案,因为我不知道 OpenBLAS。我对 Tensorflow Serving 有类似的行为,并且 tensorflow 提出了一个没有任何 CPU 优化的编译版本:效率较低但更便携,并且对不同的环境约束更具弹性。如果 OpenBLAS 存在类似的编译,那么测试它可能会很棒。
推荐阅读
- sql-server - 批处理文件来解析字符串的文本文件,该字符串将在返回 true 时执行 SQL 语句
- dart - 为什么我们在 Flutter 中需要 Statefulwidget 中的 State 方法?
- jquery - 为 jquery mouseleave 工具提示悬停添加延迟
- javascript - 在不使用 flexbox 的情况下对齐项目的顶部和底部
- javascript - 从 SuiteScript 的下拉菜单中选择一个选项后,如何使文本框出现?
- r - 如何在具有不同长度元素的列表上选择行并使用应用功能
- graphql - GraphQL API 前的 Google Endpoint
- visual-studio-code - VSCode:使用目录路径快速打开
- python - 无效的语法 (
,第 21 行) - apache-spark - 齐柏林飞艇上未解决的关系