![](/img/trans.png)
[英]Automate the execution of a .ipynb file in AWS SageMaker by Websocket
[英]Automate the execution of a .ipynb file in SageMaker
我想自動化 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
感謝您使用 Amazon SageMaker。
沒有從 Lambda 在筆記本實例上執行代碼的官方方法,但下面是有些零碎的解決方法。
附帶說明一下,如果使用 Lambda 不是硬性要求,那么您可以在筆記本實例上使用某種 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 文檔來打包依賴項。
有幾件事,只是為了澄清,您的問題是:-如何在線而不是通過 CLI 運行 jupyter 筆記本-為什么會收到顯示的錯誤
因此,要解決第一個問題,與在 EC2 實例上相比,在 lambda 中運行 .ipynb 文件有什么意義? 如果您只是在那里部署文件並安裝 anaconda/jupyter,您可以在雲環境中執行,並且顯然使用 GUI,所有這些都在 AWS 資源上。
第二個問題,它看起來不像是角色錯誤,但我認為 lambda 可以訪問 sagemaker? 另外,您如何通過 boto 訪問 sagemaker?
目前還不清楚你想用你的問題達到什么目的。 冒着我弄錯的風險,我將描述我使用在 SageMaker Jupyter 筆記本實例中開發的 jupyter 筆記本的方式。 畢竟,notebooks 服務是為開發而設計的,而不是為 Python 執行的生產或自動化而設計的。
首先,您希望在 git 或其他源代碼控制系統中擁有您的 python 和 ipynb 文件。 這很容易使用 SageMaker 的 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
我正在使用 papermill 來安排、傳遞參數、執行筆記本並在 s3 中監視其輸出,使用以下內容:
$ papermill s3://bkt/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.