Menerapkan logika preprocessing ke dalam model MLdalam satu titik akhir menggunakan pipeline inferensi di Amazon SageMaker - AWS Prescriptive Guidance

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

Menerapkan logika preprocessing ke dalam model MLdalam satu titik akhir menggunakan pipeline inferensi di Amazon SageMaker

Mohan Gowda Purushothama, Gabriel Rodriguez Garcia, dan Mateusz Zaremba, Amazon Web Services

Ringkasan

Pola ini menjelaskan cara menerapkan beberapa objek model pipeline dalam satu titik akhir dengan menggunakan pipeline inferensi di Amazon. SageMaker Objek model pipeline mewakili tahapan alur kerja machine learning (ML) yang berbeda, seperti preprocessing, inferensi model, dan postprocessing. Untuk mengilustrasikan penerapan objek model pipeline yang terhubung secara serial, pola ini menunjukkan kepada Anda cara menerapkan wadah Scikit-learn pra-pemrosesan dan model regresi berdasarkan algoritme pembelajar linier yang ada di dalamnya. SageMaker Penerapan di-host di belakang satu titik akhir di. SageMaker

catatan

Penerapan dalam pola ini menggunakan tipe instance ml.m4.2xlarge. Sebaiknya gunakan jenis instans yang sesuai dengan persyaratan ukuran data dan kompleksitas alur kerja Anda. Untuk informasi selengkapnya, lihat SageMaker Harga Amazon. Pola ini menggunakan gambar Docker bawaan untuk Scikit-learn, tetapi Anda dapat menggunakan wadah Docker Anda sendiri dan mengintegrasikannya ke dalam alur kerja Anda.

Prasyarat dan batasan

Prasyarat

Versi produk

Arsitektur

Tumpukan teknologi target

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon SageMaker

  • SageMaker Studio Amazon

  • Amazon Simple Storage Service (Amazon S3)

  • Titik akhir inferensi waktu nyata untuk Amazon SageMaker

Arsitektur target

Diagram berikut menunjukkan arsitektur untuk penyebaran objek model SageMaker pipa Amazon.

Arsitektur untuk penyebaran objek model SageMaker pipa

Diagram menunjukkan alur kerja berikut:

  1. SageMaker Notebook menyebarkan model pipa.

  2. Ember S3 menyimpan artefak model.

  3. Amazon ECR mendapatkan gambar wadah sumber dari bucket S3.

Alat

Alat AWS

  • Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.

  • Amazon SageMaker adalah layanan ML terkelola yang membantu Anda membuat dan melatih model ML, lalu menerapkannya ke lingkungan host yang siap produksi.

  • Amazon SageMaker Studio adalah lingkungan pengembangan terintegrasi (IDE) berbasis web untuk ML yang memungkinkan Anda membuat, melatih, men-debug, menerapkan, dan memantau model ML Anda.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

Kode

Kode untuk pola ini tersedia di GitHub Inference Pipeline dengan repositori Scikit-learn dan Linear Learner.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan dataset untuk tugas regresi Anda.

Buka buku catatan di Amazon SageMaker Studio.

Untuk mengimpor semua pustaka yang diperlukan dan menginisialisasi lingkungan kerja Anda, gunakan kode contoh berikut di buku catatan Anda:

import sagemaker from sagemaker import get_execution_role sagemaker_session = sagemaker.Session() # Get a SageMaker-compatible role used by this Notebook Instance. role = get_execution_role() # S3 prefix bucket = sagemaker_session.default_bucket() prefix = "Scikit-LinearLearner-pipeline-abalone-example"

Untuk mengunduh kumpulan data sampel, tambahkan kode berikut ke buku catatan Anda:

! mkdir abalone_data ! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data
catatan

Contoh dalam pola ini menggunakan Abalone Data Set dari UCI Machine Learning Repository.

Ilmuwan data

Unggah kumpulan data ke bucket S3.

Di buku catatan tempat Anda menyiapkan kumpulan data sebelumnya, tambahkan kode berikut untuk mengunggah data sampel ke bucket S3:

