Inferensi ML hemat biaya dengan model multi-kerangka kerja di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Inferensi ML hemat biaya dengan model multi-framework di Amazon SageMaker 

Pembelajaran mesin (ML) telah terbukti menjadi salah satu aplikasi teknologi yang paling sukses dan tersebar luas, memengaruhi berbagai industri dan memengaruhi miliaran pengguna setiap hari. Dengan adopsi ML yang cepat ini ke setiap industri, perusahaan menghadapi tantangan dalam mendukung prediksi latensi rendah dan dengan ketersediaan tinggi sambil memaksimalkan pemanfaatan sumber daya dan mengurangi biaya terkait. Karena setiap kerangka kerja ML memiliki dependensinya sendiri, dan langkah penerapan untuk setiap kerangka kerja berbeda, penerapan model yang dibangun dalam kerangka kerja berbeda dalam produksi dan pengelolaan setiap titik akhir menjadi semakin kompleks.

Amazon SageMaker multi-container endpoints (MCEs) memungkinkan kami untuk mengelompokkan model pada kerangka kerja yang berbeda dan menerapkannya ke host yang sama, membuat satu titik akhir. Anda dapat menyediakan wadah untuk berbagai kerangka kerja yang Anda gunakan untuk membangun model, dan SageMaker mengambil semua wadah ini dan menempatkannya di belakang satu titik akhir. Misalnya, Anda dapat memiliki model PyTorch dan TensorFlow yang dimuat di dua titik akhir khusus yang melayani kasus penggunaan yang sama atau sama sekali berbeda, dan kedua model ini memiliki lalu lintas masuk yang terputus-putus yang tidak menggunakan sumber daya hingga batasnya. Dalam skenario seperti itu, Anda dapat menggabungkan keduanya menggunakan wadah menjadi satu titik akhir menggunakan MCE, meningkatkan pemanfaatan sumber daya sekaligus mengurangi biaya yang dikeluarkan untuk memiliki kedua model yang melayani dari titik akhir yang berbeda.

Titik akhir multi-penampung memberikan solusi yang skalabel dan hemat biaya untuk menerapkan hingga 15 model yang dibangun di atas kerangka kerja ML yang berbeda, server model, dan algoritme yang melayani kasus penggunaan yang sama atau berbeda, artinya Anda dapat memiliki model yang dibangun di atas kerangka kerja ML yang beragam atau perantara langkah di semua wadah dan model ini. Semua model ini dapat diakses secara individual melalui pemanggilan langsung atau dijahit ke dalam pipa menggunakan pemanggilan serial, di mana output dari satu model adalah input untuk model berikutnya.

Dalam postingan ini, kami membahas cara melakukan inferensi ML yang hemat biaya dengan model multi-framework di SageMaker.

Pola pemanggilan MCE

Pemanggilan langsung SageMaker MCE berguna dalam kasus di mana Anda telah memukul model yang tidak terkait ke titik akhir MCE atau Anda menjalankan pengujian A/B antara model di belakang titik akhir MCE untuk mengukur kinerjanya. Anda dapat memanggil container tertentu secara langsung dalam panggilan API dan mendapatkan prediksi dari model tersebut.

Dengan pemanggilan serial, Anda dapat menyatukan 2–15 wadah, dan keluaran dari satu wadah menjadi masukan wadah berikutnya secara berurutan. Ini adalah kasus penggunaan yang ideal jika, misalnya, Anda memiliki pipeline prediksi multi-langkah di mana model Scikit-learn digunakan untuk prediksi menengah dan hasilnya diumpankan ke model TensorFlow untuk inferensi akhir. Alih-alih menerapkannya sebagai titik akhir yang berbeda dan aplikasi atau pekerjaan lain yang mengaturnya dan membuat beberapa panggilan API, Anda dapat menerapkannya sebagai SageMaker MCE, mengabstraksi logika dan menyiapkannya untuk pemanggilan serial, tempat SageMaker mengelola transfer data antara satu wadah ke yang lain secara otomatis dan memancarkan output dari wadah terakhir ke klien yang membuat permintaan API.

