MLOps untuk model Python menggunakan Azure Machine Learning

Azure Blob Storage
Azure Container Registry
Azure DevOps
Azure Machine Learning
Azure Pipelines

Arsitektur referensi ini menunjukkan cara menerapkan integrasi berkelanjutan (CI), pengiriman berkelanjutan (CD), dan alur pelatihan ulang untuk aplikasi AI menggunakan Azure DevOps dan Azure Machine Learning. Solusinya dibangun di atas himpunan data diabetes scikit-learn tetapi dapat dengan mudah diadaptasi untuk skenario AI apa pun dan sistem pembuatan populer lainnya seperti Jenkins atau Travis.

Penerapan referensi untuk arsitektur ini tersedia di GitHub.

Sistem

Diagram arsitektur Pembelajaran Mesin DevOps.

Unduh file Visio arsitektur ini.

Alur kerja

Arsitektur ini terdiri dari layanan berikut:

Azure Pipelines. Sistem build dan pengujian ini didasarkan pada Azure DevOps dan digunakan untuk alur build dan rilis. Azure Pipelines memutus alur ini menjadi langkah-langkah logis yang disebut tugas. Misalnya, tugas Azure CLI memudahkan untuk bekerja dengan sumber daya Azure.

Azure Machine Learning adalah layanan cloud untuk pelatihan, penilaian, penyebaran, dan pengelolaan model pembelajaran mesin dalam skala besar. Arsitektur ini menggunakan Python SDK Azure Machine Learning untuk membuat ruang kerja, sumber daya komputasi, alur pembelajaran mesin, dan gambar penskoran. Ruang kerja Azure Machine Learning menyediakan ruang untuk bereksperimen, melatih, dan menyebarkan model pembelajaran mesin.

Azure Machine Learning Azure Compute adalah sebuah kluster mesin virtual sesuai permintaan dengan penyekalaan otomatis dan opsi node GPU dan CPU. Pekerjaan pelatihan dijalankan pada kluster ini.

Alur Azure Machine Learning menyediakan alur kerja pembelajaran mesin yang dapat digunakan kembali yang dapat digunakan kembali di seluruh skenario. Pelatihan, evaluasi model, pendaftaran model, dan pembuatan gambar terjadi dalam langkah-langkah yang berbeda dalam alur ini untuk kasus penggunaan ini. Alur diterbitkan atau diperbarui pada akhir fase build dan dipicu saat data baru tiba.

Azure Blob Storage. Kontainer blob digunakan untuk menyimpan log dari layanan penskoran. Dalam kasus ini, baik data input dan prediksi model dikumpulkan. Setelah beberapa transformasi, log ini dapat digunakan untuk pelatihan ulang model.

Azure Container Registry. Skrip Python penskoran dikemas sebagai gambar Docker dan diberi versi dalam registri.

Azure Container Instances. Sebagai bagian dari alur rilis, lingkungan QA dan pentahapan ditiru dengan menyebarkan gambar layanan web penskoran ke Container Instances, yang menyediakan cara mudah tanpa server untuk menjalankan sebuah kontainer.

Azure Kubernetes Service. Setelah gambar layanan web penskoran diuji secara menyeluruh di lingkungan QA, gambar tersebut disebarkan ke lingkungan produksi pada kluster Kubernetes terkelola.

Azure Application Insights. Layanan pemantauan ini digunakan untuk mendeteksi anomali performa.

Alur MLOps

Solusi ini mendemonstrasikan automasi menyeluruh dari berbagai tahapan proyek AI menggunakan alat yang sudah tidak asing lagi bagi para teknisi perangkat lunak. Masalah pembelajaran mesin sederhana untuk tetap fokus pada alur DevOps. Solusinya menggunakan himpunan data diabetes scikit-learn dan membangun model regresi linier ridge untuk memprediksi kemungkinan diabetes.

Solusi ini didasarkan pada tiga alur berikut:

  • Alur build. Membangun kode dan menjalankan serangkaian pengujian.
  • Alur pelatihan ulang. Melatih ulang model sesuai jadwal atau saat data baru tersedia.
  • Alur rilis. Mengoperasikan gambar penskoran dan mempromosikannya dengan aman di lingkungan yang berbeda.

Bagian selanjutnya menjelaskan masing-masing alur ini.

Alur build

Alur CI dipicu setiap kali kode diperiksa. Ini menerbitkan alur Azure Machine Learning yang diperbarui setelah membangun kode dan menjalankan serangkaian pengujian. Alur build terdiri dari tugas-tugas berikut:

  • Kualitas kode. Pengujian ini memastikan bahwa kode sesuai dengan standar tim.

  • Pengujian unit. Pengujian ini memastikan kode berfungsi, memiliki cakupan kode yang memadai, dan stabil.

  • Pengujian data. Pengujian ini memverifikasi bahwa sampel data sesuai dengan skema dan distribusi yang diharapkan. Sesuaikan pengujian ini untuk kasus penggunaan lain dan jalankan sebagai alur kesehatan data terpisah yang dipicu saat data baru tiba. Misalnya, pindahkan tugas pengujian data ke alur penyerapan data sehingga Anda dapat mengujinya lebih awal.

Catatan

Anda harus mempertimbangkan untuk mengaktifkan praktik DevOps untuk data yang digunakan guna melatih model pembelajaran mesin, tetapi ini tidak tercakup dalam artikel ini. Untuk informasi selengkapnya tentang arsitektur dan praktik terbaik untuk CI/CD dari alur penyerapan data, lihat DevOps untuk alur penyerapan data.

Tugas satu kali berikut terjadi saat menyiapkan infrastruktur untuk Azure Machine Learning dan Python SDK:

  • Membuat ruang kerja yang menghosting semua sumber daya terkait Azure Machine Learning.
  • Membuat sumber daya komputasi yang menjalankan pekerjaan pelatihan.
  • Membuat alur pembelajaran mesin dengan skrip pelatihan yang diperbarui.
  • Terbitkan alur pembelajaran mesin sebagai titik akhir REST untuk mengatur alur kerja pelatihan. Bagian selanjutnya menjelaskan langkah ini.

Alur pelatihan ulang

Alur pembelajaran mesin mengatur proses pelatihan ulang model secara asinkron. Pelatihan ulang dapat dipicu pada jadwal atau saat data baru tersedia dengan memanggil titik akhir REST alur yang diterbitkan dari langkah sebelumnya.

Alur ini mencakup langkah-langkah berikut:

  • Melatih model. Skrip Python pelatihan dijalankan pada sumber daya Azure Machine Learning Azure Compute untuk mendapatkan file model baru yang disimpan dalam riwayat eksekusi. Karena pelatihan adalah tugas komputasi yang paling intensif dalam proyek AI, solusinya menggunakan Azure Machine Learning Azure Compute.

  • Mengevaluasi model. Pengujian evaluasi sederhana membandingkan model baru dengan model yang ada. Hanya ketika model baru lebih baik, model tersebut dipromosikan. Jika tidak, model tidak terdaftar dan alur dibatalkan.

  • Mendaftarkan model. Model yang dilatih ulang terdaftar di registri Azure Pembelajaran Mesin Model. Layanan ini menyediakan kontrol versi untuk model bersama dengan tag metadata sehingga dapat dengan mudah direproduksi.

Alur rilis

Alur ini menunjukkan cara mengoperasionalkan gambar penskoran dan mempromosikannya dengan aman di berbagai lingkungan. Alur ini dibagi menjadi dua lingkungan, QA dan produksi:

Lingkungan QA

  • Pemicu Artefak Model. Alur rilis dipicu setiap kali artefak baru tersedia. Model baru yang terdaftar ke Azure Machine Learning Model Management diperlakukan sebagai artefak rilis. Dalam hal ini, alur dipicu untuk setiap model baru terdaftar.

  • Membuat gambar penskoran. Model terdaftar dikemas bersama dengan skrip penskoran dan dependensi Python (file Conda YAML) ke dalam gambar Docker operasionalisasi. Gambar secara otomatis diberi versi melalui Azure Container Registry.

  • Menyebarkan pada Container Instances. Layanan ini digunakan untuk membuat lingkungan non-produksi. Gambar penskoran juga disebarkan di sini, dan ini sebagian besar digunakan untuk pengujian. Container Instances menyediakan cara mudah dan cepat untuk menguji gambar Docker.

  • Menguji layanan web. Pengujian API sederhana memastikan gambar berhasil disebarkan.

Lingkungan produksi

  • Menyebarkan pada Azure Kubernetes Service. Layanan ini digunakan untuk menyebarkan gambar penskoran sebagai layanan web dalam skala besar di lingkungan produksi.

  • Menguji layanan web. Pengujian API sederhana memastikan gambar berhasil disebarkan.

Pertimbangan

Pertimbangan ini mengimplementasikan pilar Azure Well-Architected Framework, yang merupakan serangkaian tenet panduan yang dapat digunakan untuk meningkatkan kualitas beban kerja. Untuk informasi selengkapnya, lihat Microsoft Azure Well-Architected Framework.

Skalabilitas

Alur build di Azure DevOps dapat diskalakan untuk aplikasi dalam berbagai ukuran. Alur build memiliki batas waktu maksimum yang bervariasi tergantung pada agen tempat alurr build dijalankan. Build dapat berjalan selamanya pada agen yang dihosting sendiri (agen privat). Untuk agen yang dihosting Microsoft untuk proyek publik, build dapat berjalan selama enam jam. Untuk proyek privat, batasnya adalah 30 menit.

