

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.

# Déploiement du package Model et de l'agent Edge Manager avec AWS IoT Greengrass


SageMaker Edge Manager intègre AWS IoT Greengrass la version 2 pour simplifier l'accès, la maintenance et le déploiement de l'agent et du modèle Edge Manager sur vos appareils. Sans la AWS IoT Greengrass version V2, la configuration de vos appareils et de vos flottes pour utiliser SageMaker Edge Manager vous oblige à copier manuellement l'agent Edge Manager depuis un compartiment de version Amazon S3. Vous utilisez l'agent pour réaliser des prédictions avec des modèles chargés sur vos dispositifs périphériques. Avec l'intégration de la AWS IoT Greengrass V2 et de l' SageMaker Edge Manager, vous pouvez utiliser les composants AWS IoT Greengrass V2. Les composants sont des modules logiciels prédéfinis qui peuvent connecter vos appareils périphériques à des AWS services ou à des services tiers via AWS IoT Greengrass.

Vous devez installer le logiciel AWS IoT Greengrass Core sur votre ou vos appareils si vous souhaitez utiliser la AWS IoT Greengrass version 2 pour déployer l'agent Edge Manager et votre modèle. Pour plus d'informations sur les exigences relatives aux appareils et sur la façon de configurer vos appareils, consultez la section [Configuration des appareils AWS IoT Greengrass principaux](https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html) dans la AWS IoT Greengrass documentation.

Vous utilisez les trois composants suivants pour déployer l'agent Edge Manager :
+ *Un composant public prédéfini* : SageMaker AI gère le composant public Edge Manager.
+ *Un composant privé généré automatiquement* : le composant privé est généré automatiquement lorsque vous empaquetez votre modèle de machine learning avec l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html) et que vous spécifiez `GreengrassV2Component` dans le champ d'API Edge Manager `PresetDeploymentType`.
+ *Un composant personnalisé* : il s'agit de l'application d'inférence qui est chargée du prétraitement et des inférences sur votre appareil. Vous devez créer ce composant. Consultez la documentation SageMaker Edge Manager ou [Créer des AWS IoT Greengrass composants personnalisés](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html) dans la AWS IoT Greengrass documentation pour plus d'informations sur la création de composants personnalisés. [Créer un composant personnalisé Hello World](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how)

# Conditions préalables pour déployer l’agent Edge Manager


SageMaker Edge Manager utilise la AWS IoT Greengrass version V2 pour simplifier le déploiement de l'agent Edge Manager, de vos modèles d'apprentissage automatique et de votre application d'inférence sur vos appareils à l'aide de composants. Pour faciliter la gestion de vos rôles AWS IAM, Edge Manager vous permet de réutiliser votre alias de AWS IoT rôle existant. Si vous n'en avez pas, Edge Manager génère un alias de rôle dans le cadre de la tâche d'empaquetage Edge Manager. Il n'est plus nécessaire d'associer à votre rôle un alias de AWS IoT rôle généré à partir de la tâche d'empaquetage d' SageMaker Edge Manager. 

Avant de commencer, vous devez remplir les conditions préalables suivantes :