Pemanggilan serial SageMaker MCE pada dasarnya berbeda dari saluran inferensi serial SageMaker (detail lebih lanjut di bagian di bawah). Pipeline inferensi serial lebih ditargetkan untuk mengatur alur kerja ML yang kompleks seperti pra-pemrosesan data, membangun ansambel model, menerapkan pemeriksaan bersyarat untuk menentukan model mana yang akan dipanggil, atau pasca-pemrosesan prediksi, yang melibatkan logika bisnis sebelum prediksi dikirim ke aplikasi hilir . Sebaliknya, pemanggilan serial MCE dirancang untuk menggabungkan 2–14 model ke dalam pipeline untuk inferensi, setiap model mengambil prediksi model sebelumnya sebagai input.

Semua container dalam MCE selalu dalam service dan memory, jadi tidak ada cold start saat memanggil endpoint. MCE juga meningkatkan pemanfaatan titik akhir dan meningkatkan biaya karena model diterapkan di belakang satu titik akhir dan berbagi instans komputasi yang mendasarinya, alih-alih setiap model menempati sumber daya komputasi individual.

Mari kita lihat beberapa kasus penggunaan dan lihat bagaimana Anda dapat menggunakan MCE SageMaker untuk mengoptimalkan inferensi ML.

Gunakan kasus untuk MCE SageMaker

Misalkan Anda memiliki dua model untuk klasifikasi sentimen, satu untuk bahasa Inggris dan lainnya untuk bahasa Jerman, dan model ini melayani geografi yang berbeda dengan lalu lintas yang masuk pada waktu yang berbeda dalam sehari. Alih-alih menjalankan dua titik akhir 24/7, Anda dapat menerapkan keduanya ke dalam satu titik akhir menggunakan MCE dan mengaksesnya menggunakan pemanggilan langsung, sehingga mengoptimalkan pemanfaatan sumber daya dan biaya Anda. Lihat kode berikut:

englishModel = {
   'Image': container1,
   'ContainerHostname': englishModel }; ...
 
germanModel = {
   'Image': container2,
   'ContainerHostname': germanModel }; ...
 
sm.create_model(
   InferenceExecutionConfig = {'Mode': 'Direct'},
   Containers = [englishModel, germanModel], ...)
sm.create_endpoint_config(EndpointConfigName = ‘my-mce-epc’,
    ProductionVariants=[{
        'InstanceType':        ‘ml.m4.xlarge’,
        'InitialInstanceCount': 2,
        'InitialVariantWeight': 1,
        'ModelName':            ‘my-multi-model-name’,
        'VariantName':          'AllTraffic'}])
sm.create_endpoint(EndpointName = ‘my-mce-endpoint’, 
                  EndpointConfigName = ‘my-mce-epc’)

Dalam contoh ini, kami memiliki dua model (englishModel dan germanModel), dan kami mendefinisikan wadah di SageMaker create_model membangun dan mendefinisikan InferenceExecutionConfig sebagai 'Langsung'. Sekarang kita dapat memanggil titik akhir untuk inferensi dan mendefinisikan TargetContainerHostname sebagai baik englishModel or germanModel tergantung pada klien yang membuat panggilan API:

sm.invoke_endpoint(        
   EndpointName = endpoint_name,
   TargetContainerHostname = englishModel,
   Body = body, ...)

Anda juga dapat menggunakan pemanggilan langsung dalam MCE untuk menjalankan pengujian A/B guna membandingkan kinerja antar model.

Diagram berikut menggambarkan arsitektur kami.

Demikian pula, dalam kasus penggunaan ML lainnya, ketika model terlatih digunakan untuk memproses permintaan, model menerima data dalam format yang perlu diproses sebelumnya (misalnya, diunggulkan) sebelum dapat diteruskan ke algoritme untuk inferensi. Ketika algoritma ML dirantai bersama, output dari satu model berfungsi sebagai input untuk model berikutnya sebelum mencapai hasil akhir. Dalam hal ini, Anda dapat membangun saluran pipa serial SageMaker MCE, di mana wadah berbicara satu sama lain dalam urutan yang ditentukan dalam create_model membangun alih-alih Anda menggunakan masing-masing model ke titik akhir yang berbeda dan menulis logika independen untuk memfasilitasi aliran data antara semua model ini dan panggilan API. Diagram berikut menggambarkan arsitektur ini.

