Sanoat mashinalarini o'rganish: 10 ta dizayn printsipi

Sanoat mashinalarini o'rganish: 10 ta dizayn printsipi

Hozirgi vaqtda har kuni aql bovar qilmaydigan narsalarni yaratishga imkon beruvchi yangi xizmatlar, ilovalar va boshqa muhim dasturlar yaratilmoqda: SpaceX raketasini boshqarish uchun dasturiy ta'minotdan tortib, smartfon orqali qo'shni xonadagi choynak bilan o'zaro aloqa qilishgacha.

Va ba'zida har bir yangi boshlovchi dasturchi, xoh u ehtirosli startap bo'ladimi yoki oddiy Full Stack yoki Data Scientist bo'ladimi, ertami-kechmi hayotni sezilarli darajada soddalashtiradigan dasturiy ta'minotni yaratish va yaratishda ma'lum qoidalar mavjudligini tushunadi.

Ushbu maqolada men 10 faktorli App metodologiyasiga asoslangan holda dastur/xizmatga oson integratsiya qilish uchun sanoat mashinalarini o'rganishni dasturlashning 12 tamoyilini qisqacha tasvirlab beraman. Heroku jamoasi tomonidan taklif qilingan. Mening tashabbusim ko'plab ishlab chiquvchilar va ma'lumotlar fanlari odamlariga yordam beradigan ushbu texnika haqida xabardorlikni oshirishdir.

Ushbu maqola sanoat mashinalarini o'rganish bo'yicha bir qator maqolalarning kirish qismidir. Ularda men modelni qanday qilib haqiqiy ishlab chiqarish va uni ishlab chiqarishga yo'lga qo'yish, u uchun API yaratish, shuningdek, tizimlarida ML o'rnatilgan turli sohalar va kompaniyalardan misollar haqida so'zlab beraman.

1-tamoyil: bitta kod bazasi

Ba'zi dasturchilar birinchi bosqichda buni tushunish uchun dangasaliklari tufayli (yoki o'zlarining biron bir sababi bilan) Gitni unutishadi. Ular yo so'zni butunlay unutishadi, ya'ni diskda bir-biriga fayllarni tashlaydilar/shunchaki matnni tashlaydilar/kabutarlar tomonidan jo'natadilar yoki ular ish jarayonini o'ylamaydilar va har birini o'z filialiga topshiradilar, keyin esa usta.

Ushbu tamoyil quyidagilarni bildiradi: bitta kod bazasi va ko'plab joylashtirishlarga ega.

Git ishlab chiqarishda ham, ilmiy-tadqiqot va ishlanmalarda ham qo'llanilishi mumkin, bunda u tez-tez ishlatilmaydi.

Misol uchun, Ar-ge bosqichida siz eng yaxshisini tanlash va u bilan oson ishlashni davom ettirish uchun ma'lumotlarni qayta ishlashning turli usullari va modellari bilan majburiyatlarni qoldirishingiz mumkin.

Ikkinchidan, ishlab chiqarishda bu almashtirib bo'lmaydigan narsa - siz doimo kodingiz qanday o'zgarganini ko'rib chiqishingiz va qaysi model eng yaxshi natijalarni berganini, oxirida qaysi kod ishlaganini va uning ishlamay qolishiga yoki noto'g'ri natijalarni berishiga nima sabab bo'lganini bilishingiz kerak bo'ladi. . Va'dalar aynan shu uchun!

Shuningdek, siz o'zingizning loyihangiz paketini yaratishingiz mumkin, masalan, Gemfury-ga joylashtirishingiz va keyin 1000 marta qayta yozmaslik uchun undan boshqa loyihalar uchun funktsiyalarni import qilishingiz mumkin, lekin keyinroq.

2-tamoyil: Bog'liqlarni aniq e'lon qiling va ajratib oling

