Dari Notebook ke Kubeflow Pipelines dengan HP Tuning: Perjalanan Data Science

1. Pengantar

Kubeflow adalah toolkit machine learning untuk Kubernetes. Project ini ditujukan untuk menyederhanakan, mempermudah, dan menskalakan deployment alur kerja machine learning (ML) di Kubernetes. Tujuannya adalah menyediakan cara mudah untuk men-deploy sistem open source terbaik untuk ML ke berbagai infrastruktur.

Seperti apa tampilan deployment Kubeflow?

Deployment Kubeflow adalah:

  • Portabel - Berfungsi di cluster Kubernetes mana pun, baik di Google Cloud Platform (GCP), di infrastruktur lokal, maupun di seluruh penyedia.
  • Dapat diskalakan - Dapat menggunakan resource yang berfluktuasi dan hanya dibatasi oleh jumlah resource yang dialokasikan ke cluster Kubernetes.
  • Dapat disusun - Memungkinkan Anda mengonfigurasi langkah-langkah independen ke dalam alur kerja ML lengkap, dengan memilih dari serangkaian framework dan library ML yang telah dikurasi.

Kubeflow memungkinkan Anda mengatur microservice yang terhubung secara longgar sebagai satu unit dan men-deploy-nya ke berbagai lokasi, termasuk di laptop, lokal, atau di cloud.

Codelab ini memandu Anda membuat deployment Kubeflow sendiri menggunakan MiniKF, lalu menjalankan alur kerja Kubeflow Pipelines dengan penyesuaian hyperparameter untuk melatih dan menayangkan model. Anda melakukan semua itu dari dalam Jupyter Notebook.

Yang akan Anda bangun

Dalam codelab ini, Anda akan membangun pipeline ilmu data yang kompleks dengan penyesuaian hyperparameter di Kubeflow Pipelines, tanpa menggunakan perintah CLI atau SDK apa pun. Anda tidak perlu memiliki pengetahuan Kubernetes atau Docker. Setelah selesai, infrastruktur Anda akan berisi:

  • VM MiniKF (Mini Kubeflow) yang diinstal secara otomatis:
  • Kubernetes (menggunakan Minikube)
  • Kubeflow
  • Kale, alat untuk mengonversi Notebook Jupyter serbaguna menjadi alur kerja Kubeflow Pipelines ( GitHub)
  • Arrikto Rok untuk pembuatan versi data dan reproduksibilitas

Yang akan Anda pelajari

  • Cara menginstal Kubeflow dengan MiniKF
  • Cara mengonversi Jupyter Notebook menjadi Kubeflow Pipelines tanpa menggunakan perintah CLI atau SDK apa pun
  • Cara menjalankan Kubeflow Pipelines dengan penyesuaian hyperparameter dari dalam notebook dengan mengklik tombol
  • Cara membuat versi data Anda secara otomatis di notebook dan di setiap langkah pipeline

Yang Anda butuhkan

Ini adalah codelab tingkat lanjut yang berfokus pada Kubeflow. Untuk mengetahui latar belakang selengkapnya dan pengantar platform, lihat dokumentasi Pengantar Kubeflow. Konsep dan blok kode yang tidak relevan akan dibahas sekilas dan disediakan, jadi Anda cukup menyalin dan menempelkannya.

2. Menyiapkan lingkungan

Siapkan project GCP Anda

Ikuti langkah-langkah di bawah untuk membuat project GCP atau mengonfigurasi project GCP yang ada. Jika Anda berencana menggunakan project GCP yang sudah ada, pastikan project tersebut memenuhi persyaratan minimum yang dijelaskan di bawah. Langkah pertama adalah membuka resource manager di GCP Console.

Buat project baru atau pilih project yang sudah ada:

99b103929d928576.png

Periksa persyaratan minimum berikut:

  • Pastikan Anda memiliki peran pemilik untuk project tersebut.
  • Pastikan penagihan diaktifkan untuk project Anda.
  • Jika Anda menggunakan Paket Gratis GCP atau periode uji coba 12 bulan dengan kredit $300, perhatikan bahwa Anda tidak dapat menjalankan penginstalan MiniKF GCP default, karena paket gratis tidak menawarkan resource yang memadai. Anda harus melakukan upgrade ke akun berbayar.

