我在 AWS Sagemaker 中设置了 Juypter Notebook。我想找到一种方法,当新文件上传到某个文件夹(因此是 AWS Lambda)时,在自主触发器上启动此笔记本。我一直在寻找是否有一种简化的方法可以使用 AWS Lambda 触发器来触发 Juypter Notebook。
我研究过使用 API 并将 Sagemaker 转变为端点,但没有成功。
*编辑抱歉,如果问题有点模糊。我在 Juypter 上的笔记本上写了很多代码。我理想地寻找的是,当文件上传到“RandomFile”时,笔记本中的代码将运行。我希望通过设置基于 S3 的触发器来使用 AWS Lambda 来实现此目的。
最佳答案
感谢您使用 Amazon SageMaker!非常有趣的用例!
目前,没有任何直接方法可以在基于 S3 的触发器上触发 Jupyter Notebook 的执行,但您可以通过几种方法来实现此目的:
基于SQS的解决方案
- 配置您的S3 bucket to send Event Notifications to send messages to an SQS queue .
- 在 SageMaker Notebook 实例上配置一个 cron 作业,持续轮询队列中的工作。
- Example shell-script based SQS poller - 当然任何语言都可以。
- Example configuration of a cron job在生命周期配置中
- 当轮询器检测到消息时,在笔记本上执行 nbconvert 或 papermill(按照 Guy 的建议)。
- 配置CloudWatch Alarm on the size of your SQS队列,因此如果您的 cron 作业不再工作,您会收到警报。
然后,只需让笔记本实例始终保持运行状态,它就会检测对象何时上传到 S3。
Lambda 和 Step Functions 解决方案
此解决方案稍微复杂一些,但如果您不希望笔记本实例始终运行,则具有更具成本效益的优点。
- 使用生命周期配置配置您的笔记本实例,该配置执行以下操作:
- 从 S3 中提取文件
- 在后台运行 nbconvert。
- 将nbconvert的结果上传到S3。
- 配置您的 S3 存储桶以将事件通知发送到 Amazon Step Functions。
- 创建 Step Functions 状态机,其中包含以下步骤:
- 启动您的笔记本实例
- 等待nbconvert的结果上传到S3。
- 停止笔记本实例。
其他解决方案
- 使用 nbconvert RESTful API。 nbconvert API 可在/api/nbconvert 获取,但据我所知,它没有详细记录。要在 Lambda 函数中执行此操作,您可以获取笔记本实例的预签名 URL,然后通过 Python 请求库(或类似库)与此 API 进行交互。不过,我还没有测试过这个,所以 YMMV。
关于python-3.x - 如何使用 AWS Lambda 在 AWS Sagemaker 中远程启动 Jupyter Notebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57663282/