Har bir loyihada siz ularni biror joyda qo'llash uchun tashqaridan import qilinadigan turli xil kutubxonalarga ega. Python kutubxonalari yoki turli maqsadlar uchun boshqa tillardagi kutubxonalar yoki tizim vositalari - sizning vazifangiz:

  • Tobeliklarni, ya'ni loyihangizda foydalaniladigan va o'rnatilishi kerak bo'lgan barcha kutubxonalar, asboblar va ularning versiyalarini o'z ichiga olgan faylni aniq e'lon qiling (masalan, Pythonda buni Pipfile yoki talablar.txt yordamida amalga oshirish mumkin. A. yaxshi tushunishga imkon beruvchi havola: realpython.com/pipenv-guide)
  • Rivojlanish jarayonida dasturingiz uchun maxsus bog'liqliklarni ajratib oling. Siz doimiy ravishda versiyalarni o'zgartirishni va, masalan, Tensorflow-ni qayta o'rnatishni xohlamaysizmi?

Shunday qilib, kelajakda sizning jamoangizga qo'shiladigan dasturchilar loyihangizda foydalaniladigan kutubxonalar va ularning versiyalari bilan tezda tanishishlari mumkin, shuningdek, siz ma'lum bir dastur uchun o'rnatilgan versiyalar va kutubxonalarni o'zlari boshqarish imkoniyatiga ega bo'lasiz. kutubxonalar yoki ularning versiyalarining mos kelmasligiga yordam beradigan loyiha.

Ilovangiz ma'lum bir operatsion tizimga o'rnatilishi mumkin bo'lgan tizim vositalariga ham tayanmasligi kerak. Ushbu vositalar bog'liqlik manifestida ham e'lon qilinishi kerak. Bu asboblar versiyasi (shuningdek, ularning mavjudligi) ma'lum bir OTning tizim vositalariga mos kelmaydigan vaziyatlarni oldini olish uchun kerak.

Shunday qilib, curl deyarli barcha kompyuterlarda ishlatilishi mumkin bo'lsa ham, siz uni bog'liqlikda e'lon qilishingiz kerak, chunki boshqa platformaga o'tishda u mavjud bo'lmasligi mumkin yoki versiya sizga dastlab kerak bo'lgan versiya bo'lmasligi mumkin.

Masalan, talablaringiz.txt fayli quyidagicha ko'rinishi mumkin:

# 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

3-tamoyil: Konfiguratsiyalar

Ko‘pchilik turli dasturchi yigitlar tasodifan GitHub’ga kodni AWS’dan parollar va boshqa kalitlar bilan umumiy omborlarga yuklagani, ertasi kuni 6000 dollar yoki hatto 50000 XNUMX dollar qarz bilan uyg‘onganligi haqidagi hikoyalarni eshitgan.

Sanoat mashinalarini o'rganish: 10 ta dizayn printsipi

Albatta, bu holatlar ekstremal, ammo juda muhim. Agar siz o'z hisob ma'lumotlaringizni yoki konfiguratsiya uchun zarur bo'lgan boshqa ma'lumotlarni kod ichida saqlasangiz, siz xatoga yo'l qo'ygan bo'lasiz va buning sababini tushuntirishga hojat yo'q deb o'ylayman.

Bunga muqobil muhit o'zgaruvchilarida konfiguratsiyalarni saqlashdir. Atrof-muhit o'zgaruvchilari haqida ko'proq o'qishingiz mumkin shu yerda.

Odatda muhit o'zgaruvchilarida saqlanadigan ma'lumotlarga misollar:

  • Domen nomlari
  • API URL manzillari/URI
  • Umumiy va shaxsiy kalitlar
  • Kontaktlar (pochta, telefonlar va boshqalar)

Shunday qilib, agar konfiguratsiya o'zgaruvchilaringiz o'zgarsa, kodni doimiy ravishda o'zgartirishingiz shart emas. Bu vaqt, kuch va pulni tejashga yordam beradi.

