Optimalkan pekerjaan inferensi Anda menggunakan inferensi batch dinamis dengan TorchServe di Amazon SageMaker

Node Sumber: 1884601

Dalam pembelajaran mendalam, pemrosesan batch mengacu pada memasukkan banyak input ke dalam model. Meskipun penting selama pelatihan, mengelola biaya dan mengoptimalkan throughput selama waktu inferensi juga bisa sangat membantu. Akselerator perangkat keras dioptimalkan untuk paralelisme, dan pengelompokan membantu memenuhi kapasitas komputasi dan sering kali menghasilkan throughput yang lebih tinggi.

Batching dapat membantu dalam beberapa skenario selama penerapan model dalam produksi. Di sini kami secara luas mengkategorikannya menjadi dua kasus penggunaan:

  • Aplikasi real-time di mana beberapa permintaan inferensi diterima dari klien yang berbeda dan secara dinamis dikumpulkan dan diumpankan ke model penyajian. Latensi biasanya penting dalam kasus penggunaan ini.
  • Aplikasi offline di mana beberapa masukan atau permintaan dikumpulkan di sisi klien dan dikirim ke model penayangan. Throughput yang lebih tinggi sering menjadi tujuan untuk kasus penggunaan ini, yang membantu mengelola biaya. Contoh kasus penggunaan meliputi analisis video dan evaluasi model.

Amazon SageMaker menyediakan dua opsi populer untuk pekerjaan inferensi Anda. Untuk aplikasi real-time, SageMaker Hosting menggunakan TorchServe sebagai pustaka layanan backend yang menangani pengelompokan dinamis dari permintaan yang diterima. Untuk aplikasi offline, Anda dapat menggunakan tugas transformasi batch SageMaker. Dalam postingan ini, kami membahas contoh dari setiap opsi untuk membantu Anda memulai.

Karena TorchServe secara native terintegrasi dengan SageMaker melalui Perangkat inferensi SageMaker PyTorch, Anda dapat dengan mudah menerapkan model PyTorch ke TorchServe menggunakan SageMaker Hosting. Mungkin juga ada saatnya Anda perlu menyesuaikan lingkungan Anda lebih lanjut menggunakan gambar Docker khusus. Dalam postingan ini, pertama-tama kami menunjukkan cara menerapkan titik akhir waktu nyata menggunakan perangkat inferensi SageMaker PyTorch asli dan mengonfigurasi ukuran batch untuk mengoptimalkan throughput. Dalam contoh kedua, kami mendemonstrasikan cara menggunakan image Docker kustom untuk mengonfigurasi konfigurasi TorchServe lanjutan yang tidak tersedia sebagai variabel lingkungan untuk mengoptimalkan pekerjaan inferensi batch Anda.

Praktik terbaik untuk inferensi batch

Pemrosesan batch dapat meningkatkan throughput dan mengoptimalkan sumber daya Anda karena membantu menyelesaikan lebih banyak inferensi dalam jumlah waktu tertentu dengan mengorbankan latensi. Untuk mengoptimalkan penerapan model untuk throughput yang lebih tinggi, pedoman umumnya adalah meningkatkan ukuran batch hingga throughput menurun. Ini paling sering sesuai dengan aplikasi offline, di mana beberapa input digabungkan (seperti bingkai video, gambar, atau teks) untuk mendapatkan output prediksi.

Untuk aplikasi real-time, latensi seringkali menjadi perhatian utama. Ada trade-off antara throughput yang lebih tinggi dan peningkatan ukuran batch dan latensi; Anda mungkin perlu menyesuaikan seperlunya untuk memenuhi SLA latensi Anda. Dalam hal praktik terbaik di cloud, biaya per sejumlah kesimpulan tertentu merupakan pedoman yang berguna dalam membuat keputusan tepat yang memenuhi kebutuhan bisnis Anda. Salah satu faktor yang berkontribusi dalam mengelola biaya adalah memilih akselerator yang tepat. Untuk informasi lebih lanjut, lihat Pilih akselerator AI dan kompilasi model terbaik untuk inferensi visi komputer dengan Amazon SageMaker.

Pengelompokan dinamis TorchServe di SageMaker

