Mempersiapkan Model untuk Kompilasi - Amazon SageMaker

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

Mempersiapkan Model untuk Kompilasi

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.

Bentuk data input apa yang diharapkan SageMaker Neo?

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:

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

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

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 bagian di bawah Menyimpan Model untuk SageMaker Neo.

  • Anda sedang mengkompilasi model Anda untuk instance cloud. Untuk informasi selengkapnya tentang jenis instance yang didukung SageMaker Neo, lihatJenis dan Kerangka Instance yang Didukung.

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

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

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 halaman SageMaker Neo. Untuk daftar target instans SageMaker Neo cloud yang didukung, lihat Jenis dan Kerangka Instance yang Didukung halaman SageMaker Neo.

Nama dan bentuk data input tidak diperlukan.

Menyimpan Model untuk SageMaker Neo

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

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 denganmodel.save("<model-name>", save_format="h5").

  2. 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 menggunakanmodel.save(<path>, save_format='tf'). Format ini cocok untuk pelatihan, tetapi tidak cocok untuk inferensi.

Model MXNet harus disimpan sebagai *-symbol.json file simbol tunggal 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 selengkapnya tentang model hibridisasi, lihat dokumentasi hibridisasi MXNet.

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 model harus disimpan sebagai file definisi (.ptatau.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 SageMaker saat Anda mengkompilasi model.

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

Untuk informasi selengkapnya tentang torch.jit.trace metode ini, lihat TORCH.JIT.TRACE di dokumentasi. PyTorch

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 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 SDK)