Untuk mendapatkan bantuan lebih lanjut terkait penyiapan project GCP, lihat dokumentasi GCP.

Setelah menyiapkan project GCP, langsung buka petunjuk untuk menginstal MiniKF.

Membuka project GCP yang telah dialokasikan sebelumnya

Untuk membuka project GCP yang telah dialokasikan sebelumnya, klik tombol di bawah untuk membuka GCP Console dan membuka panel Beranda, yang ada di menu tiga garis di kiri atas. Jika layar kosong, klik Ya pada perintah untuk membuat dasbor.

3fdc4329995406a0.png

Jika project belum dipilih, klik Select a project:

e8952c0b96067dea.png

Pilih project Anda. Anda hanya boleh memiliki satu:

fe25c1925487142.png

3. Menginstal MiniKF

Membuat instance Compute, termasuk MiniKF

Di GCP Marketplace, telusuri "MiniKF".

Pilih virtual machine MiniKF dari Arrikto:

d6b423c1911ea85a.png

Klik tombol LUNCURKAN dan pilih project Anda:

7d07439db939b61c.png

Di jendela Configure & Deploy, pilih name dan zone untuk instance MiniKF Anda, lalu biarkan opsi default. Kemudian, klik tombol Deploy:

7d5f7d17a80a1930.png

Tunggu hingga instance Compute MiniKF melakukan booting:

5228086caadc44c6.png

Login ke MiniKF

Saat VM MiniKF aktif, hubungkan dan login dengan mengklik tombol SSH. Ikuti petunjuk di layar untuk menjalankan perintah minikf, yang akan memulai deployment Minikube, Kubeflow, dan Rok. Prosesnya perlu waktu beberapa menit sampai selesai.

774e83c3e96cf7b3.png

Login ke Kubeflow

Setelah penginstalan selesai dan semua pod siap, buka dasbor MiniKF. Login ke Kubeflow menggunakan nama pengguna dan sandi MiniKF:

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Pengguna Chrome akan melihat layar ini:

6258e0f09e46a6c2.png

Pengguna Firefox akan melihat layar ini:

8cff90ce2f0670bd.png

Pengguna Safari akan melihat layar ini:

1c6fd768d71c0a92.png

Login ke Rok

Setelah login ke Kubeflow, buka menu kiri dengan mengklik ikon tiga garis. Klik Snapshots dan login ke Rok menggunakan nama pengguna dan sandi MiniKF.

16171f35a935a9af.png

80aad6ba5d298a7e.png

Selamat! Anda telah berhasil men-deploy MiniKF di GCP. Sekarang Anda dapat membuat notebook, menulis kode ML, menjalankan Kubeflow Pipelines, dan menggunakan Rok untuk pembuatan versi dan reproduksibilitas data.

4. Menjalankan pipeline dari dalam notebook

Di bagian ini, Anda akan menjalankan contoh Identifikasi Ras, sebuah project dalam Nanodegree AI Udacity. Dengan diberi gambar, model akhir akan memberikan perkiraan ras tersebut.

Membuat server notebook di cluster Kubeflow Anda

Buka link Notebooks di dasbor pusat Kubeflow.

60825e935fd0f39b.png

Klik New Server.

f9303c0a182e47f5.png

Tentukan nama untuk server notebook Anda.

a2343f30bc9522ab.png

Pastikan Anda telah memilih image Docker berikut (Perhatikan bahwa tag image mungkin berbeda):

gcr.io/arrikto/jupyter-kale:f20978e

Tambahkan volume data kosong baru berukuran 5 GB dan beri nama data.

8544d9b05826b316.png

Klik Launch untuk membuat server notebook.

28c024bcc55cc70a.png

Saat server notebook tersedia, klik Connect untuk terhubung ke server tersebut.

52f1f8234988ceaa.png

Mendownload data dan notebook

Tab baru akan terbuka dengan halaman landing JupyterLab. Buat terminal baru di JupyterLab.

ab9ac96f1a1f0d09.png

Di jendela terminal, jalankan perintah ini untuk membuka folder data dan mendownload notebook serta data yang akan Anda gunakan selama sisa lab:

cd data/
git clone https://github.com/kubeflow-kale/kale