Layanan obor adalah library PyTorch asli untuk menyajikan model dalam produksi dalam skala besar. Ini adalah pengembangan bersama dari Facebook dan AWS. TorchServe memungkinkan Anda untuk memantau, menambahkan metrik khusus, mendukung banyak model, meningkatkan dan menurunkan jumlah pekerja melalui API manajemen yang aman, dan memberikan titik akhir inferensi dan penjelasan.

Untuk mendukung pemrosesan batch, TorchServe menyediakan fitur batching dinamis. Ini mengumpulkan permintaan yang diterima dalam jangka waktu tertentu, mengelompokkannya bersama-sama, dan mengirimkan kumpulan untuk inferensi. Permintaan yang diterima diproses melalui penangan di TorchServe. TorchServe memiliki beberapa penangan default, dan Anda dapat membuat penangan khusus jika kasus penggunaan Anda tidak tercakup. Saat menggunakan penangan khusus, pastikan bahwa logika inferensi batch telah diterapkan di penangan. Contoh handler kustom dengan dukungan inferensi batch tersedia di GitHub.

Anda dapat mengonfigurasi pengelompokan dinamis menggunakan dua setelan, batch_size dan max_batch_delay, baik melalui variabel lingkungan di SageMaker atau melalui config.properties file di TorchServe (jika menggunakan wadah khusus). TorchServe menggunakan salah satu pengaturan yang didahulukan, baik ukuran kumpulan maksimum (batch_size) atau jangka waktu tertentu untuk menunggu kumpulan permintaan selesai max_batch_delay.

Dengan integrasi TorchServe dengan SageMaker, Anda sekarang dapat menerapkan model PyTorch secara native di SageMaker, tempat Anda dapat menentukan model PyTorch SageMaker. Anda dapat menambahkan pemuatan model kustom, inferensi, serta logika prapemrosesan dan pascapemrosesan dalam skrip yang diteruskan sebagai titik masuk ke SageMaker PyTorch (lihat kode contoh berikut). Alternatifnya, Anda dapat menggunakan wadah khusus untuk menerapkan model Anda. Untuk informasi lebih lanjut, lihat Server Model PyTorch SageMaker.

Anda dapat mengatur ukuran batch untuk model PyTorch di SageMaker melalui variabel lingkungan. Jika Anda memilih untuk menggunakan penampung khusus, Anda dapat menggabungkannya pengaturan in config.properties dengan model Anda saat mengemas model Anda di TorchServe. Cuplikan kode berikut menunjukkan contoh cara menyetel ukuran batch menggunakan variabel lingkungan dan cara menerapkan model PyTorch di SageMaker:

from SageMaker.pytorch.model import PyTorchModel env_variables_dict = { "SAGEMAKER_TS_BATCH_SIZE": "3", "SAGEMAKER_TS_MAX_BATCH_DELAY": "100000"
} pytorch_model = PyTorchModel( model_data=model_artifact, role=role, source_dir="code", framework_version='1.9', entry_point="inference.py", env=env_variables_dict
) predictor = pytorch_model.deploy(initial_instance_count=1, instance_type="ml.c5.2xlarge", serializer=SageMaker.serializers.JSONSerializer(), deserializer=SageMaker.deserializers.BytesDeserializer())

Dalam cuplikan kode, model_artifact mengacu pada semua file yang diperlukan untuk memuat kembali model terlatih, yang diarsipkan dalam file .tar dan dimasukkan ke dalam file .tar Layanan Penyimpanan Sederhana Amazon (Amazon S3) ember. Inference.py mirip dengan handler kustom TorchServe; ini memiliki beberapa fungsi yang dapat Anda timpa untuk mengakomodasi inisialisasi model, prapemrosesan dan pascapemrosesan permintaan yang diterima, dan logika inferensi.

Berikut ini buku catatan menunjukkan contoh lengkap penerapan model Hugging Face BERT.

Jika Anda memerlukan penampung khusus, Anda dapat membuat gambar penampung khusus dan mendorongnya ke Registry Kontainer Elastis Amazon (Amazon ECR) repositori. Artefak model dalam hal ini dapat berupa file .mar TorchServe yang menggabungkan artefak model bersama dengan handler. Kami mendemonstrasikan ini di bagian selanjutnya, di mana kami menggunakan tugas transformasi batch SageMaker.

