

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.

# Modellkompilierung mit Neo
<a name="neo-job-compilation"></a>

In diesem Abschnitt wird erläutert, wie Kompilierungsaufträge erstellt, beschrieben, angehalten und aufgelistet werden. Die folgenden Optionen sind in Amazon SageMaker Neo für die Verwaltung der Kompilierungsaufträge für Machine-Learning-Modelle verfügbar: die AWS Command Line Interface, die Amazon SageMaker AI-Konsole oder das Amazon SageMaker SDK. 

**Topics**
+ [Modell für die Kompilierung vorbereiten](neo-compilation-preparing-model.md)
+ [Kompilieren ein Modell (AWS Command Line Interface)](neo-job-compilation-cli.md)
+ [Ein Modell kompilieren (Amazon SageMaker AI Console)](neo-job-compilation-console.md)
+ [Ein Modell kompilieren (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Modell für die Kompilierung vorbereiten
<a name="neo-compilation-preparing-model"></a>

SageMaker Neo benötigt Modelle für maschinelles Lernen, um bestimmte Eingabedatenformen zu erfüllen. Welche Eingabeform für die Kompilierung erforderlich ist, hängt vom verwendeten Deep-Learning-Framework ab. Sobald die Eingabeform Ihres Modells korrekt formatiert ist, speichern Sie Ihr Modell gemäß den folgenden Anforderungen. Sobald Sie ein Modell gespeichert haben, komprimieren Sie die Modellartefakte.

**Topics**
+ [Welche Formen der Eingabedaten erwartet SageMaker Neo?](#neo-job-compilation-expected-inputs)
+ [Modelle für SageMaker Neo speichern](#neo-job-compilation-how-to-save-model)

## Welche Formen der Eingabedaten erwartet SageMaker Neo?
<a name="neo-job-compilation-expected-inputs"></a>

Bevor Sie Ihr Modell kompilieren, stellen Sie sicher, dass Ihr Modell korrekt formatiert ist. Neo erwartet den Namen und die Form der erwarteten Dateneingaben für Ihr trainiertes Modell mit einer JSON-Wörterbuchform oder Listenform. Die Dateneingaben sind Framework-spezifisch. 

Im Folgenden sind die Eingabeformen aufgeführt, die SageMaker Neo erwartet:

### Keras
<a name="collapsible-section-1"></a>

Sie müssen den Namen und die Form (NCHW-Format) erwarteter Dateneingaben unter Verwendung eines Wörterbuchformats für Ihr trainiertes Modell angeben. Beachten Sie, dass Keras-Modellartefakte zwar im NHWC-Format (Channel-Last) hochgeladen, aber im NCHW-Format (Channel-First) angegeben werden DataInputConfig sollten. Gültige Wörterbuchformate sind folgende: 
+ Für eine Eingabe: `{'input_1':[1,3,224,224]}`
+ Für zwei Eingaben: `{'input_1': [1,3,224,224], 'input_2':[1,3,224,224]}`

### MXNet/ONNX
<a name="collapsible-section-2"></a>

Sie müssen den Namen und die Form (NCHW-Format) erwarteter Dateneingaben unter Verwendung eines Wörterbuchformats für Ihr trainiertes Modell angeben. Gültige Wörterbuchformate sind folgende:
+ Für eine Eingabe: `{'data':[1,3,1024,1024]}`
+ Für zwei Eingaben: `{'var1': [1,1,28,28], 'var2':[1,1,28,28]}`

### PyTorch
<a name="collapsible-section-3"></a>

Für ein PyTorch Modell müssen Sie den Namen und die Form der erwarteten Dateneingaben nicht angeben, wenn Sie die beiden folgenden Bedingungen erfüllen:
+ Sie haben Ihre Modelldefinitionsdatei mit PyTorch 2.0 oder höher erstellt. Weitere Informationen zum Erstellen der Definitionsdatei finden Sie im [PyTorch](#how-to-save-pytorch) Abschnitt *Modelle für SageMaker Neo speichern*.
+ Sie kompilieren Ihr Modell für eine Cloud-Instance. Weitere Informationen zu den Instance-Typen, die SageMaker Neo unterstützt, finden Sie unter[Unterstützte Instance-Typen und Frameworks](neo-supported-cloud.md).

Wenn Sie diese Bedingungen erfüllen, ruft SageMaker Neo die Eingabekonfiguration aus der Modelldefinitionsdatei (.pt oder .pth) ab, mit der Sie sie erstellen. PyTorch

Andernfalls müssen Sie wie folgt vorgehen:

Sie müssen den Namen und die Form (NCHW-Format) erwarteter Dateneingaben unter Verwendung eines Wörterbuchformats für Ihr trainiertes Modell angeben. Alternativ können Sie die Form nur in einem Listenformat angeben. Gültige Wörterbuchformate sind folgende:
+ Für eine Eingabe im Wörterbuchformat: `{'input0':[1,3,224,224]}`
+ Beispiel für eine Eingabe im Listenformat: `[[1,3,224,224]]`
+ Beispiele für zwei Eingaben im Wörterbuchformat: `{'input0':[1,3,224,224], 'input1':[1,3,224,224]}`
+ Beispiele für zwei Eingaben im Listenformat: `[[1,3,224,224], [1,3,224,224]]`

### TensorFlow
<a name="collapsible-section-4"></a>

Sie müssen den Namen und die Form (NHWC-Format) der erwarteten Dateneingaben unter Verwendung eines Wörterbuchformats für Ihr trainiertes Modell angeben. Gültige Wörterbuchformate sind folgende:
+ Für eine Eingabe: `{'input':[1,1024,1024,3]}`
+ Für zwei Eingaben: `{'data1': [1,28,28,1], 'data2':[1,28,28,1]}`

### TFLite
<a name="collapsible-section-5"></a>

Sie müssen den Namen und die Form (NHWC-Format) der erwarteten Dateneingaben unter Verwendung eines Wörterbuchformats für Ihr trainiertes Modell angeben. Gültige Wörterbuchformate sind folgende:
+ Für eine Eingabe: `{'input':[1,224,224,3]}`

**Anmerkung**  
SageMaker Neo unterstützt TensorFlow Lite nur für Edge-Geräteziele. Eine Liste der unterstützten SageMaker Neo-Edge-Geräteziele finden Sie auf der SageMaker [Geräte](neo-supported-devices-edge-devices.md#neo-supported-edge-devices) Neo-Seite. Eine Liste der unterstützten SageMaker Neo-Cloud-Instanzziele finden Sie auf der SageMaker [Unterstützte Instance-Typen und Frameworks](neo-supported-cloud.md) Neo-Seite.

### XGBoost
<a name="collapsible-section-6"></a>

Der Name und die Form der Eingabedaten sind nicht erforderlich.

## Modelle für SageMaker Neo speichern
<a name="neo-job-compilation-how-to-save-model"></a>

Die folgenden Codebeispiele zeigen, wie Sie Ihr Modell speichern, um es mit Neo kompatibel zu machen. Modelle müssen als komprimierte TAR-Dateien (`*.tar.gz`) gepackt werden.

### Keras
<a name="how-to-save-tf-keras"></a>

Keras-Modelle benötigen eine Modelldefinitionsdatei (`.h5`).

Es gibt zwei Möglichkeiten, Ihr Keras-Modell zu speichern, um es für SageMaker Neo kompatibel zu machen:

1. Exportieren `.h5` Format mit `model.save("<model-name>", save_format="h5")`.

1. Frieren Sie das `SavedModel` nach dem Export ein.

Im Folgenden finden Sie ein Beispiel für den Export eines `tf.keras` Modells als eingefrorenes Diagramm (Option zwei):

```
import os
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras import backend

tf.keras.backend.set_learning_phase(0)
model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3), pooling='avg')
model.summary()

# Save as a SavedModel
export_dir = 'saved_model/'
model.save(export_dir, save_format='tf')

# Freeze saved model
input_node_names = [inp.name.split(":")[0] for inp in model.inputs]
output_node_names = [output.name.split(":")[0] for output in model.outputs]
print("Input names: ", input_node_names)
with tf.Session() as sess:
    loaded = tf.saved_model.load(sess, export_dir=export_dir, tags=["serve"]) 
    frozen_graph = tf.graph_util.convert_variables_to_constants(sess,
                                                                sess.graph.as_graph_def(),
                                                                output_node_names)
    tf.io.write_graph(graph_or_graph_def=frozen_graph, logdir=".", name="frozen_graph.pb", as_text=False)

import tarfile
tar = tarfile.open("frozen_graph.tar.gz", "w:gz")
tar.add("frozen_graph.pb")
tar.close()
```

**Warnung**  
Exportieren Sie Ihr Modell nicht mit der `SavedModel` Klasse mithilfe des `model.save(<path>, save_format='tf')`. Dieses Format eignet sich für das Training, aber es ist nicht für Inferenzen geeignet.

### MXNet
<a name="how-to-save-mxnet"></a>

MXNet Modelle müssen als einzelne Symboldatei `*-symbol.json` und als einziger Parameter `*.params files` gespeichert werden.

------
#### [ Gluon Models ]

Definieren Sie das neuronale Netzwerk mithilfe der `HybridSequential` Klasse. Dadurch wird der Code im Stil der symbolischen Programmierung (im Gegensatz zur imperativen Programmierung) ausgeführt.

```
from mxnet import nd, sym
from mxnet.gluon import nn

def get_net():
    net = nn.HybridSequential()  # Here we use the class HybridSequential.
    net.add(nn.Dense(256, activation='relu'),
            nn.Dense(128, activation='relu'),
            nn.Dense(2))
    net.initialize()
    return net

# Define an input to compute a forward calculation. 
x = nd.random.normal(shape=(1, 512))
net = get_net()

# During the forward calculation, the neural network will automatically infer
# the shape of the weight parameters of all the layers based on the shape of
# the input.
net(x)
                        
# hybridize model
net.hybridize()
net(x)

# export model
net.export('<model_name>') # this will create model-symbol.json and model-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")
for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

Weitere Informationen zur Hybridisierung von Modellen finden Sie in der [MXNet Hybridisierungsdokumentation](https://mxnet.apache.org/versions/1.7.0/api/python/docs/tutorials/packages/gluon/blocks/hybridize.html).

------
#### [ Gluon Model Zoo (GluonCV) ]

Zoo-Modelle des GluonCV-Modells werden vorhybridisiert geliefert. Sie können sie also einfach exportieren.

```
import numpy as np
import mxnet as mx
import gluoncv as gcv
from gluoncv.utils import export_block
import tarfile

net = gcv.model_zoo.get_model('<model_name>', pretrained=True) # For example, choose <model_name> as resnet18_v1
export_block('<model_name>', net, preprocess=True, layout='HWC')

tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------
#### [ Non Gluon Models ]

Alle Modelle, die nicht von Gluon stammen, werden beim Speichern auf der Festplatte `*-symbol` und `*.params` in Dateien verwendet. Sie sind daher bereits im korrekten Format für Neo.

```
# Pass the following 3 parameters: sym, args, aux
mx.model.save_checkpoint('<model_name>',0,sym,args,aux) # this will create <model_name>-symbol.json and <model_name>-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------

### PyTorch
<a name="how-to-save-pytorch"></a>

PyTorch Modelle müssen als Definitionsdatei (`.pt`oder`.pth`) mit dem Eingabedatentyp von gespeichert werden. `float32`

Verwenden Sie die Methode, gefolgt von der `torch.save` Methode, um Ihr `torch.jit.trace` Modell zu speichern. Dieser Prozess speichert ein Objekt in einer Festplattendatei und verwendet standardmäßig Python pickle (`pickle_module=pickle`), um die Objekte und einige Metadaten zu speichern. Als Nächstes konvertieren Sie das gespeicherte Modell in eine komprimierte TAR-Datei.

```
import torchvision
import torch

model = torchvision.models.resnet18(pretrained=True)
model.eval()
inp = torch.rand(1, 3, 224, 224)
model_trace = torch.jit.trace(model, inp)

# Save your model. The following code saves it with the .pth file extension
model_trace.save('model.pth')

# Save as a compressed tar file
import tarfile
with tarfile.open('model.tar.gz', 'w:gz') as f:
    f.add('model.pth')
f.close()
```

Wenn Sie Ihr Modell mit PyTorch 2.0 oder höher speichern, leitet SageMaker Neo die Eingabekonfiguration für das Modell (den Namen und die Form für die Eingabe) aus der Definitionsdatei ab. In diesem Fall müssen Sie die Dateneingabekonfiguration nicht für SageMaker AI angeben, wenn Sie das Modell kompilieren.

Wenn Sie verhindern möchten, dass SageMaker Neo die Eingabekonfiguration ableitet, können Sie den `_store_inputs` Parameter `torch.jit.trace` auf `False` setzen. Wenn Sie dies tun, müssen Sie die Dateneingabekonfiguration für SageMaker AI angeben, wenn Sie das Modell kompilieren.

Weitere Informationen zur `torch.jit.trace` Methode finden Sie unter [TORCH.JIT.TRACE](https://pytorch.org/docs/stable/generated/torch.jit.trace.html#torch.jit.trace) in der Dokumentation. PyTorch 

### TensorFlow
<a name="how-to-save-tf"></a>

TensorFlow benötigt eine `.pb` oder eine `.pbtxt` Datei und ein Variablenverzeichnis, das Variablen enthält. Für eingefrorene Modelle ist nur eine `.pb` oder `.pbtxt` Datei erforderlich.

Das folgende Codebeispiel veranschaulicht, wie Sie den Befehl tar Linux verwenden, um Ihr Modell zu komprimieren. Führen Sie Folgendes in Ihrem Terminal oder in einem Jupyter Notebook aus (wenn Sie ein Jupyter Notebook verwenden, fügen Sie den `!` magischen Befehl am Anfang der Anweisung ein):

```
# Download SSD_Mobilenet trained model
!wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# unzip the compressed tar file
!tar xvf ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# Compress the tar file and save it in a directory called 'model.tar.gz'
!tar czvf model.tar.gz ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb
```

Die in diesem Beispiel verwendeten Befehlsflags bewirken Folgendes:
+ `c`: Erstellen eines Archivs
+ `z`: Komprimieren Sie das Archiv mit gzip
+ `v`: Zeigt den Fortschritt der Archivierung an
+ `f`: Geben Sie den Dateinamen des Archivs an

### Integrierte Schätzer
<a name="how-to-save-built-in"></a>

Integrierte Schätzer werden entweder durch Framework-spezifische Container oder durch algorithmusspezifische Container erstellt. Schätzobjekte sowohl für den integrierten Algorithmus als auch für den Framework-spezifischen Schätzer speichern das Modell im richtigen Format für Sie, wenn Sie das Modell mit der integrierten `.fit` Methode trainieren.

Sie können zum Beispiel a verwenden, `sagemaker.TensorFlow` um einen TensorFlow Schätzer zu definieren:

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(entry_point='mnist.py',
                        role=role,  #param role can be arn of a sagemaker execution role
                        framework_version='1.15.3',
                        py_version='py3',
                        training_steps=1000, 
                        evaluation_steps=100,
                        instance_count=2,
                        instance_type='ml.c4.xlarge')
```

Trainieren Sie dann das Modell mit `.fit` integrierten Methode:

```
estimator.fit(inputs)
```

Bevor Sie das Modell schließlich mit der Build-In `compile_model` Methode kompilieren:

```
# Specify output path of the compiled model
output_path = '/'.join(estimator.output_path.split('/')[:-1])

# Compile model
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5', 
                              input_shape={'data':[1, 784]},  # Batch size 1, 3 channels, 224x224 Images.
                              output_path=output_path,
                              framework='tensorflow', framework_version='1.15.3')
```

Sie können die `sagemaker.estimator.Estimator` Klasse auch verwenden, um ein Schätzerobjekt für das Training zu initialisieren und einen integrierten Algorithmus mit der `compile_model` Methode aus dem Python-SDK zu kompilieren: SageMaker 

```
import sagemaker
from sagemaker.image_uris import retrieve
sagemaker_session = sagemaker.Session()
aws_region = sagemaker_session.boto_region_name

# Specify built-in algorithm training image
training_image = retrieve(framework='image-classification', 
                          region=aws_region, image_scope='training')

training_image = retrieve(framework='image-classification', region=aws_region, image_scope='training')

# Create estimator object for training
estimator = sagemaker.estimator.Estimator(image_uri=training_image,
                                          role=role,  #param role can be arn of a sagemaker execution role
                                          instance_count=1,
                                          instance_type='ml.p3.8xlarge',
                                          volume_size = 50,
                                          max_run = 360000,
                                          input_mode= 'File',
                                          output_path=s3_training_output_location,
                                          base_job_name='image-classification-training'
                                          )
                                          
# Setup the input data_channels to be used later for training.                                          
train_data = sagemaker.inputs.TrainingInput(s3_training_data_location,
                                            content_type='application/x-recordio',
                                            s3_data_type='S3Prefix')
validation_data = sagemaker.inputs.TrainingInput(s3_validation_data_location,
                                                content_type='application/x-recordio',
                                                s3_data_type='S3Prefix')
data_channels = {'train': train_data, 'validation': validation_data}


# Train model
estimator.fit(inputs=data_channels, logs=True)

# Compile model with Neo                                                                                  
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5',
                                          input_shape={'data':[1, 3, 224, 224], 'softmax_label':[1]},
                                          output_path=s3_compilation_output_location,
                                          framework='mxnet',
                                          framework_version='1.7')
```

Weitere Hinweise zum Kompilieren von Modellen mit dem SageMaker Python-SDK finden Sie unter[Ein Modell kompilieren (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md).

# Kompilieren ein Modell (AWS Command Line Interface)
<a name="neo-job-compilation-cli"></a>

In diesem Abschnitt wird gezeigt, wie Sie Amazon SageMaker Neo-Kompilierungsaufträge für Machine-Learning-Modelle mithilfe von AWS Command Line Interface (CLI) verwalten. Sie können Kompilierungsaufträge erstellen, beschreiben, anhalten und auflisten. 

1. Erstellen eines Kompilierungsauftrags

   Mit der [CreateCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html)API-Operation können Sie das Dateneingabeformat, den S3-Bucket, in dem Ihr Modell gespeichert werden soll, den S3-Bucket, in den das kompilierte Modell geschrieben werden soll, und das Zielhardwaregerät oder die Zielplattform angeben.

   Die folgende Tabelle zeigt, wie Sie die `CreateCompilationJob` API konfigurieren, je nachdem, ob es sich bei Ihrem Ziel um ein Gerät oder eine Plattform handelt.

------
#### [ Device Example ]

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

   Sie können optional die Framework-Version angeben, die Sie mit dem [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion)Feld verwendet haben, wenn Sie das PyTorch Framework zum Trainieren Ihres Modells verwendet haben und Ihr Zielgerät ein `ml_* ` Ziel ist.

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "PYTORCH",
           "FrameworkVersion": "1.6"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5",
           # When compiling for ml_* instances using PyTorch framework, use the "CompilerOptions" field in 
           # OutputConfig to provide the correct data type ("dtype") of the model’s input. Default assumed is "float32"
           "CompilerOptions": "{'dtype': 'long'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

**Hinweise:**  
Wenn Sie Ihr Modell mit PyTorch Version 2.0 oder höher gespeichert haben, ist das `DataInputConfig` Feld optional. SageMaker AI Neo ruft die Eingabekonfiguration aus der Modelldefinitionsdatei ab, mit der Sie sie erstellen PyTorch. Weitere Informationen zum Erstellen der Definitionsdatei finden Sie im [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) Abschnitt unter *Speichern von Modellen für SageMaker AI Neo*.
Dieses API-Feld wird nur für unterstützt PyTorch.

------
#### [ Platform Example ]

   ```
   {
       "CompilationJobName": "neo-test-compilation-job",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target platform configuration example for a p3.2xlarge instance
           "TargetPlatform": {
               "Os": "LINUX",
               "Arch": "X86_64",
               "Accelerator": "NVIDIA"
           },
           "CompilerOptions": "{'cuda-ver': '10.0', 'trt-ver': '6.0.1', 'gpu-code': 'sm_70'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

------
**Anmerkung**  
Bei der `OutputConfig` API-Operation schließen sich die Operationen `TargetDevice` und die `TargetPlatform` API-Operation gegenseitig aus. Sie müssen eine der beiden Optionen wählen.

   Beispiele für JSON-Strings von `DataInputConfig` , die von den verschiedenen Frameworks abhängen, finden Sie unter [Welche Eingabedatenformen Neo erwartet](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-errors-preventing).

   Weitere Informationen zum Einrichten der Konfigurationen finden Sie unter den [TargetPlatform](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TargetPlatform.html)API-Operationen [InputConfig[OutputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html), und in der SageMaker API-Referenz.

1. Führen Sie nach der Konfiguration der JSON-Datei den folgenden Befehl aus, um den Kompilierungsjob zu erstellen:

   ```
   aws sagemaker create-compilation-job \
   --cli-input-json file://job.json \
   --region us-west-2 
   
   # You should get CompilationJobArn
   ```

1. Beschreiben Sie den Kompilierungsauftrag, indem Sie den folgenden Befehl ausführen:

   ```
   aws sagemaker describe-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   ```

1. Beenden Sie den Kompilierungsauftrag, indem Sie den folgenden Befehl ausführen:

   ```
   aws sagemaker stop-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   
   # There is no output for compilation-job operation
   ```

1. Führen Sie den Kompilierungsauftrag auf, indem Sie den folgenden Befehl ausführen:

   ```
   aws sagemaker list-compilation-jobs \
   --region us-west-2
   ```

# Ein Modell kompilieren (Amazon SageMaker AI Console)
<a name="neo-job-compilation-console"></a>

Sie können einen Amazon SageMaker Neo-Kompilierungsauftrag in der Amazon SageMaker AI-Konsole erstellen.

1. Wählen Sie in der **Amazon SageMaker AI-Konsole** **Compilation Jobs** und dann **Create Compilation Job** aus.  
![\[Erstellen eines Kompilierungsauftrags\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/8-create-compilation-job.png)

1. Geben Sie auf der Seite **Create compilation job** unter **Job name** einen Namen ein. Anschließend wählen Sie unter **IAM role (IAM-Rolle)** eine Rolle aus.  
![\[Seite „Kompilierungsjob erstellen“\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/9-create-compilation-job-config.png)

1. Wenn Sie keine IAM-Rolle haben, wählen Sie **Create a new role (Neue Rolle erstellen)** aus.  
![\[Option „IAM-Rolle erstellen“\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/10a-create-iam-role.png)

1. Wählen Sie auf der Seite **Create an IAM role (IAM-Rolle erstellen)** die Option **Any S3 bucket (Beliebiger S3-Bucket)** aus und klicken Sie dann auf **Create role (Rolle erstellen)**.  
![\[Seite „IAM-Rolle erstellen“\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/10-create-iam-role.png)

1. 

------
#### [ Non PyTorch Frameworks ]

   Im Bereich **Input configuration** geben Sie unter **Location of model artifacts ** den Pfad des S3-Buckets ein, in dem Ihre Modellartefakte gespeichert sind. Ihre Modellartefakte müssen in einem komprimierten Tarball-Dateiformat (`.tar.gz`) vorliegen. 

   Geben Sie für das Feld **Data input configuration** die JSON-Zeichenfolge ein, die die Form der Eingabedaten angibt.

   Unter **Machine Learning Framework** wählen Sie das Framework aus.

![\[Seite „Eingabekonfiguration“\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/neo-create-compilation-job-input-config.png)


   Beispiele für JSON-Strings von Eingabedatenformen je nach Framework finden Sie unter [Welche Eingabedatenformen erwartet Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

------
#### [ PyTorch Framework ]

   Ähnliche Anweisungen gelten für das Kompilieren von PyTorch Modellen. Wenn Sie jedoch mit Target trainiert haben PyTorch und versuchen, das Modell für `ml_*` (außer`ml_inf`) Target zu kompilieren, können Sie optional die Version angeben, die PyTorch Sie verwendet haben.

![\[Beispiel für den Abschnitt Eingabekonfiguration, das zeigt, wo die Framework-Version ausgewählt werden kann.\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/compile_console_pytorch.png)


   Beispiele für JSON-Strings von Eingabedatenformen je nach Framework finden Sie unter [Welche Eingabedatenformen erwartet Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

**Hinweise**  
Wenn Sie Ihr Modell mit PyTorch Version 2.0 oder höher gespeichert haben, ist das **Konfigurationsfeld für die Dateneingabe** optional. SageMaker Neo ruft die Eingabekonfiguration aus der Modelldefinitionsdatei ab, mit der Sie sie erstellen PyTorch. Weitere Informationen zum Erstellen der Definitionsdatei finden Sie im [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) Abschnitt *Speichern von Modellen für SageMaker AI Neo*.
Verwenden Sie beim Kompilieren für `ml_*` Instanzen mithilfe PyTorch des Frameworks das Feld **Compiler-Optionen** in der **Ausgabekonfiguration**, um den richtigen Datentyp (`dtype`) der Modelleingabe anzugeben. Der Standard ist auf `"float32"` gesetzt. 

![\[Beispiel für den Abschnitt Ausgabekonfiguration.\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/neo_compilation_console_pytorch_compiler_options.png)


**Warnung**  
 Wenn Sie einen Amazon-S3-Bucket-URI-Pfad angeben, der zu einer `.pth` Datei führt, erhalten Sie nach dem Start der Kompilierung die folgende Fehlermeldung: `ClientError: InputConfiguration: Unable to untar input model.Please confirm the model is a tar.gz file` 

------

1.  Gehen Sie zum Abschnitt **Ausgabekonfiguration**. Wählen Sie aus, wo Sie Ihr Modell bereitstellen möchten. Sie können Ihr Modell auf einem **Target-device** oder einer **Target platform** bereitstellen. Zu den Zielgeräten gehören Cloud- und Edge-Geräte. Zielplattformen beziehen sich auf bestimmte Betriebssysteme, Architekturen und Beschleuniger, auf denen Ihr Modell ausgeführt werden soll. 

    Geben Sie für **S3 Output location** den Pfad zum S3 bucket, in dem das kompilierte Modell gespeichert werden soll. Sie können optional Compiler-Optionen im JSON-Format im Abschnitt **Compiler options** hinzufügen.   
![\[Seite „Ausgabekonfiguration“\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/neo-console-output-config.png)

1. Überprüfen Sie den Status des Kompilierungsauftrags, wenn er gestartet wurde. Dieser Status des Job befindet sich oben auf der Seite mit dem **Compilation Job**, wie im folgenden Screenshot gezeigt. Sie können den Status auch in der **Status** Spalte überprüfen.  
![\[Status des Kompilierungsauftrags\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/12-run-model-compilation.png)

1. Überprüfen Sie den Status des Kompilierungsauftrags, wenn er abgeschlossen wurde. Sie können den Status in der **Status** Spalte überprüfen, wie im folgenden Bildschirmfoto gezeigt.  
![\[Status des Kompilierungsauftrags\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/neo/12a-completed-model-compilation.png)

# Ein Modell kompilieren (Amazon SageMaker AI SDK)
<a name="neo-job-compilation-sagemaker-sdk"></a>

 Sie können die [https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model)API im [Amazon SageMaker AI SDK für Python](https://sagemaker.readthedocs.io/en/stable/) verwenden, um ein trainiertes Modell zu kompilieren und es für bestimmte Zielhardware zu optimieren. Die API sollte für das Estimator-Objekt aufgerufen werden, das beim Modelltraining verwendet wird. 

**Anmerkung**  
Sie müssen die `MMS_DEFAULT_RESPONSE_TIMEOUT` Umgebungsvariable auf setzen, `500` wenn Sie das Modell mit MXNet oder PyTorch kompilieren. Die Umgebungsvariable wird für TensorFlow nicht benötigt. 

 Im Folgenden finden Sie ein Beispiel dafür, wie Sie ein Modell mithilfe des `trained_model_estimator` Objekts kompilieren können: 

```
# Replace the value of expected_trained_model_input below and
# specify the name & shape of the expected inputs for your trained model
# in json dictionary form
expected_trained_model_input = {'data':[1, 784]}

# Replace the example target_instance_family below to your preferred target_instance_family
compiled_model = trained_model_estimator.compile_model(target_instance_family='ml_c5',
        input_shape=expected_trained_model_input,
        output_path='insert s3 output path',
        env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'})
```

Der Code kompiliert das Modell, speichert das optimierte Modell unter und erstellt ein SageMaker KI-Modell`output_path`, das auf einem Endpunkt bereitgestellt werden kann. 