Автоматизировать выполнение файла .ipynb в SageMaker - PullRequest
0 голосов
/ 21 апреля 2019

Я хочу автоматизировать работу Jupyter.

Я создал функцию в AWS Lambda, которая, когда корзина S3 получает файл .csv, открывает определенный экземпляр Jupyter и работает нормально.

Теперь я хочу выполнить файл .ipynb, который выполняет всю работу.

Я пытался использовать жизненный цикл конфигурации Jupyter.

Но он всегда дает сбой.Возможно ли сделать это в той же самой лямбда-функции?

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

Ответы [ 3 ]

0 голосов
/ 27 апреля 2019

Благодарим Вас за использование Amazon SageMaker.

Официального способа выполнения кода в экземпляре Notebook от Lambda не существует, но ниже приведено несколько неэффективное решение.

В дополнение к этому, если использование Lambda не является жестким требованием, то вы можете использовать какое-то задание cron в своем экземпляре Notebook для периодического запуска блокнотов jupyter.

Поскольку вы уже нашли способ запустить экземпляр Notebook из Lambda, вы можете использовать следующий код (замените notebook_instance_name на имя экземпляра Notebook), чтобы подключиться к своему экземпляру InService Notebook и выполнить на нем команду, включая ту, которую вы предоставили запустите блокноты 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-client, который не поставляется по умолчанию, поэтому вам нужно будет упаковать его с вашим лямбда-кодом и загрузить в lambda. Я следовал документации Lambda для упаковки зависимостей.

0 голосов
/ 27 апреля 2019

Непонятно, чего вы хотите добиться своим вопросом.Опасаясь, что я ошибся, я опишу, как я использую ноутбуки Jupyter, которые я разрабатываю в экземпляре ноутбука SageMaker Jupyter.В конце концов, сервис ноутбуков предназначен для разработки, а не для производства или автоматизации исполнения Python.

Во-первых, вы хотите, чтобы ваши файлы python и ipynb были в git или других системах контроля версий.Этого легко достичь, используя интеграцию с git SageMaekr: https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html

Во-вторых, вы хотите проверить проект с открытым исходным кодом Netflix, papermill .Вы можете прочитать о полном стеке поддержки jupyter в Netflix в этом сообщении в блоге: 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
0 голосов
/ 21 апреля 2019

Несколько вещей, просто чтобы уточнить, ваши вопросы: -Как вы можете запустить ноутбук Jupyter онлайн, а не через CLI -Почему вы получаете сообщение об ошибке

Итак, чтобы получить первый вопрос, какой смысл запускать файл .ipynb в лямбде, а не в экземпляре EC2? Если вы просто развернете файл и установите anaconda / jupyter, вы сможете выполнить его в облачной среде и, очевидно, использовать графический интерфейс, все на ресурсах AWS.

Второй вопрос, это не похоже на ошибку роли, но я предполагаю, что лямбда может получить доступ к sagemaker? Кроме того, как вы получаете доступ к Sagemaker, через Boto?

Редактировать: эта ссылка может помочь 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=awareness&trk=Docs_LINKEDIN&sc_content=Docs&linkId=66519000

...