. OTUS Machine Learning: . , -, — (Senior Data Scientist Oura) , .
Sebagai Ilmuwan Data, fokus utama kami adalah memproses data dan mengembangkan serta meningkatkan model pembelajaran mesin. Ada pendapat bahwa pemrosesan data adalah tahap yang paling memakan waktu dalam keseluruhan proyek, dan keakuratan model menentukan keberhasilan produk informasi. Namun, industri sekarang berada dalam tahap transisi "dari era penemuan ke era implementasi" (Kekuatan super di bidang kecerdasan buatan: China, Silicon Valley, dan tatanan dunia baru di area ini ditentukan oleh Li Kaifu.). Gambarannya sekarang melebar, dan fokusnya bergeser dari membangun model ke menyediakan model kepada pengguna sebagai layanan dan dari kinerja model ke nilai bisnisnya. Contoh paling terkenal di sini adalah Netflix, yang tidak pernah menggunakan model pemenang Algoritma $ 1 Juta mereka karena Biaya Teknik - WIRED , meskipun ada peningkatan kinerja yang dijanjikan dari mesin ini .
Dari pemahaman ke kenyataan (slide dari konferensi Strata Data - Kubeflow menjelaskan: Pembelajaran mesin portabel di Kubernetes )
Implementasi model sangat penting, dan produk informasi sekarang dapat dilihat sebagai produk perangkat lunak, karena mereka memiliki struktur proyek, manajemen dan siklus hidup yang serupa. Oleh karena itu, kami berhak menggunakan semua teknik yang diketahui dari bidang pengembangan perangkat lunak untuk menerapkan model pembelajaran mesin dalam produksi.
Containerization adalah metode yang digunakan secara luas untuk menyebarkan produk perangkat lunak baik di platform cloud maupun di server lokal. Pada dasarnya, kita berbicara tentang kode pengemasan dan ketergantungan dalam sebuah kotak yang disebut wadah. Berikut ini adalah definisi container dalam konteks pengembangan perangkat lunak:
Dari situs Docker ,
Container adalah unit standar perangkat lunak yang mengemas kode dan semua dependensinya sehingga aplikasi dapat berjalan dengan cepat dan andal di berbagai lingkungan komputasi.
Docker adalah platform yang dapat membantu Anda mempercepat pengembangan, containerisasi, dan penerapan model pembelajaran mesin kami ke lingkungan lain. Dalam seri artikel ini, saya akan menunjukkan cara menyimpan model, menggunakannya sebagai titik akhir API, memasukkan aplikasi ML Anda ke dalam container, dan menjalankannya di mesin Docker.
Pertanyaan satu "Mengapa Docker?"
Sebelum memulai, Anda harus mendaftar dengan ID Docker jika Anda tidak memilikinya, dan kemudian menggunakan ID itu untuk mengunduh dan menginstal Docker di komputer Anda.
Ketika saya pertama kali memulai pekerjaan saya di bank, saya diberi sebuah proyek yang melibatkan pemrosesan data, dan MVP pertama (produk yang layak minimum) harus dikirim dalam sebulan. Kedengarannya menegangkan, tapi kami sebagai tim menggunakan metodologi Agile dalam pengembangan semua produk utama, dan tujuan utama MVP ini adalah untuk menguji hipotesis tentang kepraktisan dan efektivitas produk (untuk informasi lebih lanjut tentang metodologi Agile, lihat buku Eric Ries "Lean Startup" ). Manajer saya ingin saya menerapkan model saya di laptopnya, yaitu menjalankannya dan menggunakannya untuk prediksi.
Jika Anda membayangkan semua langkah yang perlu saya ambil untuk mempersiapkan laptop pengelola untuk menjalankan proyek saya, maka Anda mungkin memiliki banyak pertanyaan, seperti:
- Sistem operasi apa yang dibutuhkan model tersebut karena ia menggunakan Macbook dan ThinkPad? Saya dapat, tentu saja, bertanya kepadanya tentang hal ini, tetapi anggaplah pada saat itu dalam hidup saya bos saya sangat jahat, dan tidak ingin saya mengetahui informasi ini. (Pikiran ini ada di sini untuk membuat Anda sadar akan masalah ketergantungan sistem operasi, dan bos saya adalah orang yang sangat baik.)
- Pertanyaan kedua: "Apakah dia menginstal Python?" Jika ya, versi mana, 2 atau 3? Yang mana: 2.6, 2.7 atau 3.7?
- Bagaimana dengan paket yang dibutuhkan seperti scikit-learn, pandas dan numpy? Apakah ini memiliki versi yang sama dengan yang saya miliki di mesin saya?
Dengan semua pertanyaan ini di benaknya, inilah yang harus saya lakukan dengan komputernya agar model saya dapat berjalan di atasnya.
- Instal Python.
- Instal semua paket.
- Siapkan variabel lingkungan.
- Pindahkan kode ke mobil.
- Jalankan kode dengan parameter yang diperlukan.
Semua langkah ini membutuhkan banyak upaya, dan ada risiko ketidakcocokan saat menjalankan kode di lingkungan yang berbeda.
Jadi, jika Anda sudah menginstal dan menjalankan Docker, Anda dapat membuka terminal dan menjalankan perintah berikut:
docker run --rm -p 5000:5000 datascienceexplorer/classifier
Setelah beberapa menit, Anda akan melihat sesuatu yang serupa di terminal Anda:
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Sekarang buka browser favorit Anda dan pergi ke alamat ini:
http://localhost:5000/apidocs/
Klik pada garis prediksi dari API, lalu pada tombol uji coba di sebelah kanan, antarmuka terlihat seperti ini:
Halaman Swagger untuk API di backend
Ingat set data Iris Flowers standar yang Anda mainkan? Aplikasi kecil ini akan membantu Anda memprediksi jenis bunga berdasarkan informasi tentang beberapa pengukuran berdasarkan model klasifikasi. Faktanya, Anda sudah menggunakan model pembelajaran mesin saya sebagai layanan, dan semua yang Anda instal hanyalah Docker, dan saya tidak perlu menginstal Python atau paket apa pun di mesin Anda.
Inilah kekuatan Docker. Ini membantu saya memecahkan masalah ketergantungan sehingga saya dapat dengan cepat menerapkan kode saya di lingkungan yang berbeda, atau dalam hal ini, mesin Anda.
Ilmu Data DevOps
Sekarang, semoga saya cukup memotivasi Anda untuk terus membaca, dan jika Anda hanya ingin melewati bagian-bagian ini dan langsung membuka kodenya, maka tidak apa-apa, karena itu berarti Anda ingin memasukkan model pembelajaran mesin Anda dengan Docker dan memaparkannya sebagai layanan. Namun, untuk saat ini kita harus berhenti sejenak dan mengesampingkan semua materi tentang pembelajaran mesin dan Docker untuk memikirkan tentang DevOps dalam Ilmu Data dan mengapa hal itu diperlukan di sana.
Apa itu DevOps?
Dari Wikipedia,Tujuan dari pengembang perangkat lunak adalah pengiriman kode tepat waktu dengan semua fungsi yang diperlukan, sementara kemudahan penggunaan, keandalan, skalabilitas, bagian jaringan, firewall, infrastruktur, dll. seringkali tetap menjadi masalah operasional. Karena tujuan akhir yang berbeda dan kemungkinan KPI, tim ini biasanya tidak cocok di bawah satu atap. Oleh karena itu, seorang spesialis DevOps dapat bertindak sebagai penghubung dan membantu tim ini bekerja sama, atau bahkan bertanggung jawab atas kedua belah pihak, sehingga hasil akhirnya adalah satu tim, memimpin pengembangan dari awal hingga akhir. Lagi pula, Anda tidak bisa begitu saja memberikan komputer Anda kepada klien karena kodenya berfungsi sebagaimana mestinya.
DevOps adalah kumpulan praktik yang menggabungkan pengembangan perangkat lunak dan layanan teknologi informasi, yang tujuannya adalah untuk mempersingkat siklus pengembangan sistem dan memastikan pengiriman perangkat lunak berkualitas tinggi secara berkelanjutan.
Tapi dengan notebook Jupyter saya senang !!!Data Scientists memiliki cerita serupa, karena sekali lagi, Anda tidak bisa begitu saja mengambil dan memberikan laptop Anda yang menjalankan Notebook Jupyter agar klien dapat menggunakannya. Kami membutuhkan cara untuk menggunakan model tersebut sehingga dapat melayani banyak pengguna kapan saja, di mana saja, dan meningkat dengan waktu henti yang minimal (kegunaan, keandalan, skalabilitas).
Karena alasan ini, perusahaan mencari ilmuwan data dengan keterampilan DevOps yang dapat menerapkan dan menerapkan model pembelajaran mesin mereka dalam produksi dan memberikan nilai bisnis kepada perusahaan, bukan hanya membuktikan konsep dan berfokus pada peningkatan akurasi model. Orang-orang seperti itu disebut unicorn.
Ada banyak cara untuk menerapkan model pembelajaran mesin, tetapi Docker adalah alat yang ampuh yang memberi Anda fleksibilitas yang Anda butuhkan sambil mempertahankan ketahanan dan enkapsulasi kode Anda. Tentu saja, kami tidak akan meminta pelanggan kami untuk menginstal Docker dan membuka terminal untuk menjalankannya. Tetapi fase penampung ini pada akhirnya akan menjadi fondasi saat Anda mulai bekerja dengan proyek nyata di mana Anda harus menerapkan model Anda ke platform cloud atau server lokal.
Menyimpan model terlatih
Kembali di universitas, kami mengetahui bahwa proyek Ilmu Data terdiri dari enam tahap, seperti yang ditunjukkan pada gambar di bawah ini. Jika mengotomatiskan dan menerapkan model ke produksi adalah tujuan akhir kita, lalu bagaimana kita "memasukkan" model ke dalam fase penerapan?
Enam tahap proyek Ilmu Data
Cara termudah yang dapat Anda pikirkan adalah menyalin semuanya dari buku catatan kita, menempelkannya ke dalam file .py dan menjalankannya. Namun, setiap kali kita perlu membuat prediksi, kita akan menjalankan file ini dan melatih model lagi pada data yang sama. Jika pendekatan ini dapat diterapkan untuk model sederhana dengan set data pelatihan kecil, pendekatan ini tidak akan efektif untuk model yang kompleks dengan banyak data pelatihan (pikirkan tentang berapa lama waktu yang Anda perlukan untuk melatih model JST atau CNN). Ini berarti bahwa ketika pengguna mengirimkan permintaan model untuk prediksi, dia harus menunggu dari beberapa menit hingga beberapa jam untuk mendapatkan hasilnya, karena akan memakan banyak waktu untuk menyelesaikan tahap pelatihan model.
Bagaimana cara menyimpan model segera setelah dilatih?
Dalam kebanyakan kasus, model pembelajaran mesin dengan Python akan disimpan dalam memori sebagai objek Python selama eksekusi kode, dan kemudian dihapus setelah program selesai. Jika kita dapat menyimpan objek ini ke hard disk segera setelah model dilatih, maka saat berikutnya kita perlu membuat prediksi, kita cukup memuat model yang sudah selesai ke dalam memori dan tidak melalui tahap inisialisasi dan pelatihan. Dalam ilmu komputer, proses mengubah suatu objek menjadi aliran byte untuk penyimpanan disebut serialisasi . Dengan Python, ini dapat dengan mudah dilakukan dengan paket yang disebut acar , yang memiliki dukungan Python asli di luar kotak. Pengembang Python juga menyebut "pengawetan" proses serialisasi objek menggunakan acar....
Di notebook Jupyter, Anda dapat dengan mudah menyimpan objek model (dalam kasus saya "knn") ke file pkl , yang terletak di direktori yang sama dengan kode:
import pickle
with open('./model.pkl', 'wb') as model_pkl:
pickle.dump(knn, model_pkl)
Menyimpan model ke direktori saat ini
Notebook saya, saya sarankan untuk mengambil dari sini , sehingga selanjutnya kita akan mendapatkan hasil yang serupa. Alternatifnya, Anda dapat menggunakan model Anda sendiri, tetapi pastikan Anda memiliki semua paket yang diperlukan serta input model yang benar.
Menyelesaikan langkah pertama, Anda telah menyimpan model terlatih. Selanjutnya kami akan menggunakan kembali model untuk prakiraan, tetapi lebih dari itu di bagian kedua artikel.