簡體   English   中英

在 SageMaker 中自動執行 .ipynb 文件

[英]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?

編輯:此鏈接可能有幫助https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-root-access.html?sc_channel=sm&sc_campaign=Docs&sc_publisher=LINKEDIN&sc_country=Global&sc_geo=GLOBAL&sc_outcome=awares_link&E 66519000

目前還不清楚你想用你的問題達到什么目的。 冒着我弄錯的風險,我將描述我使用在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM