Jalankan model ML ansambel di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Jalankan model ML ansambel di Amazon SageMaker

Penerapan model dalam pembelajaran mesin (ML) menjadi semakin kompleks. Anda ingin menerapkan tidak hanya satu model ML tetapi kelompok besar model ML yang direpresentasikan sebagai alur kerja ensemble. Alur kerja ini terdiri dari beberapa model ML. Memproduksi model ML ini cukup menantang karena Anda harus mematuhi berbagai persyaratan kinerja dan latensi.

Amazon SageMaker mendukung ansambel instance tunggal dengan Server Inferensi Triton. Kemampuan ini memungkinkan Anda menjalankan ansambel model yang sesuai dengan satu instans. Di balik layar, SageMaker memanfaatkan Server Inferensi Triton untuk mengelola ansambel pada setiap instans di belakang titik akhir untuk memaksimalkan throughput dan pemanfaatan perangkat keras dengan latensi inferensi ultra-rendah (milidetik satu digit). Dengan Triton, Anda juga dapat memilih dari berbagai kerangka kerja ML yang didukung (termasuk TensorFlow, PyTorch, ONNX, XGBoost, dan NVIDIA TensorRT) dan backend infrastruktur, termasuk GPU, CPU, dan Inferensi AWS.

Dengan kemampuan ini di SageMaker, Anda dapat mengoptimalkan beban kerja Anda dengan menghindari latensi jaringan yang mahal dan menuai manfaat komputasi dan lokalitas data untuk saluran inferensi ensemble. Dalam posting ini, kami membahas manfaat menggunakan Server Inferensi Triton beserta pertimbangan apakah ini adalah opsi yang tepat untuk beban kerja Anda.

Ikhtisar solusi

Server Inferensi Triton dirancang untuk memungkinkan tim menerapkan, menjalankan, dan menskalakan model AI terlatih dari kerangka kerja apa pun pada infrastruktur berbasis GPU atau CPU. Selain itu, telah dioptimalkan untuk menawarkan inferensi berkinerja tinggi dalam skala besar dengan fitur seperti batching dinamis, proses bersamaan, konfigurasi model yang optimal, kemampuan model ensemble, dan dukungan untuk input streaming.

Beban kerja harus mempertimbangkan kemampuan yang diberikan Triton untuk memastikan model mereka dapat dilayani. Triton mendukung sejumlah kerangka kerja populer, termasuk TensorFlow, PyTorch, ONNX, XGBoost, dan NVIDIA TensorRT. Triton juga mendukung berbagai backend yang diperlukan agar algoritma dapat berjalan dengan baik. Anda harus memastikan bahwa model Anda didukung oleh backend ini dan jika backend tidak, Triton mengizinkan Anda untuk mengimplementasikan dan mengintegrasikannya sendiri. Anda juga harus memverifikasi bahwa versi algoritme Anda didukung serta memastikan bahwa artefak model dapat diterima oleh backend yang sesuai. Untuk memeriksa apakah algoritme khusus Anda didukung, lihat Backend Server Inferensi Triton untuk daftar backend yang didukung secara native yang dikelola oleh NVIDIA.

Mungkin ada beberapa skenario di mana model atau ansambel model Anda tidak akan berfungsi di Triton tanpa memerlukan lebih banyak usaha, seperti jika backend yang didukung secara native tidak ada untuk algoritme Anda. Ada beberapa pertimbangan lain yang perlu dipertimbangkan, seperti format payload mungkin tidak ideal, terutama jika ukuran payload Anda mungkin besar untuk permintaan Anda. Seperti biasa, Anda harus memvalidasi kinerja Anda setelah menerapkan beban kerja ini untuk memastikan bahwa harapan Anda terpenuhi.

Mari kita ambil model jaringan saraf klasifikasi gambar dan lihat bagaimana kita dapat mempercepat beban kerja kita. Dalam contoh ini, kami menggunakan backend NVIDIA DALI untuk mempercepat prapemrosesan kami dalam konteks ensemble kami.

Buat ansambel model Triton

Triton Inference Server menyederhanakan penerapan model AI dalam skala besar. Triton Inference Server hadir dengan solusi praktis yang menyederhanakan pembuatan pipeline prapemrosesan dan pascapemrosesan. Platform Triton Inference Server menyediakan ensemble scheduler, yang dapat Anda gunakan untuk membangun model ensemble pipelining yang berpartisipasi dalam proses inferensi sambil memastikan efisiensi dan mengoptimalkan throughput.

Triton Inference Server melayani model dari repositori model. Mari kita lihat tata letak repositori model untuk model ensemble yang berisi model prapemrosesan DALI, model V3 awal TensorFlow, dan konfigurasi ensemble model. Setiap subdirektori berisi informasi repositori untuk model yang sesuai. Itu config.pbtxt file menjelaskan konfigurasi model untuk model. Setiap direktori harus memiliki satu sub-folder numerik untuk setiap versi model dan dijalankan oleh backend tertentu yang didukung Triton.

Repositori Model NVIDIA Triton

NVIDIA DALI