Inferensi ML hemat biaya dengan model multi-kerangka kerja di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Untuk kasus penggunaan ini, kami menggunakan kode berikut:

sm_model = PipelineModel(name=model_name, role=aws_role, models=[Processing-1, Processing-2, Inference-1, Inference-2]) 

predictor = sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge")                  
response = runtime.invoke_endpoint( 
EndpointName=predictor.endpoint,                                
    Body=body,...)

Dalam contoh ini, kami memiliki dua wadah pemrosesan (Processing-1 dan Processing-2) untuk pemrosesan fitur dan transformasi data, dan dua wadah inferensi (Inference-1 dan Inference-2) untuk menjalankan prediksi model ML pada data yang telah diproses sebelumnya. Itu PipelineModel instance memungkinkan Anda untuk menentukan saluran inferensi yang terdiri dari urutan linier dari empat wadah yang memproses permintaan untuk inferensi pada data. Kontainer ditempatkan bersama pada instans yang sama, memungkinkan Anda menjalankan inferensi dengan latensi rendah.

Skala titik akhir multi-model untuk sejumlah besar model

Manfaat titik akhir multi-model SageMaker meningkat berdasarkan skala konsolidasi model. Anda dapat melihat penghematan biaya saat menghosting dua model dengan satu titik akhir, dan untuk kasus penggunaan dengan ratusan atau ribuan model, penghematannya jauh lebih besar.

Menskalakan titik akhir MCE juga mudah menggunakan SageMakerVariantInvocationsPerInstance metrik yang telah ditentukan sebelumnya, yang memberikan jumlah rata-rata kali per menit bahwa setiap instance untuk titik akhir model dipanggil untuk mendefinisikan a TargetScaling aturan. SageMaker secara dinamis menyesuaikan jumlah instans yang disediakan untuk model sebagai respons terhadap perubahan beban kerja Anda. Saat beban kerja meningkat, penskalaan otomatis menghadirkan lebih banyak instans secara online dan memuat model dan container target untuk terus melayani permintaan. Saat beban kerja berkurang, penskalaan otomatis menghapus instance yang tidak perlu dan menurunkan container model sehingga container tidak menghabiskan sumber daya, dan Anda tidak membayar untuk instance yang tidak digunakan. Waktu untuk menyelesaikan permintaan pertama terhadap model tertentu mengalami latensi tambahan (disebut cold start) untuk mengunduh model dari Layanan Penyimpanan Sederhana Amazon (Amazon S3) dan memuatnya ke dalam memori. Panggilan berikutnya selesai tanpa overhead tambahan karena model sudah dimuat. Lihat kode berikut:

# AutoScaling client
asg = boto3.client('application-autoscaling')

# Resource type is variant and the unique identifier is the resource ID.
resource_id=f"endpoint/{endpoint_name}/variant/AllTraffic"

# scaling configuration
response = asg.register_scalable_target(
    ServiceNamespace='sagemaker', #
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount', 
    MinCapacity=1,
    MaxCapacity=4
)
#Target Scaling
response = asg.put_scaling_policy(
    PolicyName=f'Request-ScalingPolicy-{endpoint_name}',
    ServiceNamespace='sagemaker',
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount',
    PolicyType='TargetTrackingScaling',
    TargetTrackingScalingPolicyConfiguration={
        'TargetValue': 70.0, # Threshold
        'PredefinedMetricSpecification': {
            'PredefinedMetricType': 'SageMakerVariantInvocationsPerInstance',
        },
        'ScaleInCooldown': 300, # duration until scale in
        'ScaleOutCooldown': 60 # duration between scale out
    }
)