Misol uchun, agar siz testlarni o'tkazish uchun Kaggle API dan foydalansangiz (masalan, dasturiy ta'minotni yuklab oling va model yaxshi ishlashini tekshirish uchun u orqali modelni ishga tushiring), u holda KAGGLE_USERNAME va KAGGLE_KEY kabi Kaggle shaxsiy kalitlari bo'lishi kerak. muhit o'zgaruvchilarida saqlanadi.

4-tamoyil: Uchinchi tomon xizmatlari

Bu erda g'oya dasturni kod jihatidan mahalliy va uchinchi tomon resurslari o'rtasida hech qanday farq bo'lmaydigan tarzda yaratishdir. Masalan, siz mahalliy MySQL va uchinchi tomonni ulashingiz mumkin. Xuddi shu narsa Google Maps yoki Twitter API kabi turli xil APIlar uchun ham amal qiladi.

Uchinchi tomon xizmatini o'chirib qo'yish yoki boshqasini ulash uchun siz faqat yuqoridagi paragrafda aytib o'tganim muhit o'zgaruvchilaridagi konfiguratsiyadagi kalitlarni o'zgartirishingiz kerak.

Shunday qilib, masalan, har safar kod ichidagi ma'lumotlar to'plamiga ega fayllarga yo'lni ko'rsatish o'rniga, pathlib kutubxonasidan foydalanish va config.py-da ma'lumotlar to'plamiga yo'lni e'lon qilish yaxshiroqdir, shunda siz qaysi xizmatdan foydalanmasligingizdan qat'iy nazar (uchun). Masalan, CircleCI), dastur yangi xizmatdagi yangi fayl tizimining tuzilishini hisobga olgan holda ma'lumotlar to'plamiga yo'lni topishga muvaffaq bo'ldi.

5-tamoyil. Qurilish, chiqarish, ishlash vaqti

Data Science bo'yicha ko'plab odamlar dasturiy ta'minotni yozish qobiliyatlarini yaxshilashni foydali deb bilishadi. Agar dasturimiz imkon qadar kamdan-kam hollarda ishdan chiqishini va iloji boricha uzoq vaqt davomida muvaffaqiyatsiz ishlashini istasak, yangi versiyani chiqarish jarayonini 3 bosqichga bo'lish kerak:

  1. Stage yig'ilishlar. Yalang'och kodingizni individual resurslar bilan barcha kerakli kod va ma'lumotlarni o'z ichiga olgan paket deb ataladigan paketga aylantirasiz. Ushbu paket yig'ilish deb ataladi.
  2. Stage ozod qilish - bu erda biz konfiguratsiyani yig'ilishga ulaymiz, ularsiz biz dasturimizni chiqara olmaymiz. Endi bu butunlay ishga tushirishga tayyor reliz.
  3. Keyingi bosqich keladi bajarilishi. Bu erda biz dasturni chiqarishimizdan kerakli jarayonlarni ishga tushirish orqali chiqaramiz.

Modelning yangi versiyalarini yoki butun quvur liniyasini chiqarish uchun bunday tizim ma'murlar va ishlab chiquvchilar o'rtasidagi rollarni ajratishga imkon beradi, versiyalarni kuzatishga imkon beradi va dasturning istalmagan to'xtashlarini oldini oladi.

Chiqarish vazifasi uchun .yml faylida o'zingizni ishga tushirish jarayonlarini yozishingiz mumkin bo'lgan ko'plab turli xizmatlar yaratilgan (masalan, CircleCI'da bu jarayonning o'zini qo'llab-quvvatlash uchun config.yml). Wheely loyihalar uchun paketlar yaratishda ajoyib.

Mashinani o'rganish modelingizning turli versiyalari bilan paketlarni yaratishingiz va keyin ularni to'plashingiz va u erdan yozgan funktsiyalardan foydalanish uchun kerakli paketlar va ularning versiyalariga murojaat qilishingiz mumkin. Bu sizning modelingiz uchun API yaratishga yordam beradi va paketingiz, masalan, Gemfury-da joylashtirilishi mumkin.