Repositori yang di-clone berisi serangkaian contoh pilihan dengan data dan notebook yang dianotasi.

Di sidebar, buka folder data/kale/examples/dog-breed-classification/ dan buka notebook dog-breed.ipynb.

2bc436465522f65b.png

Mempelajari kode ML contoh Identifikasi Ras

Untuk saat ini, jangan jalankan sel yang mendownload set data, karena Anda akan menggunakan beberapa set data yang lebih kecil yang disertakan dalam repositori yang baru saja Anda clone. Jika Anda menjalankan contoh ini sendiri di rumah, silakan download set data.

Jalankan sel imports untuk mengimpor semua library yang diperlukan. Perhatikan bahwa kode gagal karena library tidak ada:

5e2b97ab2512f139.png

Biasanya, Anda harus membuat image Docker baru agar dapat menjalankan Notebook ini sebagai pipeline Kubeflow, untuk menyertakan library yang baru diinstal. Untungnya, Rok dan Kale memastikan bahwa library apa pun yang Anda instal selama pengembangan akan masuk ke pipeline Anda, berkat teknologi snapshot Rok dan Kale yang memasang volume yang di-snapshot tersebut ke dalam langkah-langkah pipeline.

Jalankan sel berikutnya untuk menginstal library yang belum ada:

c483da77943a6f01.png

Mulai ulang kernel notebook dengan mengklik ikon Restart:

376b5203209c2c91.png

Jalankan sel imports lagi dengan library yang benar telah diinstal dan lihat apakah berhasil.

Mengonversi notebook menjadi pipeline di Kubeflow Pipelines

Aktifkan Kale dengan mengklik ikon Kubeflow di panel kiri notebook:

7b96241f2ab6c389.png

Aktifkan Kale dengan mengklik penggeser di Panel Deployment Kale:

804cfbf9d76b7e23.png

Jelajahi dependensi per sel dalam notebook. Lihat cara beberapa sel notebook dapat menjadi bagian dari satu langkah pipeline, seperti yang ditunjukkan oleh batang warna di sebelah kiri sel, dan cara langkah pipeline dapat bergantung pada langkah sebelumnya, seperti yang ditunjukkan oleh label bergantung pada di atas sel. Misalnya, gambar di bawah menunjukkan beberapa sel yang merupakan bagian dari langkah pipeline yang sama. Kolom ini memiliki warna merah yang sama dan bergantung pada langkah pipeline sebelumnya.

fcd0fb351cdfb359.png

Klik tombol Compile and Run:

18f2f6f0e12393d5.png

Sekarang Kale mengambil alih dan membangun notebook Anda, dengan mengonversinya menjadi pipeline Kubeflow Pipelines. Selain itu, karena Kale terintegrasi dengan Rok untuk mengambil snapshot volume data notebook saat ini, Anda dapat melihat progres snapshot. Rok menangani pembuatan versi data dan mereproduksi seluruh lingkungan seperti saat Anda mengklik tombol Compile and Run. Dengan cara ini, Anda memiliki mesin waktu untuk data dan kode, dan pipeline akan berjalan di lingkungan yang sama tempat Anda mengembangkan kode, tanpa perlu membuat image Docker baru.

de1b88af76df1a9a.png

Pipeline dikompilasi dan diupload ke Kubeflow Pipelines. Sekarang klik link untuk membuka UI Kubeflow Pipelines dan melihat operasi.

e0b467e2e7034b5d.png

UI Kubeflow Pipelines akan terbuka di tab baru. Tunggu hingga proses selesai.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

Selamat! Anda baru saja menjalankan pipeline end-to-end di Kubeflow Pipelines, mulai dari notebook Anda.

5. Transfer learning dengan penyesuaian hyperparameter

Periksa hasilnya

Lihat log langkah cnn-from-scratch. (Klik langkah dalam grafik di UI Kubeflow Pipelines, lalu klik tab Logs.) Ini adalah langkah saat Anda melatih jaringan neural konvolusional (CNN) dari awal. Perhatikan bahwa model terlatih memiliki akurasi yang sangat rendah dan, selain itu, langkah ini memerlukan waktu yang lama untuk diselesaikan.

62bf0835e9896c67.png

