Étape 1 : Compiler le modèle - Amazon SageMaker

Étape 1 : Compiler le modèle

Une fois les prérequis satisfaits, vous pouvez compiler votre modèle avec Amazon SageMaker Neo. Vous pouvez compiler votre modèle à l'aide de la AWS CLI, de la console ou du kit SDK Amazon Web Services for Python (Boto3). Veuillez consulter Use Neo to Compile a Model (Utiliser Neo pour compiler un modèle). Dans cet exemple, vous allez compiler votre modèle avec Boto3.

Pour compiler un modèle, SageMaker Neo a besoin des informations suivantes :

  1. L'URI du compartiment Amazon S3 où vous avez stocké le modèle entraîné.

    Si vous avez satisfait les prérequis, le nom de votre compartiment est stocké dans une variable nommée bucket. L'extrait de code suivant vous montre comment répertorier l'ensemble de vos compartiments à l'aide de la   AWS CLI:

    $ aws s3 ls

    Par exemple :

    $ aws s3 ls 2020-11-02 17:08:50 bucket
  2. L'URI du compartiment Amazon S3 dans lequel vous voulez enregistrer le modèle compilé.

    L'extrait de code ci-dessous concatène l'URI de votre compartiment Amazon S3 avec le nom d'un répertoire de sortie appelé   output:

    s3_output_location = f's3://{bucket}/output'
  3. Le cadre de machine learning que vous avez utilisé pour entraîner votre modèle.

    Définissez le cadre que vous avez utilisé pour entraîner votre modèle.

    framework = 'framework-name'

    Par exemple, si vous voulez compiler un modèle entraîné à l'aide de TensorFlow, vous pouvez utiliser tflite ou tensorflow. Utilisez tflite si vous voulez utiliser une version plus légère de TensorFlow, qui utilise moins de mémoire de stockage.

    framework = 'tflite'

    Pour obtenir la liste complète des cadres pris en charge par Neo, veuillez consulter Supported Frameworks, Devices, Systems, and Architectures (Cadres, périphériques, systèmes et architectures pris en charge).

  4. La forme de l'entrée de votre modèle.

    Neo a besoin du nom et de la forme de votre tenseur d'entrée. Le nom et la forme sont envoyés en tant que paires clé-valeur.value est une liste des dimensions entières d'un tenseur en entrée et key est le nom exact d'un tenseur d'entrée dans le modèle.

    data_shape = '{"name": [tensor-shape]}'

    Par exemple :

    data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
    Note

    Assurez-vous que le modèle est correctement formaté en fonction du cadre que vous avez utilisé. Veuillez consulter What input data shapes SageMaker Neo expects? (De quelles formes de données d'entrée SageMaker Neo a-t-il besoin ?) La clé dans ce dictionnaire doit être remplacée par le nouveau nom du tenseur d'entrée.

  5. Il s'agit, soit du nom du périphérique cible pour lequel compiler, soit les détails généraux de la plateforme matérielle

    target_device = 'target-device-name'

    Par exemple, si vous voulez déployer sur un Raspberry Pi 3, utilisez :

    target_device = 'rasp3b'

    Vous pouvez trouver la liste complète des appareils en périphérie pris en charge dans Supported Frameworks, Devices, Systems, and Architectures (Cadres, périphériques, systèmes et architectures pris en charge).

Après avoir accompli les étapes précédentes, vous pouvez envoyer une tâche de compilation à Neo.

# Create a SageMaker client so you can submit a compilation job sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION) # Give your compilation job a name compilation_job_name = 'getting-started-demo' print(f'Compilation job for {compilation_job_name} started') response = sagemaker_client.create_compilation_job( CompilationJobName=compilation_job_name, RoleArn=role_arn, InputConfig={ 'S3Uri': s3_input_location, 'DataInputConfig': data_shape, 'Framework': framework.upper() }, OutputConfig={ 'S3OutputLocation': s3_output_location, 'TargetDevice': target_device }, StoppingCondition={ 'MaxRuntimeInSeconds': 900 } ) # Optional - Poll every 30 sec to check completion status import time while True: response = sagemaker_client.describe_compilation_job(CompilationJobName=compilation_job_name) if response['CompilationJobStatus'] == 'COMPLETED': break elif response['CompilationJobStatus'] == 'FAILED': raise RuntimeError('Compilation failed') print('Compiling ...') time.sleep(30) print('Done!')

Pour obtenir des informations supplémentaires pour le débogage, veuillez inclure l'instruction print suivante :

print(response)

Si la tâche de compilation a réussi, votre modèle compilé est stocké dans le compartiment Amazon S3 de sortie que vous avez spécifié au préalable (s3_output_location). Téléchargez votre modèle compilé localement :

object_path = f'output/{model}-{target_device}.tar.gz' neo_compiled_model = f'compiled-{model}.tar.gz' s3_client.download_file(bucket, object_path, neo_compiled_model)