WORK_DIRECTORY = "abalone_data" train_input = sagemaker_session.upload_data( path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"), bucket=bucket, key_prefix="{}/{}".format(prefix, "train"), )
Ilmuwan data
TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan skrip preprocessor.py.

  1. Salin logika preprocessing dari file Python di GitHub repositori sklearn_abalone_featurizer.py, dan kemudian paste kode ke file Python terpisah yang disebut. sklearn_abalone_featurizer.py Anda dapat memodifikasi kode agar sesuai dengan dataset kustom dan alur kerja kustom Anda.

  2. Simpan sklearn_abalone_featurizer.py file di direktori root proyek Anda (yaitu, di lokasi yang sama di mana Anda menjalankan SageMaker buku catatan Anda).

Ilmuwan data

Buat objek SKLearn preprocessor.

Untuk membuat objek SKLearn preprocessor (disebut SKLearn Estimator) yang dapat Anda masukkan ke dalam pipeline inferensi akhir, jalankan kode berikut di buku catatan Anda: SageMaker

from sagemaker.sklearn.estimator import SKLearn FRAMEWORK_VERSION = "0.23-1" script_path = "sklearn_abalone_featurizer.py" sklearn_preprocessor = SKLearn( entry_point=script_path, role=role, framework_version=FRAMEWORK_VERSION, instance_type="ml.c4.xlarge", sagemaker_session=sagemaker_session, ) sklearn_preprocessor.fit({"train": train_input})
Ilmuwan data

Uji inferensi preprocessor.

Untuk mengonfirmasi bahwa preprosesor Anda didefinisikan dengan benar, luncurkan pekerjaan transformasi batch dengan memasukkan kode berikut di SageMaker buku catatan Anda:

# Define a SKLearn Transformer from the trained SKLearn Estimator transformer = sklearn_preprocessor.transformer( instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv" ) # Preprocess training input transformer.transform(train_input, content_type="text/csv") print("Waiting for transform job: " + transformer.latest_transform_job.job_name) transformer.wait() preprocessed_train = transformer.output_path
TugasDeskripsiKeterampilan yang dibutuhkan

Buat objek model.

Untuk membuat objek model berdasarkan algoritme pembelajar linier, masukkan kode berikut di SageMaker buku catatan Anda:

import boto3 from sagemaker.image_uris import retrieve ll_image = retrieve("linear-learner", boto3.Session().region_name) s3_ll_output_key_prefix = "ll_training_output" s3_ll_output_location = "s3://{}/{}/{}/{}".format( bucket, prefix, s3_ll_output_key_prefix, "ll_model" ) ll_estimator = sagemaker.estimator.Estimator( ll_image, role, instance_count=1, instance_type="ml.m4.2xlarge", volume_size=20, max_run=3600, input_mode="File", output_path=s3_ll_output_location, sagemaker_session=sagemaker_session, ) ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32) ll_train_data = sagemaker.inputs.TrainingInput( preprocessed_train, distribution="FullyReplicated", content_type="text/csv", s3_data_type="S3Prefix", ) data_channels = {"train": ll_train_data} ll_estimator.fit(inputs=data_channels, logs=True)

Kode sebelumnya mengambil image Amazon ECR Docker yang relevan dari Amazon ECR Registry publik untuk model, membuat objek estimator, dan kemudian menggunakan objek tersebut untuk melatih model regresi.

Ilmuwan data
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan model pipa.

Untuk membuat objek model pipeline (yaitu objek preprocessor) dan menyebarkan objek, masukkan kode berikut di buku catatan Anda SageMaker :

from sagemaker.model import Model from sagemaker.pipeline import PipelineModel import boto3 from time import gmtime, strftime timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime()) scikit_learn_inferencee_model = sklearn_preprocessor.create_model() linear_learner_model = ll_estimator.create_model() model_name = "inference-pipeline-" + timestamp_prefix endpoint_name = "inference-pipeline-ep-" + timestamp_prefix sm_model = PipelineModel( name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model] ) sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)
catatan

Anda dapat menyesuaikan jenis instance yang digunakan dalam objek model untuk memenuhi kebutuhan Anda.

Ilmuwan data

Uji inferensi.

Untuk mengonfirmasi bahwa titik akhir berfungsi dengan benar, jalankan contoh kode inferensi berikut di buku catatan Anda SageMaker :

from sagemaker.predictor import Predictor from sagemaker.serializers import CSVSerializer payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155" actual_rings = 10 predictor = Predictor( endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer() ) print(predictor.predict(payload))
Ilmuwan data

Sumber daya terkait