1
votes

Automatisez l'exécution d'un fichier .ipynb dans SageMaker

Je souhaite automatiser le travail de Jupyter.

J'ai créé une fonction dans AWS Lambda qui, lorsque le compartiment S3 reçoit un fichier .csv, ouvre l'instance déterminée de Jupyter et cela fonctionne bien.

Maintenant, je veux exécuter le fichier .ipynb qui fait tout le travail.

J'ai essayé d'utiliser le cycle de vie de configuration de Jupyter.

Mais cela échoue toujours. Serait-il possible de le faire dans la même fonction lambda?

ModuleNotFoundError: No module named 'sagemaker' <-- Appears in CloudWatch

Lorsque vous exécutez le fichier .ipynb ne le met pas en marche, il l'exécute dans le terminal. P >

J'aimerais que vous l'exécutiez en mode en ligne.

Dans le fichier .ipynb, j'appelle Sagemaker pour lui apporter le rôle et l'une des erreurs qu'AWS CloudWatch montre est la suivante: p >

jupyter nbconvert --execute --to notebook
                  --inplace /home/ec2-user/SageMaker/Scikit.ipynb
                  --ExecutePreprocessor.kernel_name=python3
                  --ExecutePreprocessor.timeout=1500


2 commentaires

Essayez-vous d'exécuter une instance Jupyter Notebook sur SageMaker Notebook à partir d'AWS Lambda? L'instance SageMaker est-elle toujours en cours d'exécution ou créez-vous l'instance au fur et à mesure des besoins?


@rajesh La première étape pour appeler l'instance déjà créée à l'arrêt du notebook dans jupyter avec Lambda, fonctionne très bien et met en service notebook. J'ai besoin de la prochaine étape qui consiste à automatiser l'exécution du fichier .ipynb


3 Réponses :


0
votes

Quelques points, juste pour clarifier, vos questions sont: -Comment pouvez-vous exécuter un notebook jupyter en ligne au lieu de via CLI -Pourquoi obtenez-vous l'erreur que vous avez affichée

Donc, pour répondre à la première question, quel est l'intérêt d'exécuter le fichier .ipynb en lambda, par opposition à une instance EC2? Si vous déployez simplement le fichier là-bas et installez anaconda / jupyter, vous pouvez exécuter dans un environnement cloud et évidemment utiliser l'interface graphique, le tout sur des ressources AWS.

Deuxième question, cela ne ressemble pas à une erreur de rôle mais je suppose que le lambda peut accéder à sagemaker? aussi, comment accédez-vous à Sagemaker, via boto?

Modifier: ce lien peut aider https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-root-access.html?sc_channel=smtry_country&scountry&scountry&scountry&scountry = Global & sc_geo = GLOBAL & sc_outcome = sensibilisation & trk = Docs_LINKEDIN & sc_content = Docs & linkId = 66519000


2 commentaires

Je veux une automatisation totale. Dans un premier temps, j'ai une fonction lambda qui appelle boto3 sur le notebook déjà créé et en mode pause, pour le mettre en service dans SageMaker Notebook et cela fonctionne bien. J'ai créé une configuration de cycle de vie pour le démarrage et j'ai collé le code que j'ai expliqué ci-dessus. jupyter .... Cette partie fonctionne également, mais j'ai des problèmes lorsque le fichier .ipynb veut importer le module sagemaker. @Anon


Ok, compris, j'ai mal compris votre question initiale. Importez-vous à partir d'une couche ou avez-vous le code sagemaker compressé avec lambda_hander?



5
votes

Merci d'utiliser Amazon SageMaker.

Il n'y a pas de moyen officiel d'exécuter du code sur l'instance Notebook de Lambda, mais ci-dessous est une solution de contournement quelque peu décousue.

En remarque, si l'utilisation de Lambda n'est pas un exigence stricte, vous pouvez utiliser une sorte de tâche cron sur votre instance Notebook pour exécuter périodiquement des notebooks jupyter.

Puisque vous avez déjà trouvé un moyen de démarrer votre instance Notebook à partir de Lambda, vous pouvez utiliser le code suivant (remplacer notebook_instance_name avec le nom de votre instance Notebook) pour vous connecter à votre instance Notebook InService et exécuter une commande dessus, y compris celle que vous avez fournie pour exécuter les notebooks 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

Veuillez noter que ce qui suit le code implique le module python websocket websocket-client qui ne vient pas par défaut, vous devrez donc le conditionner avec votre code lambda et le télécharger sur lambda. J'ai suivi le Documentation Lambda pour l'empaquetage des dépendances.


0 commentaires

0
votes

Ce que vous voulez accomplir avec votre question n'est pas clair. Au risque de me tromper, je décrirai la manière dont j'utilise les notebooks jupyter que je développe dans l'instance de notebook SageMaker Jupyter. Après tout, le service notebooks est conçu pour le développement et non pour la production ou l'automatisation de l'exécution de python.

Tout d'abord, vous voulez avoir vos fichiers python et ipynb dans git ou d'autres systèmes de contrôle de source. Cela est facile à réaliser en utilisant l'intégration git de SageMaker: https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html

Deuxièmement, vous voulez découvrir le projet open source de Netflix, papermill . Vous pouvez en savoir plus sur la pile complète de support jupyter dans Netflix dans ce billet de blog: https: / /medium.com/netflix-techblog/notebook-innovation-591ee3221233

J'utilise un moulin à papier pour planifier, passer des paramètres, exécuter le notebook et surveiller sa sortie en s3, en utilisant quelque chose comme:

$ papermill s3://bkt/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1


0 commentaires