Mengikuti contoh konfigurasi kebijakan sebelumnya, kami menggunakan SageMakerVariantInvocationsPerInstance metrik yang telah ditentukan sebelumnya untuk menyesuaikan jumlah instance varian sehingga setiap instance memiliki InvocationsPerInstance metrik 70.

Kami juga dapat menskalakan MCE SageMaker berdasarkan metrik khusus kami sendiri, seperti CPUUtilization, MemoryUtilization, GPUUtilization, GPUMemoryUtilization, atau DiskUtilization, untuk meningkatkan atau menurunkan jumlah instance berdasarkan pemanfaatan sumber daya tertentu. Untuk informasi lebih lanjut, lihat Secara Otomatis Skala Model SageMaker Amazon.

Sebaiknya model di setiap container menunjukkan persyaratan komputasi dan latensi yang serupa pada setiap permintaan inferensi, karena jika lalu lintas ke MCE bergeser dari model pemanfaatan CPU tinggi ke model pemanfaatan CPU rendah, tetapi volume panggilan keseluruhan tetap sama, titik akhir tidak diskalakan dan mungkin tidak ada cukup instance untuk menangani semua permintaan ke model penggunaan CPU yang tinggi.

MCE aman

Untuk MCE dengan pemanggilan langsung, beberapa container dihosting dalam satu instance dengan berbagi memori dan volume penyimpanan. Sangat penting untuk mengamankan container, mempertahankan pemetaan permintaan yang benar ke container target, dan memberi pengguna akses yang benar ke container target. Anda dapat membatasi invoke_endpoint akses ke satu set wadah terbatas di dalam MCE menggunakan sagemaker:TargetContainerHostname Identitas AWS dan Manajemen Akses (IAM) kondisi kunci. SageMaker menggunakan Peran IAM untuk memberikan kebijakan berbasis identitas IAM yang Anda gunakan untuk menentukan tindakan dan sumber daya yang diizinkan atau ditolak dan kondisi di mana tindakan diizinkan atau ditolak. Kebijakan berikut menunjukkan cara membatasi panggilan ke penampung tertentu dalam titik akhir:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetContainerHostname": ["customIps*", "common*"]
                }
            }
        }
    ]
}

Pantau titik akhir multi-model menggunakan metrik Amazon CloudWatch

Untuk melakukan pertukaran harga dan kinerja, Anda dapat menguji titik akhir multi-model dengan model dan lalu lintas representatif dari aplikasi Anda sendiri. SageMaker menyediakan metrik tambahan di amazoncloudwatch untuk titik akhir multi-model sehingga Anda dapat menentukan penggunaan titik akhir dan tingkat pencapaian cache serta mengoptimalkan titik akhir Anda. Metriknya adalah sebagai berikut:

  • ModelMemuatWaktuTunggu – Interval waktu permintaan doa menunggu model target diunduh atau dimuat untuk melakukan inferensi.
  • ModelWaktu Bongkar – Interval waktu yang diperlukan untuk membongkar model melalui wadah UnloadModel Panggilan API.
  • Waktu Pengunduhan Model – Interval waktu yang diperlukan untuk mengunduh model dari Amazon S3.
  • Waktu Pemuatan Model – Interval waktu yang diperlukan untuk memuat model melalui wadah LoadModel Panggilan API.
  • ModelCacheHit - Jumlah InvokeEndpoint permintaan dikirim ke titik akhir di mana model sudah dimuat. Mengambil Average statistik menunjukkan rasio permintaan di mana model sudah dimuat.
  • DimuatModelCount – Jumlah model yang dimuat dalam wadah di titik akhir. Metrik ini dipancarkan per instance. Itu Average statistik dengan periode 1 menit memberi tahu Anda jumlah rata-rata model yang dimuat per instance, dan Sum statistik memberi tahu Anda jumlah total model yang dimuat di semua instance di titik akhir. Model yang dilacak metrik ini belum tentu unik karena Anda dapat memuat model di beberapa penampung di titik akhir.

