2017-05-07 131 views
3

我有一个AWS Lambda函数,它调用Algorithmia上的深度学习函数,对结果执行一些后处理,然后返回一些数据。 Algorithmia提供了一个python client,我正在使用这个算法,它使得向Algorithmia平台上的算法发送请求变得容易一些。AWS Lambda长时间运行http请求

问题如下:当一个算法函数没有被调用一段时间后,它被卸载并且第一次调用将其加热(冷启动)需要一段时间,可能需要30秒。如果我的Lambda函数要等待30秒才能响应,那么碰巧从冷启动中触发算法功能将非常昂贵和浪费。

是否有某种方式可以在Lambda中发送HTTP请求,并在请求完成时将结果传送到新的Lambda函数中,以便不需要Lambda函数等待整个时间并浪费资源?我希望不是因为我不确定这实际上是如何工作的 - 有没有人有其他想法来避免等待一段时间来回应并浪费Lambda资源?

编辑:在大多数情况下(除了显然在Algorithmia算法需要一段时间的那些,从冷启动加载)延迟是一个问题,我不能做一些变通方法与Algorithmia增加延迟函数编写它对S3的响应(例如),然后触发Lambda函数。

+0

这是在什么环境中运行?桌面?网络服务器? Linux呢?视窗?等等。 – wallyk

+0

对不起,我不确定你的意思。如果您要求的话,算法是托管的云ML服务。 – abagshaw

+0

除了使用具有与lambda具有相同触发器的VM(工作机)以外,我没有看到其他任何方式来操作Algorithma,然后VM或者处理结果或传递到触发lambda进行后处理的队列。 – johni

回答

0

您可以创建一个Lambda函数来调用Algorithmia API,以便为您的主要处理函数“保持温暖”。您可以为此使用Lambda预定事件。

+0

我同意@joarleymoraes这就是我所说的ping功能。它也不一定是单独的Lambda函数,当特定的有效载荷传递给它时,可以将该功能添加到现有函数中。在Cloudwatch Events(这是Lambda的调度机制)中,指定要传递给函数的有效内容,例如{“ping”:True},并且在您的lambda函数中,只要您获得该事件调用Algorithmia以使其保持温暖。如果有必要,您可以安排这种情况发生在每分钟。 – alanwill

+0

在某些情况下,这是可行的,但是对于多久你不得不打电话来“保持温暖”的保证并不多。如果你对保持lambda运行30秒的成本很敏感,那么我猜测你可能对持续ping该函数的成本也很敏感。 (编辑:我似乎误解了原始问题的“成本敏感性”。) – anowell

1

输出文件的许多Algorithmia函数允许您指定输出位置(通常是输入JSON的output参数)。如果这种假设适用于您的情况,那么您可以将Algorithmia函数直接写入S3存储桶并让S3触发单独的lambda函数。过程是这样的:

  • Add an S3 data source您Algorithmia账户,并根据自己的需要配置权限。

  • 当调用该算法时,将输出参数设置为使用该S3数据源,例如, "output": "s3://algorithm-name/sample-0001.png"

  • 配置Algorithmia的python客户端忽略输出。这将导致该请求立即返回,而不是等待函数来完成:

from Algorithmia.algorithm import OutputType 

client.algo("username/algoname") 
    .set_options(output=OutputType.void) 
    .pipe(input) 
+1

感谢您的想法,但是如果您在我的文章中查看编辑,我提到这种解决方案可能无法满足我的需求。每个ms计数并写入一个文件到S3,然后触发一个lambda函数,我认为这会相当昂贵,花费至少几百ms(或者几秒钟 - 我不知道它有多快)。 – abagshaw

+0

啊......我误解了“昂贵”作为定价问题而不是延迟问题。像@joarleymoraes提到的那样,定期ping服务是今天的选择。 – anowell

相关问题