Автоматизировать выполнение файла .ipynb в SageMaker

Я хочу автоматизировать работу 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

person Naider    schedule 21.04.2019    source источник
comment
Вы пытаетесь запустить Jupyter Notebook на экземпляре SageMaker Notebook из AWS Lambda? Всегда ли запущен экземпляр SageMaker или вы создаете его по мере необходимости?   -  person raj    schedule 21.04.2019
comment
@rajesh Первый шаг для вызова экземпляра, уже созданного в остановленном блокноте в jupyter с помощью Lambda, работает нормально и вводит в эксплуатацию блокнот. Мне нужен следующий шаг - автоматизировать выполнение файла .ipynb.   -  person Naider    schedule 21.04.2019


Ответы (3)


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

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

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

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

person Neelam Gehlot    schedule 27.04.2019

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

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

Второй вопрос, это не похоже на ошибку роли, но я предполагаю, что лямбда может получить доступ к sagemaker? Кроме того, как вы получаете доступ к 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&scAL&tl=ru&tl=ru&tlabs=Docs_LINKEDIN&sc_content=Docs&linkId=66519000

person Anonymous Juan    schedule 21.04.2019
comment
Я хочу полную автоматизацию. В первом случае у меня есть лямбда-функция, которая вызывает boto3 в уже созданный блокнот в режиме паузы, чтобы запустить его в SageMaker Notebook, и это хорошо работает. Для начала я создал конфигурацию жизненного цикла и вставил код, который объяснил выше. jupyter .... Эта часть тоже работает, но у меня возникают проблемы, когда файл .ipynb хочет импортировать модуль sagemaker. @Anon - person Naider; 21.04.2019
comment
Хорошо, я неправильно понял ваш первоначальный вопрос. Вы импортируете из слоя или у вас есть код sagemaker, заархивированный с помощью lambda_hander? - person Anonymous Juan; 22.04.2019

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

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

Во-вторых, вы хотите проверить проект Netflix с открытым исходным кодом, papermill. Вы можете прочитать о полной поддержке jupyter в Netflix в этом сообщении блога: 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
person Guy    schedule 27.04.2019