1. Installez le logiciel AWS IoT Greengrass Core. Pour des informations détaillées, voir [Installer le logiciel AWS IoT Greengrass Core](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#install-greengrass-v2).

1. Configurez la AWS IoT Greengrass V2. Pour plus d'informations, voir [Installer le logiciel AWS IoT Greengrass Core avec provisionnement manuel des ressources](https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html).
**Note**  
Assurez-vous que le nom de l' AWS IoT objet est entièrement en minuscules et qu'il ne contient pas de caractères sauf (éventuellement) des tirets (). `‐`
Le rôle IAM doit commencer par `SageMaker*`.

1. Associez l'autorisation et la politique en ligne suivantes au rôle IAM créé lors de la configuration de la AWS IoT Greengrass version 2.
   + Accédez à la console IAM. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)
   + Recherchez le rôle que vous avez créé en saisissant son nom dans le champ **Search (Recherche)**.
   + Choisissez votre rôle.
   + Ensuite, choisissez **Attach Policies (Attacher des politiques)**.
   + Recherchez **AmazonSageMakerEdgeDeviceFleetPolicy**.
   + Sélectionnez **AmazonSageMakerFullAccess**(il s'agit d'une étape facultative qui vous permet de réutiliser plus facilement ce rôle IAM dans la compilation et le packaging des modèles).
   + Ajoutez les autorisations requises à la politique d'autorisation d'un rôle. N'associez pas de politiques intégrées aux utilisateurs IAM.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement":[
           {
             "Sid":"GreengrassComponentAccess",
             "Effect":"Allow",
             "Action":[
                 "greengrass:CreateComponentVersion",
                 "greengrass:DescribeComponent"
             ],
             "Resource":"*"
            }
         ]
     }
     ```

------
   + Choisissez **Attach policy** (Attacher la politique).
   + Choisissez **Trust Relationships** (Relations d'approbation).
   + Choisissez **Modifier la relation d’approbation**.
   + Remplacez le contenu par défaut par ce qui suit.

------
#### [ JSON ]

****  

     ```
     {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Principal": {
             "Service": "credentials.iot.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
         },
         {
           "Effect": "Allow",
           "Principal": {
             "Service": "sagemaker.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
         }
       ]
     }
     ```

------

1. Créer une flotte de dispositifs Edge Manager. Pour plus d’informations sur la création d’une flotte, consultez [Configuration des appareils et des flottes dans SageMaker Edge Manager](edge-device-fleet.md).

1. Enregistrez votre appareil sous le même nom que celui que vous avez AWS IoT créé lors de la configuration de la AWS IoT Greengrass V2.

1. Créez au moins un AWS IoT Greengrass composant privé personnalisé. Ce composant est l'application qui exécute l'inférence sur le dispositif. Pour de plus amples informations, consultez [Créer un composant personnalisé Hello World](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how).

**Note**  
L' SageMaker Edge Manager et AWS IoT Greengrass l'intégration ne fonctionnent que pour la AWS IoT Greengrass version 2.
Le nom de votre AWS IoT objet et le nom de votre appareil Edge Manager doivent être identiques.
SageMaker Edge Manager ne charge pas les AWS IoT certificats locaux et n'appelle pas directement le point de terminaison du fournisseur AWS IoT d'informations d'identification. SageMaker Edge Manager utilise plutôt la AWS IoT Greengrass version v2 TokenExchangeService et récupère une information d'identification temporaire depuis un point de terminaison TES.

# Création des composants de la AWS IoT Greengrass V2


AWS IoT Greengrass utilise des *composants*, un module logiciel déployé et exécuté sur un périphérique AWS IoT Greengrass principal. Vous avez besoin (au moins) de trois composants :

1. * AWS IoT Greengrass Composant public de l'agent Edge Manager* qui déploie le binaire de l'agent Edge Manager.

1. *Composant de modèle* généré automatiquement lorsque vous empaquetez votre modèle d'apprentissage automatique avec l' AWS SDK pour Python (Boto3) API ou avec la console SageMaker AI. Pour plus d'informations, consultez [Création d'un composant généré automatiquement](#edge-greengrass-autogenerate-component-how).

1. *D'un composant personnalisé privé* pour implémenter l'application client de l'agent Edge Manager, ainsi que pour effectuer le prétraitement et le post-traitement des résultats d'inférence. Pour plus d'informations sur la création d'un composant personnalisé, voir [Création d'un composant généré automatiquement](#edge-greengrass-autogenerate-component-how) ou [Créer des AWS IoT Greengrass composants personnalisés](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html).

## Création d'un composant généré automatiquement


Générez le composant du modèle avec l'[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html)API et spécifiez le champ API `GreengrassV2Component` de la tâche d'empaquetage SageMaker Edge Manager`PresetDeploymentType`. Lorsque vous appelez l'`CreateEdgePackagingJob`API, Edge Manager utilise votre modèle compilé par SageMaker AI Neo dans Amazon S3 et crée un composant de modèle. Le composant du modèle est automatiquement stocké dans votre compte. Vous pouvez afficher n'importe lequel de vos composants en accédant à la AWS IoT console. [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/) Sélectionnez **Greengrass**, puis **Core**. La page contient une liste des AWS IoT Greengrass principaux appareils associés à votre compte. Si le nom d'un composant de modèle n'est pas spécifié dans `PresetDeploymentConfig`, le nom par défaut généré se compose de `"SagemakerEdgeManager"` et du nom de la tâche d'empaquetage de votre agent Edge Manager. L'exemple suivant montre comment spécifier à Edge Manager de créer un composant AWS IoT Greengrass V2 avec l'`CreateEdgePackagingJob`API.

```
import sagemaker
import boto3