Lihat log cnn-vgg16 step. Pada langkah ini, Anda menggunakan transfer learning pada model VGG-16 terlatih—jaringan saraf yang dilatih oleh Visual Geometry Group (VGG). Akurasi model ini jauh lebih tinggi daripada model sebelumnya, tetapi kita masih bisa melakukannya dengan lebih baik.

2b45072da65e20ae.png

Sekarang, lihat log langkah cnn-resnet50. Pada langkah ini, Anda menggunakan transfer learning pada model ResNet-50 terlatih. Akurasi jauh lebih tinggi. Oleh karena itu, model ini adalah model yang akan Anda gunakan untuk langkah-langkah selanjutnya dalam codelab ini.

a1dc84ea48a87820.png

Penyesuaian hyperparameter

Kembali ke server notebook di UI Kubeflow, lalu buka notebook bernama dog-breed-katib.ipynb (di jalur data/kale/examples/dog-breed-classification/). Di notebook ini, Anda akan menjalankan beberapa eksperimen penyesuaian hyperparameter pada model ResNet-50, menggunakan Katib. Perhatikan bahwa Anda memiliki satu sel di awal notebook untuk mendeklarasikan parameter:

87b9f6c98dc1823e.png

Di panel kiri notebook, aktifkan HP Tuning with Katib untuk menjalankan penyesuaian hyperparameter:

a518eba74d341139.png

Kemudian, klik Siapkan Tugas Katib untuk mengonfigurasi Katib:

f4e34fff6a93aa60.png

Tentukan ruang penelusuran untuk setiap parameter, dan tentukan sasaran:

cfc6b7bcdc685a02.png

Klik tombol Compile and Run Katib Job:

f9c1ab0a6a3c5e8d.png

Lihat progres eksperimen Katib:

f3514011876564db.png

Klik Lihat untuk melihat eksperimen Katib:

ab2f5a5edd48e8dc.png

Klik Selesai untuk melihat operasi di Kubeflow Pipelines (KFP):

410a843b6f044a4b.png

Di halaman eksperimen Katib, Anda akan melihat uji coba baru:

a511dca519580133.png

Di UI KFP, Anda akan melihat run baru:

43dd34ee2b75018d.png

Mari kita bedah apa yang baru saja terjadi. Sebelumnya, Kale menghasilkan eksekusi pipeline dari notebook dan sekarang membuat beberapa eksekusi pipeline, dengan masing-masing eksekusi diisi dengan kombinasi argumen yang berbeda.

Katib adalah komponen Kubeflow untuk menjalankan tugas penyesuaian hyperparameter tujuan umum. Katib tidak mengetahui apa pun tentang tugas yang sedang dijalankannya (disebut uji coba dalam jargon Katib). Yang penting bagi Kale adalah ruang penelusuran, algoritma pengoptimalan, dan sasaran. Katib mendukung menjalankan Job sederhana (yaitu, Pod) sebagai uji coba, tetapi Kale menerapkan shim agar uji coba benar-benar menjalankan pipeline di Kubeflow Pipelines, lalu mengumpulkan metrik dari eksekusi pipeline.

Saat eksperimen Katib menghasilkan uji coba, Anda akan melihat lebih banyak uji coba di UI Katib:

3e854d3d4bb766c.png

Dan lebih banyak lagi yang berjalan di UI KFP:

ffd30dcefa739962.png

Setelah eksperimen Katib selesai, Anda dapat melihat semua uji coba di UI Katib:

9096ae9caa77e42a.png

Dan semua proses di UI KFP:

7acc64dfee4f35a3.png

Jika kembali ke Notebook, Anda akan melihat tombol info tepat di samping eksperimen Katib di dalam panel Kale:

95b092180d71dc80.png

Klik, dan Anda akan melihat hasil terbaik serta parameter yang menghasilkannya:

3b0ce47e548e5afb.png

6. Pembersihan

Hancurkan VM MiniKF

Buka Deployment Manager di GCP Console, lalu hapus deployment minikf-on-gcp.

7. Selamat

Selamat, Anda telah berhasil menjalankan alur kerja data science end-to-end menggunakan Kubeflow (MiniKF), Kale, dan Rok.

Apa selanjutnya?

Bergabung dengan Komunitas Kubeflow:

Bacaan lebih lanjut