Kompilieren des Modells - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Kompilieren des Modells

Sobald Sie die Voraussetzungen erfüllt haben, können Sie Ihr Modell mit Amazon SageMaker Neo kompilieren. Sie können Ihr Modell mit der Konsole oder den AWS CLIAmazon Web Services SDK for Python (Boto3) kompilieren, siehe Verwenden von Neo zum Kompilieren eines Modells. In diesem Beispiel kompilieren Sie Ihr Modell mit Boto3.

Um ein Modell zu kompilieren, benötigt SageMaker Neo die folgenden Informationen:

  1. Der Amazon S3 S3-BucketURI, in dem Sie das trainierte Modell gespeichert haben.

    Wenn Sie die Voraussetzungen erfüllt haben, wird der Name Ihres Buckets in einer Variablen mit dem Namen bucket gespeichert. Der folgende Codeausschnitt zeigt, wie Sie all Ihre Buckets auflisten können, indem Sie AWS CLI verwenden.

    aws s3 ls

    Beispielsweise:

    $ aws s3 ls 2020-11-02 17:08:50 bucket
  2. Der Amazon S3 S3-BucketURI, in dem Sie das kompilierte Modell speichern möchten.

    Der folgende Codeausschnitt verknüpft Ihren Amazon S3 S3-Bucket URI mit dem Namen eines Ausgabeverzeichnisses namens: output

    s3_output_location = f's3://{bucket}/output'
  3. Das Framework für Machine Learning, mit dem Sie Ihr Modell trainiert haben.

    Definieren Sie das Framework, mit dem Sie Ihr Modell trainiert haben.

    framework = 'framework-name'

    Wenn Sie beispielsweise ein Modell kompilieren möchten, das mit trainiert wurde TensorFlow, können Sie entweder oder verwenden. tflite tensorflow Verwenden Sie tflite diese Option, wenn Sie eine leichtere Version verwenden möchten TensorFlow , die weniger Speicherplatz benötigt.

    framework = 'tflite'

    Eine vollständige Liste der von NEO unterstützten Frameworks finden Sie unter Unterstützte Frameworks, Geräte, Systeme und Architekturen.

  4. Die Form der Eingabe Ihres Modells.

    Neo benötigt den Namen und die Form Ihres Eingangstensors. Name und Form werden als Schlüssel-Wert-Paare weitergeleitet. value ist eine Liste der ganzzahligen Dimensionen eines Eingangstensors und key ist der genaue Name eines Eingangstensors im Modell.

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

    Beispielsweise:

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

    Stellen Sie sicher, dass das Modell je nach verwendetem Framework korrekt formatiert ist. Weitere Informationen findest du unter Welche Formen von Eingabedaten erwartet SageMaker Neo? Der Schlüssel in diesem Wörterbuch muss in den Namen des neuen Eingangstensors geändert werden.

  5. Entweder der Name des Zielgeräts, für das kompiliert werden soll, oder die allgemeinen Details der Hardwareplattform

    target_device = 'target-device-name'

    Wenn Sie beispielsweise eine Bereitstellung auf einem Raspberry Pi 3 durchführen möchten, verwenden Sie:

    target_device = 'rasp3b'

    Die gesamte Liste der unterstützten Edge-Geräte finden Sie unter Unterstützte Frameworks, Geräte, Systeme und Architekturen.

Nachdem Sie die vorherigen Schritte abgeschlossen haben, können Sie einen Kompilierungsauftrag an Neo senden.

# 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!')

Wenn Sie zusätzliche Informationen zum Debuggen benötigen, fügen Sie die folgende Druckanweisung bei:

print(response)

Wenn der Kompilierungsauftrag erfolgreich ist, wird Ihr kompiliertes Modell in dem Amazon S3-Ausgabe-Bucket gespeichert, den Sie zuvor angegeben haben (s3_output_location). Laden Sie Ihr kompiliertes Modell lokal herunter:

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)