MLflow di Cloud
Pada artikel ini, saya akan berbicara tentang cara menghosting mlflow di cloud (AWS dan GCP), menjalankan eksperimen pembelajaran mesin, mencatat parameter, metrik, dan menyimpan model ke dalam registri model
Apa itu mlflow?
mlflow adalah platform sumber terbuka yang mengelola siklus pembelajaran mesin end-to-end. Fungsi utamanya adalah:
- Pelacakan Eksperimen: Mempertahankan semua eksperimen pembelajaran mesin dan kemampuan untuk menanyakannya
- Reproduksibilitas: Ini mengemas kode pembelajaran mesin dan mampu mereproduksi hasil tersebut di platform apa pun
- Penerapan: Kemampuan untuk menerapkan model ML di berbagai lingkungan (mis: AWS Sagemaker, GCP Cloud run, .. dll)
- Registri Model: Mempertahankan beberapa versi model dalam repositori terpusat
Kami dapat menjalankan mlflow di mesin lokal, tetapi menyimpannya di cloud memiliki kelebihan
- Kami dapat memanfaatkan penyimpanan cloud, daya komputasi, keamanan, dll
- Tampilan terpusat dari semua eksperimen dari setiap anggota tim
Kami memiliki 3 komponen utama berikut dalam mlflow:
- Dasbor: Ini adalah UI tempat kita dapat melihat daftar eksperimen, parameter model, metrik .. dll untuk setiap eksperimen
- Meta Store: Ini menggunakan database backend (MySql) untuk menyimpan semua percobaan, parameter, metrik .. dll
- Artifactory Store: Ini menggunakan ini untuk file besar, seperti model serial. Secara umum kami menggunakan sistem file terdistribusi seperti Amazon S3 atau GCP Cloud Storage.
- Buruh pelabuhan
- basis data MySql
- Sistem File Terdistribusi
Diagram arsitektur di atas menunjukkan semua layanan AWS yang kami perlukan dan bagaimana mereka berinteraksi untuk menghosting mlflow di AWS. Kami akan meluncurkan mlflow menggunakan AWS Fargate yang tanpa server.
Pertama, kita perlu membuat file docker, yang mengemas mlflow dan dependensinya. Kami mendefinisikan dependensi berikut di requirements.txt
File docker untuk instalasi mlflow dan menjalankan server
File buruh pelabuhan memiliki detail koneksi bucket dan database lainnya sebagai variabel, nilai-nilai ini akan dikonfigurasi sebagai variabel lingkungan dalam definisi tugas Fargate
Setelah kita memiliki dockerfile, jalankan perintah di bawah ini untuk membuat docker image
docker build -t mlflowtracker .
Sekarang, Kita perlu mendorong gambar buruh pelabuhan yang kita buat secara lokal ke registri kontainer di AWS.
# Login
aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
# Tag local docker image
docker tag <image_name> aws_account_id.dkr.ecr.region.amazonaws.com/repository_name:tag
# Push image
docker push aws_account_id.dkr.ecr.region.amazonaws.com/repository_name:tag
Selanjutnya kita membutuhkan MySql untuk mlflow untuk menyimpan informasi meta, yang akan kita buatkan instance MySql AWS RDS
Untuk langkah-langkah membuat MySql di AWS RDS, klik di sini
Kita perlu membuat bucket S3 untuk mlflow untuk menyimpan artefak model. Buka konsol aws, cari s3, berikan nama bucket dan pastikan Anda memblokir semua akses publik dan klik 'Buat Bucket”
Selanjutnya kita perlu membuat klaster AWS ECS dengan memilih fargate sebagai komputasi. Buka konsol aws dan cari layanan wadah elastis dan klik 'Buat Cluster'. Di halaman buat cluster, berikan nama cluster, pilih vpc dan subnet. Secara default opsi fargate akan dipilih.
Di ECS, tugas adalah entitas tingkat granular yang menjalankan gambar buruh pelabuhan, mirip dengan pod di kubernetes. Jadi, kita perlu membuat definisi tugas yang akan menggunakan gambar buruh pelabuhan yang telah kita unggah ke ECR. Di sini kita mendefinisikan nilai variabel lingkungan. Untuk membuat definisi tugas, buka Amazon Elastic Container Service >Definisi tugas > Buat Definisi Tugas Baru dan berikan nama tugas, uri gambar yang kami unggah ke ECR, port kontainer, dan variabel lingkungan
Selama pembuatan definisi tugas pilih peran ecsTaskExecution yang dibuat oleh AWS secara otomatis, pastikan Anda menambahkan kebijakan akses s3 sehingga dapat membaca dan menulis ke bucket s3
Setelah kita membuat definisi tugas, kita perlu membuat layanan yang menggunakan definisi tugas yang dibuat di atas. Saat membuat layanan, kami dapat memilih jumlah tugas minimum dan maksimum yang kami butuhkan (saya hanya memilih 1 tugas), sehingga dapat diskalakan secara otomatis. Kami memiliki opsi untuk membuat penyeimbang muatan selama langkah ini.
Untuk membuat layanan ECS, buka Amazon Elastic Container Service >clusters >cluster_name> Buat dan berikan nama layanan, pilih definisi tugas dan revisinya yang telah kita buat sebelumnya, masukkan jumlah tugas min dan maks, pilih vpc di bawah bagian jaringan, pilih aplikasi load balancer di bagian load balancer dan berikan nama, port listner, nama grup target
Setelah kami membuat layanan, itu memutar jumlah tugas yang diperlukan, kami dapat menggunakan url penyeimbang beban untuk meluncurkan dasbor mlflow.
Catatan: Penyeimbang beban menggunakan grup keamanan yang menentukan aturan jaringan masuk dan keluar, Anda perlu memodifikasi/menambahkan aturan, sehingga Anda dapat mengakses UI mlflow.
Sekarang setelah kami menghosting mlflow di AWS, mari jalankan eksperimen pembelajaran mesin dari lokal kami dengan menunjuk ke mlflow di cloud
Setelah menjalankan eksperimen, kita dapat melihat semua parameter, metrik, dan model dalam mlflow yang kita catat selama eksperimen
MLflow di GCP
Diagram arsitektur di atas menunjukkan layanan GCP yang kami perlukan dan bagaimana interaksinya untuk menghosting mlflow di GCP. Kami akan meluncurkan mlflow menggunakan GCP Cloudrun yang tanpa server.
Kita dapat menggunakan Dockerfile dan requirements.txt yang sama (Silakan rujuk bagian MLflow di AWS) kecuali bahwa kita perlu mengubah boto3 menjadi google-cloud-storage
Variabel di dalam Dockerfile untuk artifactory default, detail koneksi database akan dikonfigurasi sebagai variabel lingkungan di google cloudrun
Jalankan perintah berikut untuk membuat, memberi tag, dan mendorong gambar buruh pelabuhan ke Google Container Registry (GCR)
# Build docker image
docker build -t mlflowtracker-gcp .
# Install docker credential helper using gcloud
gcloud components install docker-credential-gcr docker-credential-gcr configure-docker
# Tag docker image
docker tag <local_image_name> gcr.io/gcp_project_id/mlflowtracker-gcp:latest
# Push docker image
docker push gcr.io/gcp_project_id/mlflowtracker-gcp:latest
Kami telah membuat instance DB, sekarang perlu membuat database dan pengguna sehingga mlflow dapat menggunakan detail ini untuk terhubung ke database. Di halaman SQL, klik Database dan klik Buat Database berikan nama database. Demikian pula klik tautan pengguna dan berikan nama pengguna dan kata sandi
Kita perlu membuat keranjang penyimpanan cloud untuk mlflow untuk menyimpan artefak model. Untuk membuat bucket penyimpanan cloud, cari penyimpanan cloud di konsol GCP, klik tombol 'Buat', berikan nama bucket, wilayah, dan klik buat
Kami akan membuat layanan cloudrun di gcp yang akan menggunakan gambar buruh pelabuhan yang kami unggah ke registri penampung. Untuk membuat instance cloud run, buka halaman cloud run, klik buat layanan, pilih gambar container yang telah kami unggah ke GCR, berikan port container, nilai CPU dan memori, instance min dan maks untuk penskalaan otomatis dan variabel lingkungan.
Catatan: Pastikan akun layanan yang Anda pilih di cloudrun memiliki akses ke penyimpanan cloud, jika tidak, upload model artifactory akan gagal
Sekarang setelah kita menghosting mlflow di GCP, mari jalankan eksperimen machine learning dari lokal kita dengan mengarahkan ke mlflow di cloud
Setelah menjalankan eksperimen, kita dapat melihat semua parameter, metrik, dan model dalam mlflow yang kita catat selama eksperimen
Catatan: Kami telah membuat semua sumber daya cloud secara manual menggunakan konsol, menggunakan infrastruktur karena kode (Terraform atau CloudFormation) adalah praktik yang baik
Saya harap Anda mendapatkan pemahaman yang sangat baik tentang bagaimana kami dapat menghosting mlflow di platform cloud AWS dan GCP dan menjalankan eksperimen pembelajaran mesin di cloud
Selamat Belajar!!