Tugas transformasi batch SageMaker

Untuk kasus penggunaan offline saat permintaan dikumpulkan dari sumber data seperti kumpulan data, SageMaker menyediakan pekerjaan transformasi batch. Tugas ini memungkinkan Anda membaca data dari bucket S3 dan menulis hasilnya ke bucket S3 target. Untuk informasi lebih lanjut, lihat Gunakan Transformasi Batch untuk Mendapatkan Inferensi dari Kumpulan Data Besar. Contoh lengkap inferensi batch menggunakan tugas transformasi batch dapat ditemukan berikut ini buku catatan, di mana kami menggunakan model terjemahan mesin dari kompetisi FLORES. Dalam contoh ini, kami menunjukkan cara menggunakan wadah khusus untuk menilai model kami menggunakan SageMaker. Menggunakan wadah inferensi khusus memungkinkan Anda menyesuaikan lebih lanjut konfigurasi TorchServe Anda. Dalam contoh ini, kami ingin mengubah dan menonaktifkan decoding JSON, yang dapat kami lakukan melalui TorchServe config.properties file.

Saat menggunakan penangan khusus untuk TorchServe, kita perlu memastikan bahwa penangan mengimplementasikan logika inferensi batch. Setiap penangan dapat memiliki fungsi khusus untuk melakukan preprocessing, inference, dan postprocessing. Contoh handler kustom dengan dukungan inferensi batch tersedia di GitHub.

Kami menggunakan wadah khusus kami untuk menggabungkan artefak model dengan penangan seperti yang kami lakukan di TorchServe (membuat file .mar). Kami juga memerlukan titik masuk ke wadah Docker yang memulai TorchServe dengan ukuran batch dan set decoding JSON config.properties. Kami menunjukkan ini dalam contoh buku catatan.

Tugas transformasi batch SageMaker memerlukan akses ke file input dari bucket S3, yang membagi file input menjadi batch mini dan mengirimkannya untuk inferensi. Pertimbangkan hal-hal berikut saat mengonfigurasi tugas transformasi batch:

  • Tempatkan file input (seperti kumpulan data) di bucket S3 dan atur sebagai sumber data di pengaturan pekerjaan.
  • Tetapkan bucket S3 untuk menyimpan hasil tugas transformasi batch.
  • set Strategi Batch untuk MultiRecord dan SplitType untuk Line jika Anda memerlukan pekerjaan transformasi batch untuk membuat batch mini dari file input. Jika tidak dapat secara otomatis membagi kumpulan data menjadi kumpulan mini, Anda dapat membaginya menjadi kumpulan mini dengan meletakkan setiap kumpulan dalam file input terpisah, ditempatkan di keranjang S3 sumber data.
  • Pastikan ukuran batch sesuai dengan memori. SageMaker biasanya menangani ini secara otomatis; namun, saat membagi kumpulan secara manual, ini perlu disetel berdasarkan memori.

Kode berikut adalah contoh untuk tugas transformasi batch:

s3_bucket_name= 'SageMaker-us-west-2-XXXXXXXX'
batch_input = f"s3://{s3_bucket_name}/folder/jobename_TorchServe_SageMaker/"
batch_output = f"s3://{s3_bucket_name}/folder/jobname_TorchServe_SageMaker_output/" batch_job_name = 'job-batch' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
batch_job_name request = { "ModelClientConfig": { "InvocationsTimeoutInSeconds": 3600, "InvocationsMaxRetries": 1, }, "TransformJobName": batch_job_name, "ModelName": model_name, "MaxConcurrentTransforms":1, "BatchStrategy": "MultiRecord", "TransformOutput": {"S3OutputPath": batch_output, "AssembleWith": "Line", "Accept": "application/json"}, "TransformInput": { "DataSource": { "S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": batch_input} }, "SplitType" : "Line", "ContentType": "application/json", }, "TransformResources": {"InstanceType": "ml.p2.xlarge", "InstanceCount": 1},
}