6-tamoyil. Modelingizni bir yoki bir nechta jarayon sifatida ishga tushiring

Bundan tashqari, jarayonlar umumiy ma'lumotlarga ega bo'lmasligi kerak. Ya'ni, jarayonlar alohida mavjud bo'lishi kerak va barcha turdagi ma'lumotlar alohida mavjud bo'lishi kerak, masalan, MySQL yoki boshqalar kabi uchinchi tomon xizmatlarida, sizga kerak bo'lgan narsaga qarab.

Ya'ni, ma'lumotni jarayon fayl tizimida saqlashga arzigulik emas, aks holda bu keyingi chiqarish/konfiguratsiyalarni o'zgartirish yoki dastur ishlaydigan tizimni uzatish paytida ushbu ma'lumotlarning tozalanishiga olib kelishi mumkin.

Ammo istisno mavjud: mashinani o'rganish loyihalari uchun kutubxonalar keshini saqlashingiz mumkin, shunda siz har safar yangi versiyani ishga tushirganingizda, qo'shimcha kutubxonalar yoki ularning versiyalariga biron bir o'zgartirish kiritilmagan bo'lsa, ularni qayta o'rnatmaslik uchun. Shunday qilib, siz modelingizni sanoatda ishga tushirish vaqtini qisqartirasiz.

Modelni bir nechta jarayonlar sifatida ishga tushirish uchun siz .yml faylini yaratishingiz mumkin, unda kerakli jarayonlar va ularning ketma-ketligini ko'rsatasiz.

7-tamoyil: Qayta ishlash

Model ilovangizda ishlaydigan jarayonlarni boshlash va to'xtatish oson bo'lishi kerak. Shunday qilib, bu sizga kod o'zgarishlarini, konfiguratsiya o'zgarishlarini tezda joylashtirishga, tez va moslashuvchan tarzda o'zgartirishga va ishchi versiyaning mumkin bo'lgan buzilishlarini oldini olishga imkon beradi.

Ya'ni, model bilan ishlash jarayoni:

  • Ishga tushirish vaqtini minimallashtiring. Ideal holda, ishga tushirish vaqti (boshlash buyrug'i berilgan paytdan boshlab jarayon ishga tushirilgunga qadar) bir necha soniyadan oshmasligi kerak. Yuqorida tavsiflangan kutubxonani keshlash ishga tushirish vaqtini qisqartirish usullaridan biridir.
  • To'g'ri tugating. Ya'ni, xizmat ko'rsatish portida tinglash aslida to'xtatiladi va ushbu portga yuborilgan yangi so'rovlar qayta ishlanmaydi. Bu erda siz DevOps muhandislari bilan yaxshi aloqa o'rnatishingiz yoki uning qanday ishlashini o'zingiz tushunishingiz kerak (afzal, albatta, ikkinchisi, lekin har qanday loyihada aloqa doimo saqlanishi kerak!)

8-tamoyil: Uzluksiz joylashtirish/integratsiya

Ko'pgina kompaniyalar ilovalarni ishlab chiqish va joylashtirish guruhlari o'rtasida bo'linishdan foydalanadi (ilovani oxirgi foydalanuvchilarga taqdim etadi). Bu dasturiy ta'minotni ishlab chiqish va uni takomillashtirishda muvaffaqiyatni sezilarli darajada sekinlashtirishi mumkin. Bu, shuningdek, rivojlanish va integratsiya, taxminan aytganda, birlashtirilgan DevOps madaniyatini buzadi.

Shuning uchun, bu tamoyil sizning rivojlanish muhitingiz ishlab chiqarish muhitingizga imkon qadar yaqin bo'lishi kerakligini bildiradi.

Bu quyidagilarga imkon beradi:

  1. Chiqarish vaqtini o'nlab marta qisqartiring
  2. Kodning mos kelmasligi sababli xatolar sonini kamaytiring.
  3. Bu, shuningdek, xodimlarning ish yukini kamaytiradi, chunki dasturchilar va dasturni joylashtirgan odamlar endi bir jamoadir.

Bu bilan ishlashga imkon beruvchi vositalar CircleCI, Travis CI, GitLab CI va boshqalar.

Siz tezda modelga qo'shimchalar kiritishingiz, uni yangilashingiz va darhol ishga tushirishingiz mumkin, shu bilan birga, muvaffaqiyatsiz bo'lsa, oxirgi foydalanuvchi buni sezmasligi uchun juda tez ishlaydigan versiyaga qaytish oson bo'ladi. Agar sizda yaxshi testlar bo'lsa, buni oson va tez bajarish mumkin.

Farqlarni minimallashtiring!!!

9-tamoyil. Sizning jurnallaringiz

Jurnallar (yoki "Jurnallar") odatda matn formatida qayd etilgan, dastur (hodisalar oqimi) ichida sodir bo'ladigan voqealardir. Oddiy misol: "2020-02-02 - tizim darajasi - jarayon nomi." Ular ishlab chiquvchi dastur ishlayotgan paytda nima sodir bo'layotganini tom ma'noda ko'rishi uchun mo'ljallangan. U jarayonlarning rivojlanishini ko'radi va bu ishlab chiquvchining o'zi xohlaganidek yoki yo'qligini tushunadi.

Ushbu printsipga ko'ra, siz jurnallaringizni fayl tizimingizda saqlamasligingiz kerak - ularni ekranga "chiqish" kerak, masalan, tizimning standart chiqishida buni qiling. Va shu tarzda ishlab chiqish jarayonida terminaldagi oqimni kuzatish mumkin bo'ladi.

Bu umuman jurnallarni saqlashning hojati yo'qligini anglatadimi? Albatta yo'q. Sizning arizangiz buni qilmasligi kerak - uni uchinchi tomon xizmatlariga qoldiring. Sizning ilovangiz jurnallarni faqat real vaqtda ko'rish uchun ma'lum bir fayl yoki terminalga yo'naltirishi yoki umumiy maqsadli ma'lumotlarni saqlash tizimiga (masalan, Hadoop) yuborishi mumkin. Ilovangizning o'zi jurnallarni saqlamasligi yoki ular bilan o'zaro aloqada bo'lmasligi kerak.

10-tamoyil. Test!

Sanoat mashinalarini o'rganish uchun ushbu bosqich juda muhim, chunki siz model to'g'ri ishlashini va siz xohlagan narsani ishlab chiqarishini tushunishingiz kerak.

Testlar pytest yordamida yaratilishi mumkin va agar sizda regressiya/tasniflash topshirig'i bo'lsa, kichik ma'lumotlar to'plami yordamida sinovdan o'tkazilishi mumkin.

Chuqur o'rganish modellari uchun bir xil urug'ni o'rnatishni unutmang, shunda ular doimo turli xil natijalarni keltirib chiqarmaydi.

Bu 10 ta tamoyilning qisqacha tavsifi edi va, albatta, ularni sinab ko'rmasdan va qanday ishlashini ko'rmasdan foydalanish qiyin, shuning uchun bu maqola shunchaki qiziqarli maqolalar seriyasining kirish qismi bo'lib, unda men qanday yaratishni ochib beraman. sanoat mashinalarini o'rganish modellari, ularni tizimlarga qanday integratsiya qilish va bu tamoyillar barchamiz uchun hayotni qanday osonlashtirishi.

Bundan tashqari, har kim xohlasa, sharhlarda qoldirishi mumkin bo'lgan ajoyib tamoyillardan foydalanishga harakat qilaman.

Manba: www.habr.com

a Izoh qo'shish