Entraîner, compiler et empaqueter votre modèle - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Entraîner, compiler et empaqueter votre modèle

Dans cette section, vous allez créer SageMaker et AWS IoT objets clients, téléchargez un modèle d'apprentissage automatique préentraîné, téléchargez votre modèle dans votre compartiment Amazon S3, compilez votre modèle pour votre appareil cible avec SageMaker Neo et empaquetez votre modèle afin qu'il puisse être déployé avec l'agent Edge Manager.

  1. Importez des bibliothèques et créez des objets clients.

    Ce didacticiel utilise AWS SDK for Python (Boto3) pour créer des clients avec lesquels interagir SageMaker, Amazon S3, et AWS IoT.

    Importez Boto3, spécifiez votre région et initialisez les objets clients dont vous avez besoin, comme illustré dans l'exemple suivant :

    import boto3 import json import time AWS_REGION = 'us-west-2'# Specify your Region bucket = 'bucket-name' sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION) iot_client = boto3.client('iot', region_name=AWS_REGION)

    Définissez les variables et attribuez-leur le rôle pour ARN lequel vous les avez créées SageMaker et AWS IoT sous forme de chaînes :

    # Replace with the role ARN you created for SageMaker sagemaker_role_arn = "arn:aws:iam::<account>:role/*" # Replace with the role ARN you created for AWS IoT. # Note: The name must start with 'SageMaker' iot_role_arn = "arn:aws:iam::<account>:role/SageMaker*"
  2. Entraînez un modèle de machine learning.

    Consultez Train a Model with Amazon SageMaker pour plus d'informations sur la façon de former un modèle de machine learning à l'aide de SageMaker. Vous pouvez éventuellement télécharger votre modèle entraîné localement directement dans un compartiment Amazon URI S3.

    Si vous n'avez pas encore de modèle, vous pouvez utiliser un modèle pré-entraîné pour les étapes suivantes de ce didacticiel. Par exemple, vous pouvez enregistrer les modèles MobileNet V2 depuis le TensorFlow framework. MobileNet V2 est un modèle de classification d'images optimisé pour les applications mobiles. Pour plus d'informations sur la MobileNet V2, consultez le MobileNet GitHub README.

    Tapez ce qui suit dans votre bloc-notes Jupyter pour enregistrer le modèle V2 pré-entraîné MobileNet  :

    # Save the MobileNet V2 model to local storage import tensorflow as tf model = tf.keras.applications.MobileNetV2() model.save(“mobilenet_v2.h5”)
    Note
    • Si vous ne l'avez pas TensorFlow installé, vous pouvez le faire en exécutant pip install tensorflow=2.4

    • Utilisez TensorFlow la version 2.4 ou inférieure pour ce didacticiel.

    Le modèle sera enregistré dans le fichier mobilenet_v2.h5. Avant d'empaqueter le modèle, vous devez d'abord le compiler à l'aide de SageMaker Neo. Vérifiez si votre version de TensorFlow (ou un autre framework de votre choix) est actuellement prise en charge par SageMaker Neo. Cadres, périphériques, systèmes et architectures pris en charge

    SageMaker Neo nécessite que les modèles soient stockés sous forme de TAR fichier compressé. Repaquez-le sous forme de TAR fichier compressé (*.tar.gz) :

    # Package MobileNet V2 model into a TAR file import tarfile tarfile_name='mobilenet-v2.tar.gz' with tarfile.open(tarfile_name, mode='w:gz') as archive: archive.add('mobilenet-v2.h5')
  3. Chargez votre modèle sur Amazon S3.

    Une fois que vous avez un modèle de machine learning, stockez-le dans un compartiment Amazon S3. L'exemple suivant utilise un AWS CLI commande pour télécharger le modèle dans le compartiment Amazon S3 que vous avez créé précédemment dans un répertoire appelé models. Saisissez ce qui suit dans votre bloc-notes Jupyter :

    !aws s3 cp mobilenet-v2.tar.gz s3://{bucket}/models/
  4. Compilez votre modèle avec SageMaker Neo.

    Compilez votre modèle d'apprentissage automatique avec SageMaker Neo pour un appareil de pointe. Vous devez connaître le compartiment Amazon S3 dans URI lequel vous avez stocké le modèle entraîné, le framework d'apprentissage automatique que vous avez utilisé pour entraîner votre modèle, la forme des entrées de votre modèle et votre appareil cible.

    Pour le modèle MobileNet V2, utilisez ce qui suit :

    framework = 'tensorflow' target_device = 'jetson_nano' data_shape = '{"data":[1,3,224,224]}'

    SageMaker Neo nécessite une forme de saisie de modèle et un format de modèle spécifiques basés sur le cadre d'apprentissage profond que vous utilisez. Pour de plus amples informations sur l'enregistrement de votre modèle, veuillez consulter Quelles sont les formes de données d'entrée attendues par SageMaker Neo ?. Pour de plus amples informations sur les périphériques et les cadres pris en charge par Neo, veuillez consulter Cadres, périphériques, systèmes et architectures pris en charge.

    Utilisez le CreateCompilationJob API pour créer une tâche de compilation avec SageMaker Neo. Donnez un nom à la tâche de compilation, au SageMaker rôleARN, à l'Amazon S3 URI où votre modèle est stocké, à la forme d'entrée du modèle, au nom du framework, à l'Amazon S3 dans URI lequel vous SageMaker souhaitez stocker votre modèle compilé et à votre périphérique périphérique cible.

    # Specify the path where your model is stored model_directory = 'models' s3_model_uri = 's3://{}/{}/{}'.format(bucket, model_directory, tarfile_name) # Store compiled model in S3 within the 'compiled-models' directory compilation_output_dir = 'compiled-models' s3_output_location = 's3://{}/{}/'.format(bucket, compilation_output_dir) # Give your compilation job a name compilation_job_name = 'getting-started-demo' sagemaker_client.create_compilation_job(CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, InputConfig={ 'S3Uri': s3_model_uri, 'DataInputConfig': data_shape, 'Framework' : framework.upper()}, OutputConfig={ 'S3OutputLocation': s3_output_location, 'TargetDevice': target_device}, StoppingCondition={'MaxRuntimeInSeconds': 900})
  5. Empaquetez votre modèle compilé.

    Les tâches d'empaquetage SageMaker utilisent des modèles compilés par Neo et apportent les modifications nécessaires pour déployer le modèle à l'aide du moteur d'inférence, l'agent Edge Manager. Pour empaqueter votre modèle, créez une tâche d'empaquetage Edge à l'aide de la console create_edge_packaging API ou de la SageMaker console.

    Vous devez fournir le nom que vous avez utilisé pour votre tâche de compilation Neo, un nom pour la tâche d'empaquetage, un rôle ARN (voir Configuration section), un nom pour le modèle, une version du modèle et le compartiment Amazon S3 URI pour la sortie de la tâche d'empaquetage. Veuillez noter que les noms des tâches d'empaquetage Edge Manager sont sensibles à la casse. Voici un exemple de création d'une tâche d'empaquetage à l'aide duAPI.

    edge_packaging_name='edge-packaging-demo' model_name="sample-model" model_version="1.1"

    Définissez l'Amazon S3 URI dans lequel vous souhaitez stocker le modèle empaqueté.

    # Output directory where you want to store the output of the packaging job packaging_output_dir = 'packaged_models' packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)

    Utilisez CreateEdgePackagingJob pour empaqueter votre modèle néo-compilé. Indiquez un nom pour votre tâche d'empaquetage Edge et le nom que vous avez fourni pour votre tâche de compilation (dans cet exemple, il a été stocké dans la variable compilation_job_name). Indiquez également un nom pour votre modèle, une version pour votre modèle (cela vous permet de savoir quelle version du modèle vous utilisez) et le S3 dans URI lequel vous SageMaker souhaitez stocker le modèle empaqueté.

    sagemaker_client.create_edge_packaging_job( EdgePackagingJobName=edge_packaging_name, CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, ModelName=model_name, ModelVersion=model_version, OutputConfig={ "S3OutputLocation": packaging_s3_output } )