Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Siapkan 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 JSON format atau format daftar. Input yang diharapkan adalah kerangka kerja khusus.
Di bawah ini adalah bentuk input yang diharapkan SageMaker Neo:
Tentukan nama dan bentuk (NCHWformat) input data yang diharapkan menggunakan format kamus untuk model terlatih Anda. Perhatikan bahwa sementara artefak model Keras harus diunggah dalam format NHWC (saluran-terakhir), DataInputConfig harus ditentukan dalam NCHW format (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 (NCHWformat) 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 (NCHWformat) 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 (NHWCformat) 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 (NHWCformat) 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:
Ekspor ke
.h5
format denganmodel.save("<model-name>", save_format="h5")
.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.
MXNetmodel harus disimpan sebagai file simbol tunggal *-symbol.json
dan satu parameter*.params files
.
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 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 lebih lanjut tentang torch.jit.trace
metode ini, lihat TORCH. JIT. TRACE
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 SDK Python, lihat. Kompilasi Model (Amazon SageMakerSDK)