【问题标题】:Numpy error on Google Cloud Functions which does not happen locallyGoogle Cloud Functions 上的 Numpy 错误不会在本地发生
【发布时间】:2022-01-15 17:37:08
【问题描述】:

以下谷歌云功能在本地运行良好,但在云上部署时失败。

from flask import escape
import functions_framework
import numpy as np

@functions_framework.http
def test_func(request):
    np_array = np.zeros(172128250, dtype=np.complex64)
    print('np_array shape: ', np_array.shape)
    abs_array = np.abs(np_array)
    print('abs_array shape: ', abs_array.shape)
    return 'Hello World'

尝试过的 Python 版本:3.7、3.8 和 3.9

超时:540 秒

内存:8GB

np_array 已成功创建,但无法计算 abs。函数打印第一个日志np_array shape: (172128250,),但无法打印第二个日志。函数突然退出打印Function execution took 2408 ms, finished with status: 'connection error'。它适用于本地的所有大小,但在云端,它特别适用于以下 10 种大小的 NumPy 数组[172128241, 172128242, ..., 172128250]

【问题讨论】:

  • 你没有其他日志吗?好奇怪……
  • @guillaumeblaquiere 是的,我看到一个警告。 OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k。实际上,这个错误是在某些librosa 函数内部调用np.abs 时发生的。经过多次迭代的调试,我得到了这两行代码。最初,np_array 是二维的1025 * 167930
  • @guillaumeblaquiere ,我感觉这是由于云上的一些内存分配问题。我发现了另外六个大小为 10 的范围,它们失败了{172127217, ..., 172127226}, {172127217..172127226}, {172126193..172126202}, {172125169..172125178}, {172124145..172124154}, {172123121..172123130}。请注意,这些范围之间的差异正好是1024

标签: python python-3.x numpy google-cloud-platform google-cloud-functions


【解决方案1】:

您的执行环境是沙盒化的,您无法获得一些 CPU 功能(有关更多详细信息,请查看gVisor project)。

要解决这个问题,我可以建议您切换到 Cloud Run(只需将您的代码包装在 Web 服务器中,请参阅我的 old article here)并使用 execution runtime gen2(仍处于预览状态)

【讨论】:

  • 我有理由使用谷歌云功能。您能否确认这是由于谷歌云功能中的一些错误,它应该可以工作?
  • 这不是错误。无论如何,您使用 Cloud Functions 的原因是什么?与 Cloud Run 没有(或非常非常非常少和特定的)区别!
  • 让它与另一个 NumPy 版本一起工作。如果我遇到更多错误,我将检查 cloud run 是否修复了该问题。感谢您的帮助。
【解决方案2】:

发现云上的Numpy版本:1.19.4出现错误。在云端使用1.21.5 后,错误消失。为什么它在本地使用 1.19.4 工作但在云上失败,仍然很奇怪。

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 2022-09-23
    • 2019-05-10
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多