# Create a SageMaker client object to make it easier to interact with other AWS services.
sagemaker_client = boto3.client('sagemaker', region=<YOUR_REGION>)

# Replace with your IAM Role ARN
sagemaker_role_arn = "arn:aws:iam::<account>:role/*"

# Replace string with the name of your already created S3 bucket.
bucket = 'amzn-s3-demo-bucket-edge-manager'

# Specify a name for your edge packaging job.
edge_packaging_name = "edge_packag_job_demo" 

# Replace the following string with the name you used for the SageMaker Neo compilation job.
compilation_job_name = "getting-started-demo" 

# The name of the model and the model version.
model_name = "sample-model" 
model_version = "1.1"

# Output directory in S3 where you want to store the packaged model.
packaging_output_dir = 'packaged_models' 
packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)

# The name you want your Greengrass component to have.
component_name = "SagemakerEdgeManager" + edge_packaging_name

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,
                        "PresetDeploymentType":"GreengrassV2Component",
                        "PresetDeploymentConfig":"{\"ComponentName\":\"sample-component-name\", \"ComponentVersion\":\"1.0.2\"}"
                        }
                    )
```

Vous pouvez également créer le composant généré automatiquement avec la console SageMaker AI. Suivez les étapes 1 à 6 dans [Package d'un modèle (Amazon SageMaker AI Console)](edge-packaging-job-console.md).

Saisissez l'URI du compartiment Amazon S3 où vous voulez stocker la sortie de la tâche d'empaquetage et la clé de chiffrement facultative.

Pour créer le composant de modèle, procédez comme suit :

1. Choisissez **Preset deployment (Préconfigurer un déploiement)**.

1. Spécifiez le nom du composant dans le champ **Component name (Nom du composant)**.

1. Vous pouvez éventuellement fournir une description du composant, une version du composant, le système d'exploitation de la plateforme ou l'architecture de la plateforme pour **Component description** (Description du composant), **Component version** (Version du composant), **Platform OS** (Système d'exploitation de la plateforme) et **Platform architecture** (Architecture de la plateforme), respectivement.

1. Sélectionnez **Soumettre**.

## Créer un composant personnalisé Hello World


Le composant d'application personnalisé est utilisé pour effectuer une inférence sur le dispositif périphérique. Le composant est chargé de charger les modèles dans SageMaker Edge Manager, d'appeler l'agent Edge Manager à des fins d'inférence et de décharger le modèle lorsque le composant est arrêté. Avant de créer votre composant, veillez à ce que l'agent et l'application puissent communiquer avec Edge Manager. Pour ce faire, configurez [gRPC](https://grpc.io/). L'agent Edge Manager utilise les méthodes définies dans les tampons Protobuf et le serveur gRPC pour établir la communication avec l'application cliente sur l'appareil périphérique et le cloud.

Pour utiliser gRPC, vous devez :

1. Créer un stub gRPC à l'aide du fichier .proto fourni lorsque vous téléchargez l'agent Edge Manager à partir du compartiment de version Amazon S3.

1. Écrire le code client dans le langage qui vous est familier.

Vous n'avez pas besoin de définir le service dans un fichier .proto. Les fichiers .proto du service sont inclus dans le fichier TAR compressé lorsque vous téléchargez le fichier binaire de publication de l'agent Edge Manager à partir du compartiment de version Amazon S3.

Installez gRPC et les autres outils nécessaires sur votre machine hôte et créez les stubs gRPC `agent_pb2_grpc.py` et `agent_pb2.py` en Python. Vérifiez que `agent.proto` se trouve bien dans votre répertoire local.

```
%%bash
pip install grpcio
pip install grpcio-tools
python3 -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. agent.proto
```

Le code précédent génère les interfaces client et serveur gRPC à partir de votre définition de service .proto. En d'autres termes, il crée le modèle gRPC en Python. Le répertoire d'API contient la spécification Protobuf pour communiquer avec l'agent.

Ensuite, utilisez l'API gRPC pour écrire un client et un serveur pour votre service (2). L'exemple de script suivant, `edge_manager_python_example.py`, utilise Python pour charger, répertorier et décharger un modèle `yolov3` sur le dispositif périphérique.

```
import grpc
from PIL import Image
import agent_pb2
import agent_pb2_grpc
import os


model_path = '<PATH-TO-SagemakerEdgeManager-COMPONENT>' 
                    
