我想使Jupyter的工作自动化。
我在AWS Lambda中创建了一个函数,当S3存储桶接收到.csv文件时,它将打开所确定的Jupyter实例,并且可以正常工作。
现在,我想执行完成所有工作的.ipynb文件。
我尝试使用Jupyter配置生命周期。
但是它总是失败。可以在相同的lambda函数中做到吗?
jupyter nbconvert --execute --to notebook
--inplace /home/ec2-user/SageMaker/Scikit.ipynb
--ExecutePreprocessor.kernel_name=python3
--ExecutePreprocessor.timeout=1500
运行文件.ipynb不会使其处于运行状态,它将在终端中执行该文件。
我希望您以在线模式运行它。
在文件.ipynb中,我打电话给Sagemaker担当角色,AWS CloudWatch显示的错误之一是:
ModuleNotFoundError: No module named 'sagemaker' <-- Appears in CloudWatch
答案 0 :(得分:0)
为了澄清一下,您的问题是: -如何在线运行jupyter笔记本而不是通过CLI -为什么收到显示的错误
因此,第一个问题是,与在EC2实例上相反,在lambda中运行.ipynb文件有什么意义?如果仅在此处部署文件并安装anaconda / jupyter,则可以在云环境中执行,并且显然可以在所有AWS资源上使用GUI。
第二个问题,它看起来好像不是角色错误,但我认为lambda可以访问sagemaker吗?另外,您如何通过Boto访问Sagemaker?
有帮助答案 1 :(得分:0)
感谢您使用Amazon SageMaker。
没有官方的方法可以在Lambda上的Notebook实例上执行代码,但是下面是一些杂乱的解决方法。
另外,如果不是很严格要求使用Lambda,则可以在Notebook实例上使用某种cron作业来定期执行jupyter笔记本。
由于您已经找到了一种从Lambda启动笔记本实例的方法,因此可以使用以下代码(将Notebook_instance_name替换为笔记本实例名称)连接到InService笔记本实例,并在其中执行命令,包括您提供的实例。运行jupyter笔记本。
import boto3
import time
from botocore.vendored import requests
import websocket
def lambda_handler(event, context):
sm_client = boto3.client('sagemaker')
notebook_instance_name = 'test'
url = sm_client.create_presigned_notebook_instance_url(NotebookInstanceName=notebook_instance_name)['AuthorizedUrl']
url_tokens = url.split('/')
http_proto = url_tokens[0]
http_hn = url_tokens[2].split('?')[0].split('#')[0]
s = requests.Session()
r = s.get(url)
cookies = "; ".join(key + "=" + value for key, value in s.cookies.items())
ws = websocket.create_connection(
"wss://{}/terminals/websocket/1".format(http_hn),
cookie=cookies,
host=http_hn,
origin=http_proto + "//" + http_hn
)
ws.send("""[ "stdin", "jupyter nbconvert --execute --to notebook --inplace /home/ec2-user/SageMaker/Scikit.ipynb --ExecutePreprocessor.kernel_name=python3 --ExecutePreprocessor.timeout=1500\\r" ]""")
time.sleep(1)
ws.close()
return None
请注意,以下代码涉及python websocket模块websocket-client
,默认情况下不提供该模块,因此您需要将其与lambda代码打包并上传到lambda。我按照Lambda documentation进行打包依赖。
答案 2 :(得分:0)
不清楚您要解决的问题。冒着我弄错的风险,我将描述我使用在SageMaker Jupyter笔记本实例中开发的jupyter笔记本的方式。毕竟,notebook服务是为开发而设计的,而不是为生产或自动化python执行而设计的。
首先,您要在git或其他源代码控制系统中安装python和ipynb文件。使用SageMaekr的git集成很容易实现:https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html
第二,您要检出Netflix的开源项目papermill。您可以在以下博客文章中了解有关Netflix对jupyter的完整支持:https://medium.com/netflix-techblog/notebook-innovation-591ee3221233
我正在使用造纸厂来计划,传递参数,执行笔记本并在s3中使用以下命令监视其输出:
$ papermill s3://bkt/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1