Saat kami menggunakan pengaturan sebelumnya dan meluncurkan tugas transformasi kami, ia membaca file input dari bucket sumber S3 secara berkelompok dan mengirimkannya untuk inferensi. Hasilnya ditulis kembali ke bucket S3 yang ditentukan ke output.

Cuplikan kode berikut menunjukkan cara membuat dan meluncurkan tugas menggunakan setelan sebelumnya:

sm.create_transform_job(**request) while True: response = sm.describe_transform_job(TransformJobName=batch_job_name) status = response["TransformJobStatus"] if status == "Completed": print("Transform job ended with status: " + status) break if status == "Failed": message = response["FailureReason"] print("Transform failed with the following error: {}".format(message)) raise Exception("Transform job failed") print("Transform job is still in status: " + status) time.sleep(30)

Kesimpulan

Dalam postingan ini, kami meninjau dua mode yang ditawarkan SageMaker untuk inferensi online dan offline. Yang pertama menggunakan pengelompokan dinamis yang disediakan di TorchServe untuk mengelompokkan permintaan dari banyak klien. Yang terakhir menggunakan tugas transformasi SageMaker untuk mengelompokkan permintaan dari file input dalam bucket S3 dan menjalankan inferensi.

Kami juga menunjukkan cara menyajikan model di SageMaker menggunakan gambar wadah alat inferensi PyTorch SageMaker asli, dan cara menggunakan wadah khusus untuk kasus penggunaan yang memerlukan pengaturan konfigurasi TorchServe lanjutan.

Karena TorchServe terus berevolusi untuk memenuhi kebutuhan komunitas PyTorch, fitur-fitur baru diintegrasikan ke dalam SageMaker untuk memberikan cara yang berkinerja baik untuk melayani model dalam produksi. Untuk informasi lebih lanjut, lihat Repo GitHub TorchServe dan Contoh SageMaker.


Tentang Penulis

Phi Nguyen adalah arsitek solusi di AWS yang membantu pelanggan dalam perjalanan cloud mereka dengan fokus khusus pada data lake, analitik, teknologi semantik, dan pembelajaran mesin. Di waktu luangnya, Anda dapat menemukannya bersepeda ke tempat kerja, melatih tim sepak bola putranya, atau menikmati jalan-jalan alam bersama keluarganya.

Nikhil Kulkarni adalah pengembang perangkat lunak dengan AWS Machine Learning, berfokus untuk membuat beban kerja pembelajaran mesin lebih berperforma baik di cloud dan merupakan co-creator AWS Deep Learning Containers untuk pelatihan dan inferensi. Dia bersemangat tentang Sistem Pembelajaran Jauh terdistribusi. Di luar pekerjaan, dia senang membaca buku, mengutak-atik gitar, dan membuat pizza.

Hamid Shojanazeri adalah Insinyur Mitra di Pytorch yang mengerjakan pengoptimalan dan penyajian model kinerja tinggi OSS. Hamid meraih gelar PhD dalam Computer vision dan bekerja sebagai peneliti di laboratorium multimedia di Australia, Malaysia dan memimpin NLP di Opus.ai. Dia suka menemukan solusi yang lebih sederhana untuk masalah sulit dan merupakan penggemar seni di waktu luangnya.

Geeta Chauhan memimpin Rekayasa Mitra AI di Meta AI dengan keahlian dalam membangun platform terdistribusi skala besar yang tangguh, anti-rapuh, untuk startup dan Fortune 500s. Timnya bekerja dengan mitra strategis, pemimpin pembelajaran mesin di seluruh industri, dan semua penyedia layanan cloud utama untuk membangun dan meluncurkan layanan dan pengalaman produk AI baru; dan mengambil model PyTorch dari penelitian hingga produksi.. Dia adalah pemenang Women in IT – Silicon Valley – CTO tahun 2019, Pembicara Terhormat ACM dan pemimpin pemikiran tentang berbagai topik mulai dari Etika dalam AI, Pembelajaran Mendalam, Blockchain, IoT. Dia bersemangat mempromosikan penggunaan AI untuk Kebaikan.

Sumber: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

Stempel Waktu:

Lebih dari Blog Pembelajaran Mesin AWS