Untuk posting ini, kami menggunakan NVIDIA Data Loading Library (DALI) sebagai model preprocessing dalam ansambel model kami. NVIDIA DALI adalah perpustakaan untuk memuat data dan pra-pemrosesan untuk mempercepat aplikasi pembelajaran mendalam. Ini menyediakan kumpulan blok bangunan yang dioptimalkan untuk memuat dan memproses data gambar, video, dan audio. Anda dapat menggunakannya sebagai pengganti drop-in portabel untuk pemuat data bawaan dan iterator data dalam kerangka kerja pembelajaran mendalam yang populer.

NVIDIA Dali

Kode berikut menunjukkan konfigurasi model untuk backend DALI:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

Model awal V3

Untuk posting ini, kami menunjukkan bagaimana DALI digunakan dalam ansambel model dengan Inception V3. Model pra-pelatihan Inception V3 TensorFlow disimpan dalam format GraphDef sebagai satu file bernama model.graphdef. itu config.pbtxt file memiliki informasi tentang nama model, platform, max_batch_size, dan kontrak input dan output. Kami merekomendasikan pengaturan max_batch_size konfigurasi kurang dari ukuran batch model V3 awal. File label memiliki label kelas untuk 1,000 kelas yang berbeda. Kami menyalin label model klasifikasi awal ke inception_graphdef direktori dalam repositori model. File labels berisi 1,000 label kelas dari IMAGEnet kumpulan data klasifikasi.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

ansambel triton

Kode berikut menunjukkan konfigurasi model model ensemble untuk preprocessing DALI dan klasifikasi gambar:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

Buat titik akhir SageMaker

Titik akhir SageMaker memungkinkan hosting waktu nyata di mana waktu respons milidetik diperlukan. SageMaker mengambil alih model manajemen hosting yang berat dan memiliki kemampuan untuk menskalakan secara otomatis. Selain itu, sejumlah kemampuan juga disediakan, termasuk menghosting beberapa varian model Anda, pengujian A/B model Anda, integrasi dengan amazoncloudwatch untuk mendapatkan observabilitas kinerja model, dan pemantauan penyimpangan model.

Mari buat model SageMaker dari artefak model yang kami unggah Layanan Penyimpanan Sederhana Amazon (Amazon S3).

Selanjutnya, kami juga menyediakan variabel lingkungan tambahan: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME, yang menentukan nama model yang akan dimuat oleh Triton. Nilai kunci ini harus cocok dengan nama folder dalam paket model yang diunggah ke Amazon S3. Variabel ini opsional jika Anda menggunakan model tunggal. Dalam hal model ansambel, kunci ini harus ditentukan agar Triton dapat memulai di SageMaker.

Selain itu, Anda dapat mengatur SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT dan SAGEMAKER_TRITON_THREAD_COUNT untuk mengoptimalkan jumlah thread.

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

Dengan model sebelumnya, kita membuat konfigurasi titik akhir di mana kita dapat menentukan jenis dan jumlah instance yang kita inginkan di titik akhir:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

Kami menggunakan konfigurasi titik akhir ini untuk membuat titik akhir SageMaker baru dan menunggu penerapan selesai. Status berubah menjadi InService ketika penyebaran berhasil.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

Muatan inferensi

Gambar payload input melewati pipa DALI preprocessing dan digunakan dalam ensemble scheduler yang disediakan oleh Triton Inference Server. Kami membangun muatan untuk diteruskan ke titik akhir inferensi:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

Inferensi ansambel

Saat kita menjalankan titik akhir, kita dapat menggunakan gambar sampel untuk melakukan permintaan inferensi menggunakan JSON sebagai format payload. Untuk format permintaan inferensi, Triton menggunakan protokol inferensi standar komunitas KFServing.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

Dengan binary+json format, kita harus menentukan panjang metadata permintaan di header untuk memungkinkan Triton mengurai muatan biner dengan benar. Ini dilakukan dengan menggunakan tajuk Tipe-Konten khusus application/vnd.sagemaker-triton.binary+json;json-header-size={}.

Ini berbeda dengan menggunakan Inference-Header-Content-Length header di server Triton mandiri karena header khusus tidak diizinkan di SageMaker.

Paket tritonclient menyediakan metode utilitas untuk menghasilkan payload tanpa harus mengetahui detail spesifikasinya. Kami menggunakan metode berikut untuk mengonversi permintaan inferensi kami ke dalam format biner, yang menyediakan latensi yang lebih rendah untuk inferensi. Lihat GitHub buku catatan untuk detail implementasi.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

Kesimpulan

Dalam posting ini, kami menunjukkan bagaimana Anda dapat memproduksi ansambel model yang berjalan pada satu instance di SageMaker. Pola desain ini dapat berguna untuk menggabungkan logika preprocessing dan postprocessing bersama dengan prediksi inferensi. SageMaker menggunakan Triton untuk menjalankan inferensi ensemble pada satu wadah pada instans yang mendukung semua kerangka kerja utama.

Untuk sampel lebih lanjut tentang ansambel Triton di SageMaker, lihat GitHub repo. Cobalah!


Tentang Penulis

Jalankan model ML ansambel di Amazon SageMaker PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.James Taman adalah Arsitek Solusi di Amazon Web Services. Dia bekerja dengan Amazon.com untuk merancang, membangun, dan menerapkan solusi teknologi di AWS, dan memiliki minat khusus pada AI dan pembelajaran mesin. Di waktu luangnya, ia senang mencari budaya baru, pengalaman baru, dan mengikuti perkembangan teknologi terkini.

Jalankan model ML ansambel 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 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.

Jalankan model ML ansambel 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