如何从本地环境以编程方式运行 jupyter 笔记本(在 Sagemaker 笔记本内)

tim*_*xyz 7 python amazon-web-services boto3 jupyter-notebook amazon-sagemaker

我可以使用 boto3 启动/停止 Sagemaker 笔记本,但如何运行.py其中的 jupyter 笔记本或脚本?

这是我将从本地环境或 lambda 运行的东西(但这没问题)。

启动 Sagemaker 笔记本实例:

import boto3

client = boto3.client('sagemaker')

client.start_notebook_instance(
    NotebookInstanceName='sagemaker-notebook-name'
)
Run Code Online (Sandbox Code Playgroud)

文档

在 UI 中,我只需单击“打开 Jupyter”,然后运行.py其中的笔记本或脚本。

在此输入图像描述

但我想用 boto3 或其他程序以编程方式完成此操作。

我里面的文件名为lemmatize-input-data.ipynb.

这一定是可能的,但我不确定如何?

我也尝试过:

在“启动笔记本”生命周期配置脚本中,创建一个更简单的测试文件后,调用test_script.ipynb以确定它不是我的 jupyter 笔记本中的高级内容导致错误。

set -e

jupyter nbconvert --execute test_script.ipynb
Run Code Online (Sandbox Code Playgroud)

但得到了错误:

[NbConvertApp] 警告 | 模式“test_script.ipynb”没有匹配任何文件

cwa*_*ort 2

我鼓励你去看看造纸厂。它在底层使用 nbconvert 复制并运行模板笔记本。我发现 papermill 的主要好处是你可以轻松地参数化笔记本并通过 python 字典传递参数。然后,模板的副本会保留执行内容和结果的历史记录。

你的代码会是这样的:

import papermill as pm

pm.execute_notebook(
   'lemmatize-input-data.ipynb',
   'lemmatize-input-data-####.ipynb'
)
Run Code Online (Sandbox Code Playgroud)

#### 类似于 datetime.now() 或任何您想要在笔记本执行时区分它们的内容。

由于笔记本旨在成为活动文档,因此您希望限制外部依赖项的数量,如果笔记本发生更改并且您需要在某个时间点重新运行,这些依赖项可能会发生重大更改。Papermill 通过制作当时执行的快照来解决这个问题。

更新更多背景信息:

我会更新 jupyter 笔记本以包含 python 代码而不是脚本。笔记本将逐个单元执行并像脚本一样运行。如果需要,这还允许您在笔记本中打印和显示中间值和最终值。当 papermill 复制并执行模板笔记本时,所有输出都将显示并保存在笔记本中。这对于任何已生成的图表都很方便。

Papermill 还具有跨笔记本聚合数据的功能。请参阅此处,了解一篇总结造纸厂总体情况的好文章。Papermill 是由 Netflix 设计的,他们在这里有一篇关于其背后哲学的好文章,其中引用了机器学习。

话虽如此,papermill 可用于轻松记录在 sagemaker 中训练机器学习模型的每个步骤。然后使用 papemrill 的聚合功能,您可以以图形方式查看模型随时间的变化情况。