Ada juga beberapa metrik lain yang digunakan oleh setiap container yang berjalan pada sebuah instance, seperti Invocations menunjukkan jumlah InvokeEndpoint permintaan dikirim ke wadah di dalam titik akhir, ContainerLatency memberikan waktu yang dibutuhkan titik akhir untuk wadah target atau semua wadah dalam pemanggilan serial untuk merespons seperti yang dilihat dari SageMaker, dan CPUUtilization dan MemoryUtilizaton menunjukkan unit CPU dan persentase memori.

Kesimpulan

Dalam postingan tersebut, kami membahas bagaimana titik akhir multi-kontainer SageMaker dapat membantu dalam mengoptimalkan biaya dan pemanfaatan sumber daya. Contoh kapan harus menggunakan MCE termasuk, namun tidak terbatas pada, berikut ini:

  • Menghosting model di berbagai kerangka kerja (seperti TensorFlow, PyTorch, dan Scikit-learn) yang tidak memiliki lalu lintas yang cukup untuk memenuhi kapasitas penuh sebuah instans
  • Menghosting model dari kerangka kerja yang sama dengan algoritme ML yang berbeda (seperti rekomendasi, perkiraan, atau klasifikasi) dan fungsi pengendali
  • Perbandingan arsitektur serupa yang berjalan pada versi kerangka kerja yang berbeda (seperti TensorFlow 1.x vs. TensorFlow 2.x) untuk skenario seperti pengujian A/B

MCE SageMaker mendukung penerapan hingga 15 kontainer pada titik akhir waktu nyata dan menjalankannya secara independen untuk inferensi latensi rendah dan penghematan biaya. Model dapat sepenuhnya heterogen, dengan tumpukan penyajian independennya sendiri. Anda dapat memanggil container ini secara berurutan atau independen untuk setiap permintaan. Menghosting beberapa model dengan aman, dari kerangka kerja yang berbeda, pada satu instans dapat menghemat biaya hingga 90% dibandingkan dengan model hosting di titik akhir instans tunggal khusus.


Tentang penulis

Inferensi ML hemat biaya dengan model multi-kerangka kerja di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Dhawal Patel adalah Arsitek Pembelajaran Mesin Utama di AWS. Dia telah bekerja dengan organisasi mulai dari perusahaan besar hingga perusahaan rintisan menengah pada masalah yang terkait dengan komputasi terdistribusi dan kecerdasan buatan. Dia berfokus pada pembelajaran mendalam, termasuk NLP dan domain visi komputer. Dia membantu pelanggan mencapai inferensi model performa tinggi di Amazon SageMaker.

Inferensi ML hemat biaya dengan model multi-kerangka kerja di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Vikram Elango adalah Arsitek Solusi Spesialis AI/ML Senior di Amazon Web Services, yang berbasis di Virginia, AS. Vikram membantu pelanggan industri keuangan dan asuransi global dengan kepemimpinan desain dan pemikiran untuk membangun dan menerapkan aplikasi pembelajaran mesin dalam skala besar. Dia saat ini fokus pada pemrosesan bahasa alami, AI yang bertanggung jawab, pengoptimalan inferensi, dan penskalaan ML di seluruh perusahaan. Di waktu senggangnya, ia senang bepergian, mendaki gunung, memasak, dan berkemah bersama keluarganya.

Inferensi ML hemat biaya dengan model multi-kerangka kerja di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Saurabh Trikande adalah Manajer Produk Senior untuk Inferensi Amazon SageMaker. Dia bersemangat bekerja dengan pelanggan dan termotivasi oleh tujuan mendemokratisasi pembelajaran mesin. Dia berfokus pada tantangan inti yang terkait dengan penerapan aplikasi ML yang kompleks, model ML multi-penyewa, pengoptimalan biaya, dan membuat penerapan model pembelajaran mendalam lebih mudah diakses. Di waktu luangnya, Saurabh menikmati hiking, belajar tentang teknologi inovatif, mengikuti TechCrunch, dan menghabiskan waktu bersama keluarganya.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS