Learning Machine Industrial: 10 Prinsip Desain

Learning Machine Industrial: 10 Prinsip Desain

Saiki, layanan anyar, aplikasi lan program penting liyane digawe saben dina sing bisa nggawe barang sing luar biasa: saka piranti lunak kanggo ngontrol roket SpaceX nganti sesambungan karo ketel ing kamar sabanjure liwat smartphone.

Lan, kadhangkala, saben programmer anyar, apa iku startupper hasrat utawa Full Stack biasa utawa Data Scientist, cepet utawa mengko teka menyang sadhar sing ana aturan tartamtu kanggo program lan nggawe piranti lunak sing nemen menakake urip.

Ing artikel iki, aku bakal njlèntrèhaké kanthi ringkes 10 prinsip babagan cara program machine learning industri supaya bisa gampang diintegrasi menyang aplikasi/layanan, adhedhasar metodologi App 12-faktor. disaranake dening tim Heroku. Inisiatif saya yaiku nambah kesadaran babagan teknik iki, sing bisa mbantu akeh pangembang lan wong ilmu data.

Artikel iki minangka prolog saka seri artikel babagan Machine Learning industri. Ing wong-wong mau, aku bakal luwih ngomong babagan carane nggawe model lan miwiti produksi, nggawe API, uga conto saka macem-macem wilayah lan perusahaan sing duwe ML ing sistem kasebut.

Prinsip 1: Siji basis kode

Sawetara programer ing tahap pisanan, amarga kesed kanggo ngerteni (utawa kanthi alesan dhewe), lali babagan Git. Padha salah siji rampung lali tembung, sing, padha uncalan file kanggo saben liyane ing drive / mung uncalan teks / ngirim dening pigeons, utawa padha ora mikir liwat workflow, lan tundhuk saben kanggo cabang dhewe, lan banjur menyang master.

Prinsip iki nyatakake: duwe siji basis kode lan akeh panyebaran.

Git bisa digunakake ing produksi lan ing riset lan pangembangan (R&D), sing ora asring digunakake.

Contone, ing fase R&D sampeyan bisa ninggalake komit kanthi cara lan model pangolahan data sing beda-beda, supaya bisa milih sing paling apik lan gampang terus nggarap.

Kapindho, ing produksi iki minangka perkara sing ora bisa diganti - sampeyan kudu terus-terusan ndeleng carane kode sampeyan diganti lan ngerti model endi sing ngasilake asil sing paling apik, kode endi sing bisa digunakake ing pungkasan lan apa sing kedadeyan sing nyebabake mandheg kerja utawa wiwit ngasilake asil sing salah. . Sing apa commit kanggo!

Sampeyan uga bisa nggawe paket proyek sampeyan, nyelehake, contone, ing Gemfury, banjur mung ngimpor fungsi kasebut kanggo proyek liyane, supaya ora nulis maneh 1000 kaping, nanging luwih akeh mengko.

Prinsip 2: Nyatakake lan ngisolasi dependensi kanthi jelas

Saben proyek duwe perpustakaan beda sing diimpor saka njaba supaya bisa ditrapake ing endi wae. Apa perpustakaan Python, utawa perpustakaan basa liyane kanggo macem-macem tujuan, utawa alat sistem - tugas sampeyan yaiku:

  • Cetha nyatakake dependensi, yaiku, file sing bakal ngemot kabeh perpustakaan, alat, lan versi sing digunakake ing proyek sampeyan lan kudu diinstal (contone, ing Python iki bisa ditindakake nggunakake Pipfile utawa requirements.txt. A link sing ngidini sampeyan ngerti: realpython.com/pipenv-guide)
  • Isolasi dependensi khusus kanggo program sampeyan sajrone pangembangan. Sampeyan ora pengin terus-terusan ngganti versi lan nginstal maneh, contone, Tensorflow?

Kanthi cara iki, pangembang sing bakal gabung karo tim sampeyan ing mangsa ngarep bakal bisa kanthi cepet kenal karo perpustakaan lan versi sing digunakake ing proyek sampeyan, lan sampeyan uga bakal duwe kesempatan kanggo ngatur versi lan perpustakaan sing diinstal dhewe kanggo situs tartamtu. project, sing bakal mbantu sampeyan supaya ora kompatibel karo perpustakaan utawa versi.

Aplikasi sampeyan uga kudu ora gumantung ing piranti sistem sing bisa diinstal ing OS tartamtu. Piranti kasebut uga kudu diumumake ing manifest dependensi. Iki perlu kanggo ngindhari kahanan nalika versi alat (uga kasedhiyan) ora cocog karo piranti sistem OS tartamtu.

Mangkono, sanajan curl bisa digunakake ing meh kabeh komputer, sampeyan isih kudu ngumumake ing dependensi, amarga nalika migrasi menyang platform liyane bisa uga ora ana utawa versi kasebut ora bakal dadi sing sampeyan butuhake.

Contone, requirement.txt sampeyan bisa uga katon kaya iki:

# Model Building Requirements
numpy>=1.18.1,<1.19.0
pandas>=0.25.3,<0.26.0
scikit-learn>=0.22.1,<0.23.0
joblib>=0.14.1,<0.15.0

# testing requirements
pytest>=5.3.2,<6.0.0

# packaging
setuptools>=41.4.0,<42.0.0
wheel>=0.33.6,<0.34.0

# fetching datasets
kaggle>=1.5.6,<1.6.0

Prinsip 3: Konfigurasi

Akeh sing wis krungu crita saka macem-macem wong pangembang sing ora sengaja ngunggah kode menyang GitHub menyang repositori umum kanthi sandhi lan kunci liyane saka AWS, tangi sesuk kanthi utang $6000, utawa malah $50000.

Learning Machine Industrial: 10 Prinsip Desain

Mesthine, kasus kasebut ekstrem, nanging penting banget. Yen sampeyan nyimpen kapercayan utawa data liyane sing dibutuhake kanggo konfigurasi ing kode kasebut, sampeyan nggawe kesalahan, lan aku ora perlu nerangake apa sebabe.

Alternatif kanggo iki yaiku nyimpen konfigurasi ing variabel lingkungan. Sampeyan bisa maca liyane babagan variabel lingkungan kene.

Conto data sing biasane disimpen ing variabel lingkungan:

  • Jeneng domain
  • URL API/URI
  • Kunci umum lan pribadi
  • Kontak (mail, telpon, lsp)

Kanthi cara iki sampeyan ora kudu terus-terusan ngganti kode yen variabel konfigurasi sampeyan ganti. Iki bakal mbantu ngirit wektu, tenaga lan dhuwit.

Contone, yen sampeyan nggunakake API Kaggle kanggo nganakake tes (contone, ngundhuh piranti lunak lan nglakokake model kasebut kanggo nyoba yen model kasebut bisa digunakake kanthi apik), banjur kunci pribadi saka Kaggle, kayata KAGGLE_USERNAME lan KAGGLE_KEY, kudu disimpen ing variabel lingkungan.

Prinsip 4: Layanan Pihak Katelu

Ide ing kene yaiku nggawe program kasebut kanthi cara sing ora ana bedane antarane sumber daya lokal lan pihak katelu ing babagan kode. Contone, sampeyan bisa nyambung loro MySQL lokal lan pihak katelu. Semono uga kanggo macem-macem API kayata Google Maps utawa Twitter API.

Kanggo mateni layanan pihak katelu utawa nyambungake liyane, sampeyan mung kudu ngganti tombol ing konfigurasi ing variabel lingkungan, sing dakkandhakake ing paragraf ing ndhuwur.

Dadi, contone, tinimbang nemtokake path menyang file kanthi dataset ing kode saben wektu, luwih becik nggunakake perpustakaan pathlib lan ngumumake path menyang dataset ing config.py, supaya ora ketompo layanan apa sing sampeyan gunakake (kanggo contone, CircleCI), program bisa nemokake path menyang dataset njupuk menyang akun struktur sistem file anyar ing layanan anyar.

Prinsip 5. Mbangun, ngeculake, runtime

Akeh wong ing Ilmu Data nemokake migunani kanggo nambah katrampilan nulis piranti lunak. Yen kita pengin program kita kacilakan sabisa-bisa lan bisa digunakake tanpa gagal sajrone bisa, kita kudu mbagi proses ngeculake versi anyar dadi 3 tahap:

  1. Stage pakumpulan. Sampeyan ngowahi kode kosong kanthi sumber daya individu dadi paket sing ngemot kabeh kode lan data sing dibutuhake. Paket iki diarani perakitan.
  2. Stage ngluncurake - ing kene kita nyambungake konfigurasi menyang perakitan, tanpa kita ora bakal bisa ngeculake program kita. Saiki iki minangka rilis sing siap diluncurake.
  3. Sabanjure rawuh ing tataran kasenengan. Ing kene kita ngeculake aplikasi kasebut kanthi nglakokake proses sing dibutuhake saka rilis kita.

Sistem kasebut kanggo ngeculake versi anyar saka model utawa kabeh pipa ngidini sampeyan misahake peran ing antarane pangurus lan pangembang, ngidini sampeyan nglacak versi lan nyegah program sing ora dikarepake.

Kanggo tugas release, wis digawe akeh layanan beda sing bisa nulis pangolahan kanggo mbukak dhewe ing file .yml (contone, ing CircleCI iki config.yml kanggo ndhukung proses dhewe). Wheely apik banget nggawe paket kanggo proyek.

Sampeyan bisa nggawe paket karo macem-macem versi model machine learning, banjur paket lan deleng paket sing perlu lan versi kanggo nggunakake fungsi sing ditulis saka ing kono. Iki bakal mbantu nggawe API kanggo model, lan paket sampeyan bisa dadi tuan rumah ing Gemfury, contone.

Prinsip 6. Jalanake model sampeyan minangka siji utawa luwih proses

Kajaba iku, proses ngirim ora duwe data sing dienggo bareng. Tegese, proses kudu ana kanthi kapisah, lan kabeh jinis data kudu ana kanthi kapisah, contone, ing layanan pihak katelu kaya MySQL utawa liyane, gumantung saka apa sing sampeyan butuhake.

Yaiku, mesthine ora pantes kanggo nyimpen data ing sistem file proses, yen ora, iki bisa nyebabake mbusak data kasebut sajrone rilis sabanjure / owah-owahan konfigurasi utawa transfer sistem ing ngendi program kasebut mlaku.

Nanging ana pangecualian: kanggo proyek machine learning, sampeyan bisa nyimpen cache perpustakaan supaya ora nginstal maneh saben-saben sampeyan mbukak versi anyar, yen ora ana perpustakaan tambahan utawa owah-owahan sing digawe kanggo versi. Kanthi cara iki, sampeyan bakal nyuda wektu kanggo miwiti model sampeyan ing industri.

Kanggo mbukak model minangka sawetara proses, sampeyan bisa nggawe file .yml ing ngendi sampeyan nemtokake proses sing dibutuhake lan urutane.

Prinsip 7: Daur Ulang

Proses sing mlaku ing aplikasi model sampeyan kudu gampang diwiwiti lan mandheg. Mangkono, iki bakal ngidini sampeyan kanthi cepet nyebarake owah-owahan kode, owah-owahan konfigurasi, ukuran kanthi cepet lan fleksibel, lan nyegah kemungkinan rusak versi sing digunakake.

Sing, proses sampeyan karo model kudu:

  • Nyilikake wektu wiwitan. Saenipun, wektu wiwitan (saka wayahe printah wiwitan ditanggepi kanggo wayahe proses teka menyang operasi) ngirim ora luwih saka sawetara detik. Caching perpustakaan, sing diterangake ing ndhuwur, minangka salah sawijining teknik kanggo nyuda wektu wiwitan.
  • Mungkasi kanthi bener. Sing, ngrungokake ing port layanan bener dilereni soko tugas, lan panjalukan anyar dikirim menyang port iki ora bakal diproses. Ing kene sampeyan kudu nyiyapake komunikasi sing apik karo insinyur DevOps, utawa ngerti cara kerjane dhewe (luwih becik, mesthine, sing terakhir, nanging komunikasi kudu dijaga, ing proyek apa wae!)

Prinsip 8: Penyebaran / Integrasi Terus-terusan

Akeh perusahaan nggunakake pemisahan antarane tim pangembangan aplikasi lan penyebaran (nggawe aplikasi kasedhiya kanggo pangguna pungkasan). Iki bisa nemen mudhun pembangunan piranti lunak lan kemajuan ing nambah. Uga ngrusak budaya DevOps, ing ngendi pangembangan lan integrasi, kira-kira, digabungake.

Mula, prinsip iki nyatakake yen lingkungan pangembangan sampeyan kudu cedhak karo lingkungan produksi sampeyan.

Iki bakal ngidini:

  1. Ngurangi wektu rilis kanthi puluhan kaping
  2. Ngurangi jumlah kesalahan amarga kode incompatibility.
  3. Iki uga nyuda beban kerja ing staf, amarga pangembang lan wong sing nggunakake aplikasi saiki dadi siji tim.

Piranti sing ngidini sampeyan nggarap iki yaiku CircleCI, Travis CI, GitLab CI lan liya-liyane.

Sampeyan bisa nggawe tambahan model kanthi cepet, nganyari, lan langsung diluncurake, nalika bakal gampang, yen gagal, bali kanthi cepet menyang versi sing digunakake, supaya pangguna pungkasan ora weruh. Iki bisa ditindakake kanthi gampang lan cepet yen sampeyan duwe tes sing apik.

Kurangi bedane!!!

Prinsip 9. Log Panjenengan

Log (utawa "Log") yaiku acara, biasane direkam ing format teks, sing kedadeyan ing aplikasi (stream acara). Conto prasaja: "2020-02-02 - tingkat sistem - jeneng proses." Dheweke dirancang supaya pangembang bisa ndeleng apa sing kedadeyan nalika program kasebut mlaku. Dheweke ndeleng kemajuan proses lan ngerti apa sing dikarepake dening pangembang.

Prinsip iki nyatakake yen sampeyan ora kudu nyimpen log ing sistem file - sampeyan mung kudu "output" menyang layar, contone, nindakake iki ing output standar sistem. Lan kanthi cara iki bakal bisa ngawasi aliran ing terminal sajrone pembangunan.

Apa iki tegese ora perlu nyimpen log? Mesthi ora. Aplikasi sampeyan ora kudu nindakake iki - serahake menyang layanan pihak katelu. Aplikasi sampeyan mung bisa nerusake log menyang file utawa terminal tartamtu kanggo ndeleng wektu nyata, utawa nerusake menyang sistem panyimpenan data tujuan umum (kayata Hadoop). Aplikasi sampeyan dhewe ngirim ora nyimpen utawa sesambungan karo log.

Prinsip 10. Tes!

Kanggo sinau mesin industri, fase iki penting banget, amarga sampeyan kudu ngerti manawa model kasebut bisa digunakake kanthi bener lan ngasilake apa sing dikarepake.

Tes bisa digawe nggunakake pytest, lan dites nggunakake dataset cilik yen sampeyan duwe tugas regresi / klasifikasi.

Aja lali nyetel wiji sing padha kanggo model sinau jero supaya ora terus-terusan ngasilake asil sing beda.

Iki minangka gambaran ringkes babagan 10 prinsip, lan, mesthi, angel digunakake tanpa nyoba lan ndeleng cara kerjane, mula artikel iki mung minangka prolog saka seri artikel sing menarik sing bakal dakungkapake carane nggawe. model learning machine industri, carane nggabungake menyang sistem, lan carane prinsip iki bisa nggawe urip luwih gampang kanggo kita kabeh.

Aku uga bakal nyoba nggunakake prinsip kelangan sing sapa bisa ninggalake komentar yen pengin.

Source: www.habr.com

Add a comment