Untuk menggunakan batas waktu maksimum, atur properti berikut di file YAML Azure Pipelines Anda:

jobs:
- job: <job_name>
  timeoutInMinutes: 0

Idealnya, selesaikan alur build Anda dengan cepat dan jalankan hanya pengujian unit dan subset pengujian lainnya. Ini memungkinkan Anda untuk memvalidasi perubahan dengan cepat dan memperbaikinya jika muncul masalah. Jalankan pengujian yang berjalan lama selama di luar jam kerja.

Alur rilis menerbitkan layanan web penskoran real time. Rilis ke lingkungan QA dilakukan dengan menggunakan Container Instances untuk kenyamanan, tetapi Anda dapat menggunakan kluster Kubernetes lain yang berjalan di lingkungan QA/pentahapan.

Skalakan lingkungan produksi sesuai dengan ukuran kluster Azure Kubernetes Service Anda. Ukuran kluster bergantung pada beban yang Anda harapkan untuk layanan web penskoran yang disebarkan. Untuk arsitektur penskoran real time, throughput adalah metrik pengoptimalan utama. Untuk skenario pembelajaran non-mendalam, CPU seharusnya cukup untuk menangani beban; namun, untuk beban kerja pembelajaran mendalam, saat kecepatan menjadi penyempitan, GPU umumnya memberikan performa yang lebih baik dibandingkan dengan CPU. Azure Kubernetes Service mendukung jenis node CPU dan GPU, itulah alasan mengapa solusi ini menggunakannya untuk penyebaran gambar. Untuk informasi selengkapnya, lihat GPU vs CPU untuk penyebaran model pembelajaran mendalam.

Tingkatkan atau turunkan skala alur pelatihan ulang bergantung pada jumlah node di sumber daya Azure Machine Learning Azure Compute Anda, dan gunakan opsi penyekalaan otomatis untuk mengelola kluster. Arsitektur ini menggunakan CPU. Untuk beban kerja pembelajaran mendalam, GPU adalah pilihan yang lebih baik dan didukung oleh Azure Machine Learning Azure Compute.

Manajemen

  • Memantau pekerjaan pelatihan ulang. Alur pembelajaran mesin mengatur pelatihan ulang di seluruh kluster komputer dan menyediakan cara mudah untuk memantaunya. Gunakan antarmuka pengguna Azure Machine Learning dan lihat di bagian alur untuk log. Atau, log ini juga ditulis ke blob dan dapat dibaca dari sana juga menggunakan alat seperti Azure Storage Explorer.

  • Pengelogan. Azure Machine Learning menyediakan cara mudah untuk mencatat di setiap langkah siklus hidup pembelajaran mesin. Log disimpan dalam kontainer blob. Untuk informasi selengkapnya, lihat Mengaktifkan pengelogan di Azure Machine Learning. Untuk pemantauan yang lebih beragam, konfigurasikan Application Insights untuk menggunakan log.

  • Keamanan. Semua rahasia dan info masuk disimpan di Azure Key Vault dan diakses di Azure Pipelines menggunakan grup variabel.

Pengoptimalan biaya

Optimalisasi biaya adalah tentang mencari cara untuk mengurangi pengeluaran yang tidak perlu dan meningkatkan efisiensi operasional. Untuk informasi selengkapnya, lihat Gambaran umum pilar pengoptimalan biaya.

Azure DevOps gratis untuk proyek sumber terbuka dan proyek kecil dengan maksimal lima pengguna. Untuk tim yang lebih besar, beli paket berdasarkan jumlah pengguna.

Azure Compute adalah driver biaya terbesar dalam arsitektur ini dan biayanya bervariasi tergantung pada kasus penggunaan. Arsitektur ini menggunakan Azure Machine Learning Azure Compute, tetapi opsi lain tersedia. Azure Machine Learning tidak menambahkan biaya tambahan apa pun selain biaya mesin virtual yang mendukung kluster komputasi Anda. Konfigurasikan kluster komputasi Anda agar memiliki minimal 0 node, sehingga saat tidak digunakan, kluster tersebut dapat diturunkan skalanya ke 0 node dan tidak dikenakan biaya apa pun. Biaya komputasi bergantung pada jenis node, jumlah node, dan mode provisi (prioritas rendah atau khusus). Anda dapat memperkirakan biaya untuk Pembelajaran Mesin dan layanan lainnya menggunakan kalkulator harga Azure.

Menyebarkan skenario ini

Untuk menyebarkan arsitektur referensi ini, ikuti langkah-langkah yang dijelaskan dalam panduan Memulai di repositori GitHub.

Kontributor

Artikel ini dikelola oleh Microsoft. Ini awalnya ditulis oleh kontributor berikut.

Penulis utama:

  • Praneet Singh Solanki | Insinyur Perangkat Lunak Senior

Langkah berikutnya