Ketika Anda menerapkan beberapa model yang memerlukan lingkungan runtime berbeda, atau ketika Anda perlu meningkatkan efisiensi inferensi model dan mengontrol alokasi sumber daya, Anda dapat menggunakan Model Service Mesh (ModelMesh) untuk membuat runtime penyajian model kustom. Konfigurasi yang disesuaikan dari runtime ini memastikan bahwa setiap model berjalan di lingkungan yang paling sesuai, membantu meningkatkan kualitas layanan, mengurangi biaya, serta menyederhanakan operasi dan pemeliharaan model kompleks. Topik ini menjelaskan cara menggunakan ModelMesh Serving untuk menyesuaikan runtime penyajian model.
Prasyarat
Sebuah klaster Container Service for Kubernetes (ACK) telah ditambahkan ke instance Service Mesh (ASM) Anda, dan instance ASM Anda adalah versi 1.18.0.134 atau lebih baru.
Deskripsi fitur
Secara default, ModelMesh terintegrasi dengan runtime penyajian model berikut:
Model server | Dikembangkan oleh | Kerangka kerja yang berlaku | Manfaat |
Triton Inference Server | NVIDIA | TensorFlow, PyTorch, TensorRT, dan ONNX | Server model ini cocok untuk layanan inferensi berperforma tinggi, skalabel, dan latensi rendah serta menyediakan alat untuk manajemen dan pemantauan. |
MLServer | Seldon | SKLearn, XGBoost, dan LightGBM | Server model ini menyediakan API dan kerangka kerja terpadu dan mendukung beberapa kerangka kerja serta fitur canggih. |
OpenVINO Model Server | Intel | OpenVINO dan ONNX | Server model ini menggunakan teknologi akselerasi perangkat keras Intel dan mendukung beberapa kerangka kerja. |
TorchServe | PyTorch | PyTorch (termasuk mode eager) | TorchServe adalah server model ringan dan skalabel yang dikembangkan oleh PyTorch. |
Jika server model sebelumnya tidak dapat memenuhi kebutuhan spesifik Anda—misalnya, Anda perlu memproses logika kustom untuk inferensi atau kerangka kerja yang diperlukan oleh model Anda tidak didukung oleh server model sebelumnya—Anda dapat membuat runtime penyajian kustom untuk memenuhi kebutuhan tersebut.
Langkah 1: Buat runtime penyajian kustom
ServingRuntime dengan ruang lingkup namespace atau ClusterServingRuntime dengan ruang lingkup klaster mendefinisikan template untuk pod yang dapat menyajikan satu atau lebih format model tertentu. Setiap ServingRuntime atau ClusterServingRuntime mencakup informasi utama seperti gambar kontainer runtime dan daftar format model yang didukung. Konfigurasi tambahan untuk runtime dapat diteruskan melalui variabel lingkungan di bidang spec.
CustomResourceDefinitions (CRD) ServingRuntime memberikan fleksibilitas dan kemampuan ekstensibilitas yang lebih baik, memungkinkan Anda menyesuaikan runtime yang dapat digunakan kembali tanpa memodifikasi kode pengontrol ModelMesh atau sumber daya lain di namespace pengontrol. Dengan demikian, Anda dapat dengan mudah membangun runtime kustom untuk mendukung kerangka kerja Anda.
Untuk membuat runtime penyajian kustom, Anda harus membangun gambar kontainer baru dengan dukungan untuk kerangka kerja yang diinginkan dan kemudian membuat sumber daya ServingRuntime yang menggunakan gambar tersebut. Proses ini menjadi lebih mudah jika kerangka kerja runtime yang diinginkan menggunakan pengikatan Python. Dalam hal ini, Anda dapat menggunakan titik ekstensi MLServer untuk menambahkan kerangka kerja tambahan. MLServer menyediakan antarmuka penyajian, dan ModelMesh Serving mengintegrasikan MLServer sebagai ServingRuntime.
Untuk membangun runtime penyajian kustom berbasis Python, ikuti langkah-langkah berikut:
Implementasikan kelas yang mewarisi dari kelas MLModel dari MLServer.
Anda dapat menambahkan implementasi kelas MLModel untuk memperluas MLServer. Dua fungsi utama,
load()danpredict(), terlibat dalam proses ini. Fungsiload()digunakan untuk memuat model Anda, sedangkan fungsipredict()digunakan untuk membuat prediksi. Untuk referensi lebih lanjut, lihat contoh implementasi kelas MLModel di dokumentasi MLServer.Kemas kelas model dan dependensinya ke dalam gambar kontainer.
Setelah kelas model diimplementasikan, Anda perlu mengemas dependensinya, termasuk MLServer, ke dalam gambar yang didukung sebagai sumber daya ServingRuntime. MLServer menyediakan bantuan untuk membangun gambar menggunakan perintah
mlserver build. Untuk informasi lebih lanjut, lihat Membangun Gambar Kustom.Buat sumber daya ServingRuntime baru dengan menggunakan gambar tersebut.
Buat sumber daya ServingRuntime baru dengan menggunakan konten berikut dan arahkan ke gambar yang Anda buat:
Bidang
Deskripsi
{{CUSTOM-RUNTIME-NAME}}Nama runtime, seperti my-model-server-0.x.
{{MODEL-FORMAT-NAMES}}Daftar format model yang didukung oleh runtime, seperti my-model. Misalnya, ketika Anda menerapkan model format my-model, ModelMesh akan memeriksa format model terhadap daftar ini untuk menentukan apakah runtime ini cocok untuk model tersebut.
{{CUSTOM-IMAGE-NAME}}Gambar yang dibuat di Langkah 2.
Jalankan perintah berikut untuk membuat sumber daya ServingRuntime:
kubectl apply -f ${Nama file YAML}.yamlSetelah Anda membuat sumber daya ServingRuntime, runtime kustom baru akan tersedia di penerapan ModelMesh Anda.
Langkah 2: Terapkan model
Untuk menerapkan model menggunakan runtime yang baru dibuat, Anda harus membuat sumber daya InferenceService untuk menyajikan model. Sumber daya ini merupakan antarmuka utama yang digunakan oleh KServe dan ModelMesh untuk mengelola model, mewakili endpoint logis model untuk menyajikan inferensi.
Buat sumber daya InferenceService untuk menyajikan model menggunakan konten berikut:
Dalam file YAML, sumber daya InferenceService menamai model
my-model-sampledan mendeklarasikan format modelnyamy-model, yang sesuai dengan format runtime kustom yang dibuat pada langkah sebelumnya. Bidang opsionalruntimejuga diteruskan, secara eksplisit memberi tahu ModelMesh untuk menggunakan runtime my-model-server-0.x dalam menerapkan model ini. Bidangstoragemenentukan lokasi model. Dalam hal ini, instance localMinIO yang diterapkan menggunakan panduan quickstart ModelMesh Serving digunakan.Jalankan perintah berikut untuk menerapkan sumber daya InferenceService:
kubectl apply -f ${Nama file YAML}.yaml