agent_socket = 'unix:///tmp/aws.greengrass.SageMakerEdgeManager.sock'

agent_channel = grpc.insecure_channel(agent_socket, options=(('grpc.enable_http_proxy', 0),))

agent_client = agent_pb2_grpc.AgentStub(agent_channel)


def list_models():
    return agent_client.ListModels(agent_pb2.ListModelsRequest())


def list_model_tensors(models):
    return {
        model.name: {
            'inputs': model.input_tensor_metadatas,
            'outputs': model.output_tensor_metadatas
        }
        for model in list_models().models
    }


def load_model(model_name, model_path):
    load_request = agent_pb2.LoadModelRequest()
    load_request.url = model_path
    load_request.name = model_name
    return agent_client.LoadModel(load_request)


def unload_model(name):
    unload_request = agent_pb2.UnLoadModelRequest()
    unload_request.name = name
    return agent_client.UnLoadModel(unload_request)


def predict_image(model_name, image_path):
    image_tensor = agent_pb2.Tensor()
    image_tensor.byte_data = Image.open(image_path).tobytes()
    image_tensor_metadata = list_model_tensors(list_models())[model_name]['inputs'][0]
    image_tensor.tensor_metadata.name = image_tensor_metadata.name
    image_tensor.tensor_metadata.data_type = image_tensor_metadata.data_type
    for shape in image_tensor_metadata.shape:
        image_tensor.tensor_metadata.shape.append(shape)
    predict_request = agent_pb2.PredictRequest()
    predict_request.name = model_name
    predict_request.tensors.append(image_tensor)
    predict_response = agent_client.Predict(predict_request)
    return predict_response

def main():
    try:
        unload_model('your-model')
    except:
        pass
  
    print('LoadModel...', end='')
    try:
        load_model('your-model', model_path)
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('Model already loaded!')
        
    print('ListModels...', end='')
    try:
        print(list_models())
        print('done.')
        
    except Exception as e:
        print()
        print(e)
        print('List model failed!')
       
    print('Unload model...', end='')
    try:
        unload_model('your-model')
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('unload model failed!')

if __name__ == '__main__':
    main()
