

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Model Kompilasi dengan Neo
<a name="neo-job-compilation"></a>

Bagian ini menunjukkan cara membuat, mendeskripsikan, menghentikan, dan membuat daftar pekerjaan kompilasi. Opsi berikut tersedia di Amazon SageMaker Neo untuk mengelola pekerjaan kompilasi untuk model pembelajaran mesin: konsol Amazon SageMaker AI, atau Amazon SageMaker SDK. AWS Command Line Interface

**Topics**
+ [Siapkan Model untuk Kompilasi](neo-compilation-preparing-model.md)
+ [Kompilasi Model ()AWS Command Line Interface](neo-job-compilation-cli.md)
+ [Kompilasi Model (Amazon SageMaker AI Console)](neo-job-compilation-console.md)
+ [Kompilasi Model (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Siapkan Model untuk Kompilasi
<a name="neo-compilation-preparing-model"></a>

SageMaker Neo membutuhkan model pembelajaran mesin untuk memenuhi bentuk data input tertentu. Bentuk input yang diperlukan untuk kompilasi tergantung pada kerangka pembelajaran mendalam yang Anda gunakan. Setelah bentuk input model Anda diformat dengan benar, simpan model Anda sesuai dengan persyaratan di bawah ini. Setelah Anda memiliki model yang disimpan, kompres artefak model.

**Topics**
+ [Bentuk data input apa yang diharapkan SageMaker Neo?](#neo-job-compilation-expected-inputs)
+ [Menyimpan Model untuk SageMaker Neo](#neo-job-compilation-how-to-save-model)

## Bentuk data input apa yang diharapkan SageMaker Neo?
<a name="neo-job-compilation-expected-inputs"></a>

Sebelum Anda mengkompilasi model Anda, pastikan model Anda diformat dengan benar. Neo mengharapkan nama dan bentuk input data yang diharapkan untuk model terlatih Anda dengan format JSON atau format daftar. Input yang diharapkan adalah kerangka kerja khusus. 

Di bawah ini adalah bentuk input yang diharapkan SageMaker Neo:

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

Tentukan nama dan bentuk (format NCHW) dari input data yang diharapkan menggunakan format kamus untuk model terlatih Anda. Perhatikan bahwa sementara artefak model Keras harus diunggah dalam format NHWC (channel-last), DataInputConfig harus ditentukan dalam format NCHW (channel-first). Format kamus yang diperlukan adalah sebagai berikut: 
+ Untuk satu masukan: `{'input_1':[1,3,224,224]}`
+ Untuk dua input: `{'input_1': [1,3,224,224], 'input_2':[1,3,224,224]}`

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

Tentukan nama dan bentuk (format NCHW) dari input data yang diharapkan menggunakan format kamus untuk model terlatih Anda. Format kamus yang diperlukan adalah sebagai berikut:
+ Untuk satu masukan: `{'data':[1,3,1024,1024]}`
+ Untuk dua input: `{'var1': [1,1,28,28], 'var2':[1,1,28,28]}`

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

Untuk PyTorch model, Anda tidak perlu memberikan nama dan bentuk input data yang diharapkan jika Anda memenuhi kedua kondisi berikut:
+ Anda membuat file definisi model Anda dengan menggunakan PyTorch 2.0 atau yang lebih baru. Untuk informasi selengkapnya tentang cara membuat file definisi, lihat [PyTorch](#how-to-save-pytorch) bagian di bawah *Menyimpan Model untuk SageMaker Neo*.
+ Anda sedang menyusun model Anda untuk instance cloud. Untuk informasi selengkapnya tentang jenis instance yang didukung SageMaker Neo, lihat[Jenis dan Kerangka Instance yang Didukung](neo-supported-cloud.md).

Jika Anda memenuhi kondisi ini, SageMaker Neo mendapatkan konfigurasi input dari file definisi model (.pt atau.pth) yang Anda buat dengan. PyTorch

Jika tidak, Anda harus melakukan hal berikut:

Tentukan nama dan bentuk (format NCHW) dari input data yang diharapkan menggunakan format kamus untuk model terlatih Anda. Atau, Anda dapat menentukan bentuk hanya menggunakan format daftar. Format kamus yang diperlukan adalah sebagai berikut:
+ Untuk satu masukan dalam format kamus: `{'input0':[1,3,224,224]}`
+ Untuk satu masukan dalam format daftar: `[[1,3,224,224]]`
+ Untuk dua input dalam format kamus: `{'input0':[1,3,224,224], 'input1':[1,3,224,224]}`
+ Untuk dua input dalam format daftar: `[[1,3,224,224], [1,3,224,224]]`

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

Tentukan nama dan bentuk (format NHWC) dari input data yang diharapkan menggunakan format kamus untuk model terlatih Anda. Format kamus yang diperlukan adalah sebagai berikut:
+ Untuk satu masukan: `{'input':[1,1024,1024,3]}`
+ Untuk dua input: `{'data1': [1,28,28,1], 'data2':[1,28,28,1]}`

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

Tentukan nama dan bentuk (format NHWC) dari input data yang diharapkan menggunakan format kamus untuk model terlatih Anda. Format kamus yang diperlukan adalah sebagai berikut:
+ Untuk satu masukan: `{'input':[1,224,224,3]}`

**catatan**  
SageMaker Neo hanya mendukung TensorFlow Lite untuk target perangkat edge. Untuk daftar target perangkat SageMaker Neo edge yang didukung, lihat [Perangkat](neo-supported-devices-edge-devices.md#neo-supported-edge-devices) halaman SageMaker Neo. Untuk daftar target instans SageMaker Neo cloud yang didukung, lihat [Jenis dan Kerangka Instance yang Didukung](neo-supported-cloud.md) halaman SageMaker Neo.

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

Nama dan bentuk data input tidak diperlukan.

## Menyimpan Model untuk SageMaker Neo
<a name="neo-job-compilation-how-to-save-model"></a>

Contoh kode berikut menunjukkan cara menyimpan model Anda agar kompatibel dengan Neo. Model harus dikemas sebagai file tar terkompresi ()`*.tar.gz`.

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

Model Keras memerlukan satu file definisi model (`.h5`).

Ada dua opsi untuk menyimpan model Keras Anda agar kompatibel untuk SageMaker Neo:

1. Ekspor ke `.h5` format dengan`model.save("<model-name>", save_format="h5")`.

1. Bekukan `SavedModel` setelah mengekspor.

Di bawah ini adalah contoh cara mengekspor `tf.keras` model sebagai grafik beku (opsi dua):

```
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()
```

**Awas**  
Jangan mengekspor model Anda dengan `SavedModel` kelas menggunakan`model.save(<path>, save_format='tf')`. Format ini cocok untuk pelatihan, tetapi tidak cocok untuk inferensi.

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

MXNet model harus disimpan sebagai file simbol tunggal `*-symbol.json` dan satu parameter`*.params files`.

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

Tentukan jaringan saraf menggunakan `HybridSequential` Kelas. Ini akan menjalankan kode dalam gaya pemrograman simbolik (sebagai lawan dari pemrograman imperatif).

```
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()
```

Untuk informasi lebih lanjut tentang model hibridisasi, lihat dokumentasi [MXNet hibridisasi](https://mxnet.apache.org/versions/1.7.0/api/python/docs/tutorials/packages/gluon/blocks/hybridize.html).

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

Model kebun binatang model GluonCV datang pra-hibridisasi. Jadi Anda bisa mengekspornya.

```
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 ]

Semua model non-Gluon saat disimpan ke penggunaan disk `*-symbol` dan `*.params` file. Karena itu mereka sudah dalam format yang benar untuk 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 model harus disimpan sebagai file definisi (`.pt`atau`.pth`) dengan tipe data input dari. `float32`

Untuk menyimpan model Anda, gunakan `torch.jit.trace` metode yang diikuti oleh `torch.save` metode. Proses ini menyimpan objek ke file disk dan secara default menggunakan python pickle (`pickle_module=pickle`) untuk menyimpan objek dan beberapa metadata. Selanjutnya, konversi model yang disimpan ke file tar terkompresi.

```
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()
```

Jika Anda menyimpan model Anda dengan PyTorch 2.0 atau yang lebih baru, SageMaker Neo memperoleh konfigurasi input untuk model (nama dan bentuk untuk inputnya) dari file definisi. Dalam hal ini, Anda tidak perlu menentukan konfigurasi input data ke SageMaker AI saat Anda mengkompilasi model.

Jika Anda ingin mencegah SageMaker Neo menurunkan konfigurasi input, Anda dapat mengatur `_store_inputs` parameter `torch.jit.trace` ke`False`. Jika Anda melakukan ini, Anda harus menentukan konfigurasi input data ke SageMaker AI saat Anda mengkompilasi model.

Untuk informasi selengkapnya tentang `torch.jit.trace` metode ini, lihat [TORCH.JIT.TRACE](https://pytorch.org/docs/stable/generated/torch.jit.trace.html#torch.jit.trace) di dokumentasi. PyTorch 

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

TensorFlow membutuhkan satu `.pb` atau satu `.pbtxt` file dan direktori variabel yang berisi variabel. Untuk model beku, hanya satu `.pb` atau `.pbtxt` file yang diperlukan.

Contoh kode berikut menunjukkan cara menggunakan perintah tar Linux untuk mengompres model Anda. Jalankan yang berikut ini di terminal Anda atau di notebook Jupyter (jika Anda menggunakan notebook Jupyter, masukkan perintah `!` ajaib di awal pernyataan):

```
# 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
```

Bendera perintah yang digunakan dalam contoh ini mencapai hal berikut:
+ `c`: Buat arsip
+ `z`: Kompres arsip dengan gzip
+ `v`: Tampilkan kemajuan arsip
+ `f`: Tentukan nama file arsip

### Estimator Bawaan
<a name="how-to-save-built-in"></a>

Estimator bawaan dibuat oleh wadah khusus kerangka kerja atau wadah khusus algoritme. Objek penaksir untuk algoritme bawaan dan estimator khusus kerangka kerja menyimpan model dalam format yang benar untuk Anda saat Anda melatih model menggunakan metode bawaan. `.fit`

Misalnya, Anda dapat menggunakan a `sagemaker.TensorFlow` untuk mendefinisikan TensorFlow estimator:

```
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')
```

Kemudian latih model dengan metode `.fit` bawaan:

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

Sebelum akhirnya mengkompilasi model dengan `compile_model` metode build in:

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

Anda juga dapat menggunakan `sagemaker.estimator.Estimator` Class untuk menginisialisasi objek estimator untuk pelatihan dan mengkompilasi algoritma bawaan dengan `compile_model` metode dari Python SageMaker SDK:

```
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')
```

Untuk informasi selengkapnya tentang mengkompilasi model dengan SageMaker Python SDK, lihat. [Kompilasi Model (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Kompilasi Model ()AWS Command Line Interface
<a name="neo-job-compilation-cli"></a>

Bagian ini menunjukkan cara mengelola pekerjaan kompilasi Amazon SageMaker Neo untuk model pembelajaran mesin menggunakan AWS Command Line Interface (CLI). Anda dapat membuat, mendeskripsikan, menghentikan, dan membuat daftar pekerjaan kompilasi. 

1. Buat Job Kompilasi

   Dengan operasi [CreateCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html)API, Anda dapat menentukan format input data, bucket S3 untuk menyimpan model Anda, bucket S3 untuk menulis model yang dikompilasi, dan perangkat atau platform perangkat keras target.

   Tabel berikut menunjukkan cara mengonfigurasi `CreateCompilationJob` API berdasarkan apakah target Anda adalah perangkat atau platform.

------
#### [ 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
       }
   }
   ```

   Anda dapat secara opsional menentukan versi kerangka kerja yang Anda gunakan dengan [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)bidang jika Anda menggunakan PyTorch kerangka kerja untuk melatih model Anda dan perangkat target Anda adalah `ml_* ` target.

   ```
   {
       "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
       }
   }
   ```

**Catatan:**  
Jika Anda menyimpan model Anda dengan menggunakan PyTorch versi 2.0 atau yang lebih baru, `DataInputConfig` bidang ini opsional. SageMaker AI Neo mendapatkan konfigurasi input dari file definisi model yang Anda buat PyTorch. Untuk informasi selengkapnya tentang cara membuat file definisi, lihat [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) bagian di bawah *Menyimpan Model untuk SageMaker AI Neo*.
Bidang API ini hanya didukung untuk 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
       }
   }
   ```

------
**catatan**  
Untuk operasi `OutputConfig` API, operasi `TargetPlatform` API `TargetDevice` dan API saling eksklusif. Anda harus memilih salah satu dari dua opsi.

   Untuk menemukan contoh string JSON `DataInputConfig` tergantung pada kerangka kerja, lihat [Apa bentuk data input yang diharapkan Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-errors-preventing).

   Untuk informasi selengkapnya tentang menyiapkan konfigurasi, lihat operasi [InputConfig[OutputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html), dan [TargetPlatform](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TargetPlatform.html)API dalam referensi SageMaker API.

1. Setelah Anda mengkonfigurasi file JSON, jalankan perintah berikut untuk membuat pekerjaan kompilasi:

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

1. Jelaskan pekerjaan kompilasi dengan menjalankan perintah berikut:

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

1. Hentikan pekerjaan kompilasi dengan menjalankan perintah berikut:

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

1. Buat daftar pekerjaan kompilasi dengan menjalankan perintah berikut:

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

# Kompilasi Model (Amazon SageMaker AI Console)
<a name="neo-job-compilation-console"></a>

Anda dapat membuat pekerjaan kompilasi Amazon SageMaker Neo di konsol Amazon SageMaker AI.

1. Di konsol **Amazon SageMaker AI**, pilih **Pekerjaan kompilasi**, lalu pilih **Buat pekerjaan kompilasi**.  
![\[Buat pekerjaan kompilasi.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/8-create-compilation-job.png)

1. Pada halaman **Create compilation job**, di bawah **Job name**, masukkan nama. Kemudian pilih **peran IAM**.  
![\[Buat halaman pekerjaan kompilasi.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/9-create-compilation-job-config.png)

1. Jika Anda tidak memiliki peran IAM, pilih **Buat peran baru**.  
![\[Buat lokasi peran IAM.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/10a-create-iam-role.png)

1. Pada halaman **Create an IAM role**, pilih **bucket Any S3, lalu** pilih **Create** role.  
![\[Buat halaman peran IAM.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/10-create-iam-role.png)

1. 

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

   Dalam bagian **Konfigurasi input**, masukkan path lengkap URI bucket Amazon S3 yang berisi artefak model Anda di bidang input **Lokasi artefak model**. Artefak model Anda harus dalam format file tarball terkompresi (). `.tar.gz` 

   Untuk bidang **konfigurasi input Data**, masukkan string JSON yang menentukan bentuk data input.

   Untuk **kerangka pembelajaran mesin**, pilih kerangka kerja pilihan Anda.

![\[Halaman konfigurasi masukan.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/neo-create-compilation-job-input-config.png)


   Untuk menemukan contoh string JSON dari bentuk data input tergantung pada kerangka kerja, lihat [Apa bentuk data input yang diharapkan Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

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

   Instruksi serupa berlaku untuk menyusun PyTorch model. Namun, jika Anda berlatih dengan PyTorch dan mencoba mengkompilasi model untuk `ml_*` (kecuali`ml_inf`) target, Anda dapat secara opsional menentukan versi yang PyTorch Anda gunakan.

![\[Contoh bagian konfigurasi Input menunjukkan di mana untuk memilih versi Framework.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/compile_console_pytorch.png)


   Untuk menemukan contoh string JSON dari bentuk data input tergantung pada kerangka kerja, lihat [Apa bentuk data input yang diharapkan Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

**Catatan**  
Jika Anda menyimpan model Anda dengan menggunakan PyTorch versi 2.0 atau yang lebih baru, **bidang konfigurasi input data** adalah opsional. SageMaker Neo mendapatkan konfigurasi input dari file definisi model yang Anda buat dengan PyTorch. Untuk informasi selengkapnya tentang cara membuat file definisi, lihat [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) bagian di bawah *Menyimpan Model untuk SageMaker AI Neo*.
Saat mengompilasi `ml_*` instance menggunakan PyTorch framework, gunakan bidang **opsi Compiler** di **Output Configuration** untuk memberikan tipe data (`dtype`) yang benar dari input model. Default diatur ke `"float32"`. 

![\[Contoh bagian Konfigurasi Output.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/neo_compilation_console_pytorch_compiler_options.png)


**Awas**  
 Jika Anda menentukan jalur URI bucket Amazon S3 yang mengarah ke `.pth` file, Anda akan menerima kesalahan berikut setelah memulai kompilasi: `ClientError: InputConfiguration: Unable to untar input model.Please confirm the model is a tar.gz file` 

------

1.  Pergi ke bagian **konfigurasi Output**. Pilih di mana Anda ingin menerapkan model Anda. Anda dapat menerapkan model Anda ke **perangkat Target** atau **platform Target**. Perangkat target termasuk perangkat cloud dan edge. Platform target mengacu pada OS, arsitektur, dan akselerator tertentu yang Anda inginkan agar model Anda berjalan. 

    Untuk **lokasi Output S3**, masukkan path ke bucket S3 tempat Anda ingin menyimpan model. Anda secara opsional dapat menambahkan opsi kompiler dalam format JSON di bawah bagian Opsi **kompiler**.   
![\[Halaman konfigurasi keluaran.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/neo-console-output-config.png)

1. Periksa status pekerjaan kompilasi saat dimulai. Status pekerjaan ini dapat ditemukan di bagian atas halaman **Pekerjaan Kompilasi**, seperti yang ditunjukkan pada gambar berikut. Anda juga dapat memeriksa statusnya di kolom **Status**.  
![\[Status pekerjaan kompilasi.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/12-run-model-compilation.png)

1. Periksa status pekerjaan kompilasi setelah selesai. Anda dapat memeriksa status di kolom **Status** seperti yang ditunjukkan pada gambar berikut.  
![\[Status pekerjaan kompilasi.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/neo/12a-completed-model-compilation.png)

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

 Anda dapat menggunakan [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 di [Amazon SageMaker AI SDK for Python untuk](https://sagemaker.readthedocs.io/en/stable/) mengkompilasi model terlatih dan mengoptimalkannya untuk perangkat keras target tertentu. API harus dipanggil pada objek estimator yang digunakan selama pelatihan model. 

**catatan**  
Anda harus mengatur variabel `MMS_DEFAULT_RESPONSE_TIMEOUT` lingkungan `500` saat mengkompilasi model dengan MXNet atau PyTorch. Variabel lingkungan tidak diperlukan untuk TensorFlow. 

 Berikut ini adalah contoh bagaimana Anda dapat mengkompilasi model menggunakan `trained_model_estimator` objek: 

```
# 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'})
```

Kode mengkompilasi model, menyimpan model yang dioptimalkan di`output_path`, dan membuat model SageMaker AI yang dapat digunakan ke titik akhir. 