如何使用AWS Lambda在AWS Sagemaker中远程启动Juypter Notebook

时间:2019-08-26 18:45:01

标签: python-3.x amazon-web-services aws-lambda amazon-sagemaker

我在AWS Sagemaker中设置了Juypter笔记本。我想找到一种方法,可以在将新文件上传到某个文件夹时在自动触发条件下启动此笔记本(因此称为AWS Lambda)。我一直在寻找是否有一种简化的方法可以通过AWS Lambda触发器来触发Juypter Notebook。

我已经研究过使用API​​并将Sagemaker转换为Endpoint,但这没有用。

* edit很抱歉,这个问题有点模糊。我在Juypter上分配了用此笔记本编写的代码。我理想地寻找的是,当文件上传到“ RandomFile”时,笔记本中的代码将运行。我一直想通过设置基于S3的触发器来使用AWS Lambda做到这一点。

1 个答案:

答案 0 :(得分:2)

感谢您使用Amazon SageMaker!非常有趣的用例!

当前,没有任何直接方法可以在基于S3的触发器上触发Jupyter Notebook的执行,但是有几种方法可以实现此目的:

基于SQS的解决方案

  1. 配置您的S3 bucket to send Event Notifications to send messages to an SQS queue
  2. 在SageMaker Notebook实例上配置cron作业,该作业将不断轮询队列以进行工作。
  3. 当轮询器检测到消息时,请在笔记本上执行nbconvert或papermill(根据Guy的建议)。
  4. 配置CloudWatch Alarm on the size of your SQS队列,以便在您的cron作业不再工作时收到警报。

然后,只要始终保持笔记本计算机实例处于运行状态,它就可以检测何时将对象上载到S3。

Lambda和阶跃函数解决方案

此解决方案稍微复杂一点,但是如果您不想一直运行笔记本实例,则具有更具成本效益的优势。

  1. 使用执行以下操作的生命周期配置来配置您的笔记本实例:
    1. 从S3中拉出文件
    2. 在后台运行nbconvert。
    3. 将nbconvert的结果上传到S3。
  2. 配置S3存储桶以将事件通知发送到Amazon Step Functions。
  3. 创建具有以下步骤的步骤功能状态机:
    1. 启动笔记本实例
    2. 等待nbconvert的结果上载到S3。
    3. 停止笔记本实例。

其他解决方案

  • 使用nbconvert RESTful API。在/ api / nbconvert上可以找到nbconvert API,但是据我所知,它并没有得到很好的记录。要在Lambda函数中执行此操作,您可以获取指向Notebook实例的Presigned URL,然后通过Python Requests库(或类似方法)与此API进行交互。但是,我还没有测试过,所以YMMV。