```

Ensure `model_path` pointe vers le nom du AWS IoT Greengrass composant contenant le modèle si vous utilisez le même exemple de code client.

Vous pouvez créer votre composant Hello World AWS IoT Greengrass V2 une fois que vous avez généré vos stubs gRPC et que votre code Hello World est prêt. Pour ce faire :
+ Téléchargez vos `edge_manager_python_example.py`, `agent_pb2_grpc.py` et `agent_pb2.py` dans votre compartiment Amazon S3 et notez leur chemin d'accès Amazon S3.
+ Créez un composant privé dans la console AWS IoT Greengrass V2 et définissez la recette de votre composant. Spécifiez l'URI Amazon S3 pour votre application Hello World et le stub gRPC dans la recette suivante.

  ```
  ---
  RecipeFormatVersion: 2020-01-25
  ComponentName: com.sagemaker.edgePythonExample
  ComponentVersion: 1.0.0
  ComponentDescription: Sagemaker Edge Manager Python example
  ComponentPublisher: Amazon Web Services, Inc.
  ComponentDependencies:
    aws.greengrass.SageMakerEdgeManager:
      VersionRequirement: '>=1.0.0'
      DependencyType: HARD
  Manifests:
    - Platform:
        os: linux
        architecture: "/amd64|x86/"
      Lifecycle:
        install: |-
          apt-get install python3-pip
          pip3 install grpcio
          pip3 install grpcio-tools
          pip3 install protobuf
          pip3 install Pillow
        run:
          script: |- 
            python3 {artifacts:path}/edge_manager_python_example.py
      Artifacts:
        - URI: <code-s3-path>
        - URI: <pb2-s3-path>
        - URI: <pb2-grpc-s3-path>
  ```

Pour obtenir des informations détaillées sur la création d'une recette Hello World, consultez la section [Création de votre premier composant](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#create-first-component) dans la AWS IoT Greengrass documentation.

# Déploiement des composants sur votre appareil


Déployez vos composants avec la AWS IoT console ou avec le AWS CLI.

## Pour déployer vos composants (console)


Déployez vos AWS IoT Greengrass composants à l'aide de la AWS IoT console.

1. Dans le menu de [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/)navigation de la AWS IoT Greengrass console, sélectionnez **Déploiements.**

1. Sur la page **Components (Composants)**, sous l'onglet **Public components (Composants publics)**, choisissez `aws.greengrass.SageMakerEdgeManager`.

1. Sur la page `aws.greengrass.SageMakerEdgeManager`, choisissez **Deploy (Déployer)**.

1. À partir de `Add to deployment`, choisissez l'une des options suivantes :

   1. Pour fusionner ce composant avec un déploiement existant sur votre dispositif cible, choisissez **Add to existing deployment (Ajouter à un déploiement existant)**, puis sélectionnez le déploiement à réviser.

   1. Pour créer un nouveau déploiement sur votre dispositif cible, choisissez **Create new deployment (Créer un déploiement)**. S'il existe un déploiement sur votre dispositif et que vous choisissez cette étape, le déploiement existant sera remplacé.

1. Sur la page **Specify target (Spécifier une cible)**, procédez comme suit :

   1. Sous **Deployment information (Informations sur le déploiement)**, saisissez ou modifiez le nom convivial de votre déploiement.

   1. Sous **Deployment targets (Cibles de déploiement)**, sélectionnez une cible pour votre déploiement, puis choisissez **Next (Suivant)**. Vous ne pouvez pas modifier la cible de déploiement si vous révisez un déploiement existant.

1. Sur la page **Select components (Sélectionner des composants)**, sous **My components (Mes composants)**, choisissez :
   + com. *<CUSTOM-COMPONENT-NAME>*
   + `aws.greengrass.SageMakerEdgeManager`
   + SagemakerEdgeManager.*<YOUR-PACKAGING-JOB>*

1. Sur la page **Configurer les composants**, choisissez **com.greengrass. SageMakerEdgeManager**, puis procédez comme suit.

   1. Choisissez **Configure component (Configurer un composant)**.

   1. Sous **Configuration update (Mise à jour de la configuration)**, dans **Configuration to merge (Configuration à fusionner)**, saisissez la configuration suivante.

      ```
      {
          "DeviceFleetName": "device-fleet-name",
          "BucketName": "bucket-name"
      }
      ```

      Remplacez *`device-fleet-name`* par le nom de la flotte de dispositifs périphériques que vous avez créée et remplacez *`bucket-name`* par le nom du compartiment Amazon S3 qui est associé à votre flotte de dispositifs.

   1. Choisissez **Confirm (Confirmer)**, puis **Next (Suivant)**.

1. Sur la page **Configure advanced settings (Configurer les paramètres avancés)**, conservez les paramètres de configuration par défaut et choisissez **Next (Suivant)**.

1. Sur la page **Review (Révision)**, choisissez **Deploy (Déployer)**.

## Pour déployer vos composants (AWS CLI)


1. Créez un ` deployment.json` fichier pour définir la configuration de déploiement de vos composants SageMaker Edge Manager. Ce fichier doit ressembler à l'exemple suivant.

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.SageMakerEdgeManager": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
           "merge": {
             "DeviceFleetName": "device-fleet-name",
             "BucketName": "bucket-name"
           }
         }
       },
       "com.greengrass.SageMakerEdgeManager.ImageClassification": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
       "com.greengrass.SageMakerEdgeManager.ImageClassification.Model": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
     }
   }
   ```
   + Dans le champ `targetArn`, remplacez *`targetArn`* par l'Amazon Resource Name (ARN) de l'objet ou du groupe d'objets à cibler pour le déploiement, au format suivant :
     + Objet : `arn:aws:iot:region:account-id:thing/thingName`
     + Groupe d'objets : `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + Dans le champ `merge`, remplacez *`device-fleet-name`* par le nom de la flotte d'appareils périphériques que vous avez créée et remplacez *`bucket-name`* par le nom du compartiment Amazon S3 qui est associé à votre flotte d'appareils.
   + Remplacez les versions de composant de chaque composant par la dernière version disponible.

1. Exécutez la commande suivante pour déployer les composants sur le périphérique :

   ```
   aws greengrassv2 create-deployment \
       --cli-input-json file://path/to/deployment.json
   ```

L'exécution du déploiement peut prendre plusieurs minutes. À l'étape suivante, vérifiez le journal des composants pour vous assurer que le déploiement s'est terminé avec succès et afficher les résultats des inférences.

Pour plus d'informations sur le déploiement de composants sur des appareils individuels ou des groupes d'appareils, voir [Déployer AWS IoT Greengrass des composants sur des appareils](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-deployments.html).