【问题标题】:AWS Lambda loading libraries each time?AWS Lambda 每次都加载库?
【发布时间】:2017-03-30 13:40:48
【问题描述】:

我正在使用 AWS Lambda 创建一个可以处理数据的 Python 函数。 我需要加载一个重型模型来运行我的脚本(经过训练的 word2vec 模型),例如在我的计算机上完成它大约需要 5 分钟。但是一旦加载,函数的执行速度非常快。 如果我使用 AWS Lambda,这个模型是只加载一次还是每次调用我的函数时都会加载?

谢谢,

【问题讨论】:

    标签: python api amazon-web-services aws-lambda


    【解决方案1】:

    也许

    AWS Lambda 使用可重复使用的容器。因此,对于您的用例,如果 Lambda 函数发生在已经初始化的容器中,它将快速执行。否则会很慢。但是,您无法预测行为。

    相关文档:

    1. 来自here:

    函数在创建或更新其代码或资源配置后第一次执行时,将创建一个具有适当资源的新容器来执行它,并将函数的代码加载到容器中。

    假设你的函数完成了,一段时间过去了,然后你再次调用它。 Lambda 可能会重新创建一个新容器,在这种情况下,体验就像上面描述的一样。如果您更改代码,肯定会出现这种情况。但是,如果您没有更改代码并且没有太多时间过去,Lambda 可能会重用之前的容器。

    请记住,您不能依赖重复使用的容器,因为创建一个新容器是 Lambda 的特权。

    1. 更多官方文档here

    【讨论】:

      【解决方案2】:

      它可能会在您每次调用 Lambda 时加载(感谢 Michael-sqlbot 的更正)。

      我们可以根据以下推断AWS Lambdas是无状态的

      1. Lambda is stateless

        “Lambda 函数是‘无状态的’,与底层基础设施没有关联,因此 Lambda 可以根据需要快速启动函数的多个副本,以适应传入事件的速率

      2. Lambda must be coded in stateless style

        您的 Lambda 函数代码必须以无状态样式编写,并且与底层计算基础设施没有关联。您的代码应该期望本地文件系统访问、子进程和类似工件被限制在请求的生命周期内

      然而Container reuse is possible in Lambda

      如果您没有更改代码并且没有太多时间过去,Lambda 可能会重用之前的容器

      所以基本上回答你的问题,你有可能取回模型,并且这种概率与 2 次 Lambda 调用之间的时间跨度成反比。但是你根本不能依赖它

      【讨论】:

      • 不正确。 Lambda 理论上是无状态的,但实际上它可以自行决定重用容器。正确答案是“也许”。
      • 不确定我是否理解正确。这就是 AWS 所说的“Lambda 函数是‘无状态的’,与底层基础设施没有关联,因此 Lambda 可以根据需要快速启动尽可能多的函数副本,以适应传入事件的速率”。引用自aws.amazon.com/lambda/details
      • 您能否提供更多有关“重用容器”的详细信息,并提供一些参考
      • 这里还有更多“您的 Lambda 函数代码必须以无状态样式编写,并且与底层计算基础设施没有关联。您的代码应该期望本地文件系统访问、子进程和类似工件仅限于请求的生命周期”来自docs.aws.amazon.com/lambda/latest/dg/programming-model-v2.html
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2021-12-16
      相关资源
      最近更新 更多