MÅ«sdienÄs katru dienu tiek radÄ«ti jauni pakalpojumi, aplikÄcijas un citas svarÄ«gas programmas, kas ļauj radÄ«t neticamas lietas: no programmatÅ«ras SpaceX raÄ·etes vadÄ«Å”anai lÄ«dz mijiedarbÄ«bai ar tÄjkannu blakus istabÄ, izmantojot viedtÄlruni.
Un dažreiz katrs iesÄcÄjs programmÄtÄjs, neatkarÄ«gi no tÄ, vai viÅÅ” ir kaislÄ«gs iesÄcÄjs vai parasts Full Stack vai Data Scientist, agrÄk vai vÄlÄk saprot, ka programmÄÅ”anai un programmatÅ«ras izveidei ir noteikti noteikumi, kas ievÄrojami vienkÄrÅ”o dzÄ«vi.
Å ajÄ rakstÄ es Ä«si aprakstÄ«Å”u 10 principus, kÄ programmÄt industriÄlo maŔīnmÄcÄ«bu tÄ, lai to varÄtu viegli integrÄt lietojumprogrammÄ/pakalpojumÄ, pamatojoties uz 12-faktoru App metodoloÄ£iju. ieteikusi Heroku komanda. Mana iniciatÄ«va ir palielinÄt izpratni par Å”o tehniku, kas var palÄ«dzÄt daudziem izstrÄdÄtÄjiem un datu zinÄtnes cilvÄkiem.
Å is raksts ir prologs rakstu sÄrijai par rÅ«pniecisko maŔīnmÄcÄ«Å”anos. Tajos es tÄlÄk runÄÅ”u par to, kÄ reÄli izgatavot modeli un palaist to ražoÅ”anÄ, izveidot tam API, kÄ arÄ« piemÄrus no dažÄdÄm jomÄm un uzÅÄmumiem, kuru sistÄmÄs ir iebÅ«vÄts ML.
1. princips: viena koda bÄze
Daži programmÄtÄji pirmajos posmos aiz slinkuma to izdomÄt (vai kaut kÄdu iemeslu dÄļ) aizmirst par Gitu. ViÅi vai nu pilnÄ«bÄ aizmirst vÄrdu, tas ir, viÅi izmet failus viens otram diskÄ / vienkÄrÅ”i izmet tekstu / sÅ«ta baložus, vai arÄ« viÅi nepÄrdomÄ savu darbplÅ«smu un piesaista katrs savÄ filiÄlÄ un pÄc tam meistars.
Å is princips nosaka: ir viena kodu bÄze un daudzi izvietojumi.
Git var izmantot gan ražoÅ”anÄ, gan pÄtniecÄ«bÄ un attÄ«stÄ«bÄ (R&D), kurÄ tas netiek izmantots tik bieži.
PiemÄram, pÄtniecÄ«bas un attÄ«stÄ«bas fÄzÄ varat atstÄt saistÄ«bas ar dažÄdÄm datu apstrÄdes metodÄm un modeļiem, lai pÄc tam izvÄlÄtos labÄko un Ärti turpinÄtu darbu ar to tÄlÄk.
OtrkÄrt, ražoÅ”anÄ tÄ ir neaizvietojama lieta ā jums bÅ«s nepÄrtraukti jÄskatÄs, kÄ mainÄs jÅ«su kods un jÄzina, kurÅ” modelis sniedza vislabÄkos rezultÄtus, kurÅ” kods beigÄs darbojÄs un kas notika, kÄ rezultÄtÄ tas pÄrstÄja darboties vai sÄka radÄ«t nepareizus rezultÄtus. . Tam ir paredzÄtas saistÄ«bas!
Varat arÄ« izveidot sava projekta paketi, ievietojot to, piemÄram, Gemfury un pÄc tam vienkÄrÅ”i importÄjot no tÄs funkcijas citiem projektiem, lai tÄs nepÄrrakstÄ«tu 1000 reizes, bet par to vÄlÄk.
2. princips: skaidri deklarÄjiet un izolÄjiet atkarÄ«bas
Katram projektam ir dažÄdas bibliotÄkas, kuras importÄjat no Ärpuses, lai tÄs kaut kur lietotu. NeatkarÄ«gi no tÄ, vai tÄs ir Python bibliotÄkas vai citu valodu bibliotÄkas dažÄdiem mÄrÄ·iem, vai sistÄmas rÄ«ki - jÅ«su uzdevums ir:
Skaidri deklarÄjiet atkarÄ«bas, tas ir, failu, kurÄ bÅ«s visas bibliotÄkas, rÄ«ki un to versijas, kas tiek izmantotas jÅ«su projektÄ un kas ir jÄinstalÄ (piemÄram, Python to var izdarÄ«t, izmantojot Pipfile vai prasÄ«bas.txt. A saite, kas ļauj labi saprast: realpython.com/pipenv-guide)
IzstrÄdes laikÄ noŔķiriet atkarÄ«bas tieÅ”i savai programmai. Vai nevÄlaties pastÄvÄ«gi mainÄ«t versijas un pÄrinstalÄt, piemÄram, Tensorflow?
TÄdÄjÄdi izstrÄdÄtÄji, kas nÄkotnÄ pievienosies jÅ«su komandai, varÄs Ätri iepazÄ«ties ar bibliotÄkÄm un to versijÄm, kas tiek izmantotas jÅ«su projektÄ, kÄ arÄ« jums bÅ«s iespÄja pÄrvaldÄ«t paÅ”as versijas un bibliotÄkas, kas instalÄtas konkrÄtam mÄrÄ·im. projektu, kas palÄ«dzÄs izvairÄ«ties no bibliotÄku vai to versiju nesaderÄ«bas.
JÅ«su lietojumprogrammai nevajadzÄtu paļauties arÄ« uz sistÄmas rÄ«kiem, kas var bÅ«t instalÄti noteiktÄ operÄtÄjsistÄmÄ. Å ie rÄ«ki ir jÄdeklarÄ arÄ« atkarÄ«bu manifestÄ. Tas nepiecieÅ”ams, lai izvairÄ«tos no situÄcijÄm, kad rÄ«ku versija (kÄ arÄ« to pieejamÄ«ba) neatbilst konkrÄtas OS sistÄmas rÄ«kiem.
TÄdÄjÄdi, pat ja curl var izmantot gandrÄ«z visos datoros, jums tas joprojÄm ir jÄdeklarÄ atkarÄ«bÄs, jo, migrÄjot uz citu platformu, tÄs var nebÅ«t vai arÄ« versija nebÅ«s tÄ, kas jums sÄkotnÄji bija nepiecieÅ”ama.
# 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. princips: konfigurÄcijas
Daudzi ir dzirdÄjuÅ”i stÄstus par dažÄdiem izstrÄdÄtÄjiem, kuri nejauÅ”i augÅ”upielÄdÄja kodu GitHub publiskajÄs krÄtuvÄs ar parolÄm un citÄm AWS atslÄgÄm, nÄkamajÄ dienÄ pamostoties ar parÄdu 6000 vai pat 50000 XNUMX ASV dolÄru apmÄrÄ.
Protams, Å”ie gadÄ«jumi ir ÄrkÄrtÄji, bet ļoti nozÄ«mÄ«gi. Ja kodÄ saglabÄjat savus akreditÄcijas datus vai citus konfigurÄÅ”anai nepiecieÅ”amos datus, jÅ«s pieļaujat kļūdu, un es domÄju, ka nav nepiecieÅ”ams paskaidrot, kÄpÄc.
AlternatÄ«va tam ir saglabÄt konfigurÄcijas vides mainÄ«gajos. Varat lasÄ«t vairÄk par vides mainÄ«gajiem Å”eit.
Datu piemÄri, kas parasti tiek glabÄti vides mainÄ«gajos:
DomÄna vÄrdi
API URL/URI
PubliskÄs un privÄtÄs atslÄgas
Kontakti (pasts, tÄlruÅi utt.)
TÄdÄ veidÄ jums nav pastÄvÄ«gi jÄmaina kods, ja mainÄs jÅ«su konfigurÄcijas mainÄ«gie. Tas palÄ«dzÄs ietaupÄ«t laiku, pÅ«les un naudu.
PiemÄram, ja izmantojat Kaggle API, lai veiktu testus (piemÄram, lejupielÄdÄjiet programmatÅ«ru un palaidiet modeli caur to, lai palaiÅ”anas laikÄ pÄrbaudÄ«tu, vai modelis darbojas labi), tad privÄtajÄm Kaggle atslÄgÄm, piemÄram, KAGGLE_USERNAME un KAGGLE_KEY, ir jÄbÅ«t glabÄjas vides mainÄ«gajos.
4. princips. TreÅ”Äs puses pakalpojumi
Å eit ir ideja izveidot programmu tÄ, lai koda ziÅÄ nebÅ«tu atŔķirÄ«bas starp vietÄjiem un treÅ”o puÅ”u resursiem. PiemÄram, varat savienot gan vietÄjos MySQL, gan treÅ”Äs puses. Tas pats attiecas uz dažÄdÄm API, piemÄram, Google Maps vai Twitter API.
Lai atspÄjotu treÅ”Äs puses pakalpojumu vai savienotu citu, jums vienkÄrÅ”i jÄmaina konfigurÄcijas atslÄgas vides mainÄ«gajos, par ko es runÄju iepriekÅ”ÄjÄ punktÄ.
TÄ, piemÄram, tÄ vietÄ, lai katru reizi norÄdÄ«tu ceļu uz failiem ar datu kopÄm kodÄ, labÄk ir izmantot pathlib bibliotÄku un deklarÄt ceļu uz datu kopÄm failÄ config.py, lai neatkarÄ«gi no tÄ, kÄdu pakalpojumu izmantojat ( piemÄram, CircleCI), programma varÄja noskaidrot ceļu uz datu kopÄm, Åemot vÄrÄ jaunÄs failu sistÄmas struktÅ«ru jaunajÄ pakalpojumÄ.
5. princips. BÅ«vÄÅ”ana, izlaiÅ”ana, izpildes laiks
Daudzi datu zinÄtnes speciÄlisti uzskata, ka ir noderÄ«gi uzlabot savas programmatÅ«ras rakstÄ«Å”anas prasmes. Ja vÄlamies, lai mÅ«su programma avarÄtu pÄc iespÄjas retÄk un darbotos bez kļūmÄm pÄc iespÄjas ilgÄk, jaunas versijas izlaiÅ”anas process ir jÄsadala 3 posmos:
Posms mezgli. JÅ«s pÄrveidojat savu tukÅ”o kodu ar atseviŔķiem resursiem par tÄ saukto paketi, kurÄ ir viss nepiecieÅ”amais kods un dati. Å o paketi sauc par montÄžu.
Posms atbrÄ«vot ā Å”eit mÄs savienojam savu konfigurÄciju ar montÄžu, bez kuras mÄs nevarÄtu atbrÄ«vot savu programmu. Tagad tas ir pilnÄ«bÄ gatavs izlaiÅ”anai.
TÄlÄk nÄk posms izpildi. Å eit mÄs izlaižam lietojumprogrammu, palaižot nepiecieÅ”amos procesus no mÅ«su laidiena.
Å Äda modeļa vai visa konveijera jaunu versiju izlaiÅ”anas sistÄma ļauj nodalÄ«t lomas starp administratoriem un izstrÄdÄtÄjiem, ļauj izsekot versijÄm un novÄrÅ” nevÄlamas programmas apstÄÅ”anÄs.
IzlaiÅ”anas uzdevumam ir izveidoti daudzi dažÄdi pakalpojumi, kuros varat rakstÄ«t procesus, lai palaistu sevi .yml failÄ (piemÄram, CircleCI tas ir config.yml, lai atbalstÄ«tu paÅ”u procesu). Wheely lieliski spÄj izveidot projektu paketes.
Varat izveidot pakotnes ar dažÄdÄm maŔīnmÄcÄ«Å”anÄs modeļa versijÄm un pÄc tam tÄs iesaiÅot un atsaukties uz nepiecieÅ”amajÄm pakotnÄm un to versijÄm, lai izmantotu no turienes rakstÄ«tÄs funkcijas. Tas palÄ«dzÄs izveidot API savam modelim, un jÅ«su pakotne var tikt mitinÄta, piemÄram, vietnÄ Gemfury.
6. princips. Palaidiet modeli kÄ vienu vai vairÄkus procesus
TurklÄt procesiem nevajadzÄtu bÅ«t koplietotiem datiem. Tas nozÄ«mÄ, ka procesiem ir jÄpastÄv atseviŔķi, un visu veidu datiem ir jÄpastÄv atseviŔķi, piemÄram, treÅ”o puÅ”u pakalpojumos, piemÄram, MySQL vai citos, atkarÄ«bÄ no tÄ, kas jums nepiecieÅ”ams.
Tas ir, noteikti nav vÄrts glabÄt datus procesa failu sistÄmÄ, pretÄjÄ gadÄ«jumÄ tas var novest pie Å”o datu notÄ«rÄ«Å”anas nÄkamÄs izlaiÅ”anas/konfigurÄcijas maiÅas vai sistÄmas, kurÄ darbojas programma, pÄrsÅ«tÄ«Å”anas laikÄ.
TaÄu ir izÅÄmums: maŔīnmÄcÄ«Å”anÄs projektiem varat saglabÄt bibliotÄku keÅ”atmiÅu, lai tÄs netiktu atkÄrtoti instalÄtas ikreiz, kad palaižat jaunu versiju, ja nav veiktas papildu bibliotÄkas vai to versijÄs nav veiktas nekÄdas izmaiÅas. TÄdÄ veidÄ jÅ«s samazinÄsiet laiku, kas nepiecieÅ”ams modeļa ievieÅ”anai rÅ«pniecÄ«bÄ.
Lai modeli palaistu kÄ vairÄkus procesus, varat izveidot .yml failu, kurÄ norÄdÄ«t nepiecieÅ”amos procesus un to secÄ«bu.
7. princips. PÄrstrÄdÄjamÄ«ba
Procesus, kas darbojas jÅ«su modeļa lietojumprogrammÄ, jÄbÅ«t viegli iesÄktiem un apturÄtiem. TÄdÄjÄdi tas ļaus Ätri izvietot koda izmaiÅas, konfigurÄcijas izmaiÅas, Ätri un elastÄ«gi mÄrogot un novÄrst iespÄjamos darba versijas bojÄjumus.
Tas nozÄ«mÄ, ka jÅ«su procesam ar modeli vajadzÄtu:
Samaziniet palaiÅ”anas laiku. IdeÄlÄ gadÄ«jumÄ palaiÅ”anas laikam (no startÄÅ”anas komandas izdoÅ”anas brīža lÄ«dz procesa sÄkumam) nevajadzÄtu bÅ«t garÄkam par dažÄm sekundÄm. IepriekÅ” aprakstÄ«tÄ bibliotÄkas keÅ”atmiÅa ir viens no paÅÄmieniem startÄÅ”anas laika samazinÄÅ”anai.
Beigt pareizi. Tas ir, klausÄ«Å”anÄs apkalpoÅ”anas portÄ faktiski tiek apturÄta, un jauni Å”ajÄ portÄ iesniegtie pieprasÄ«jumi netiks apstrÄdÄti. Å eit jums vai nu jÄizveido laba saziÅa ar DevOps inženieriem, vai arÄ« paÅ”am jÄsaprot, kÄ tas darbojas (vÄlams, protams, pÄdÄjais, taÄu komunikÄcija vienmÄr ir jÄuztur jebkurÄ projektÄ!)
Daudzi uzÅÄmumi izmanto atdalÄ«Å”anu starp lietojumprogrammu izstrÄdes un izvietoÅ”anas komandÄm (padarot lietojumprogrammu pieejamu galalietotÄjiem). Tas var ievÄrojami palÄninÄt programmatÅ«ras izstrÄdi un progresu tÄs uzlaboÅ”anÄ. Tas arÄ« sabojÄ DevOps kultÅ«ru, kur attÄ«stÄ«ba un integrÄcija, rupji runÄjot, ir apvienota.
TÄpÄc Å”is princips nosaka, ka jÅ«su izstrÄdes videi ir jÄbÅ«t pÄc iespÄjas tuvÄkai jÅ«su ražoÅ”anas videi.
Tas ļaus:
Samaziniet izlaiŔanas laiku desmitiem reižu
Samaziniet kļūdu skaitu koda nesaderÄ«bas dÄļ.
Tas arÄ« samazina personÄla darba slodzi, jo izstrÄdÄtÄji un cilvÄki, kas izvieto lietojumprogrammu, tagad ir viena komanda.
RÄ«ki, kas ļauj strÄdÄt ar to, ir CircleCI, Travis CI, GitLab CI un citi.
Modelim var Ätri veikt papildinÄjumus, to atjauninÄt un nekavÄjoties palaist, savukÄrt kļūmju gadÄ«jumÄ bÅ«s viegli ļoti Ätri atgriezties darba versijÄ, lai gala lietotÄjs to nemaz nepamanÄ«tu. ÄŖpaÅ”i viegli un Ätri to var izdarÄ«t, ja jums ir labi testi.
Samazini atŔķirības!!!
9. princips. JÅ«su žurnÄli
ŽurnÄli (vai āŽurnÄliā) ir notikumi, kas parasti tiek ierakstÄ«ti teksta formÄtÄ un notiek lietojumprogrammÄ (notikumu straumÄ). VienkÄrÅ”s piemÄrs: "2020-02-02 ā sistÄmas lÄ«menis ā procesa nosaukums." Tie ir izstrÄdÄti tÄ, lai izstrÄdÄtÄjs varÄtu burtiski redzÄt, kas notiek, kad programma darbojas. ViÅÅ” redz procesu gaitu un saprot, vai tas ir tÄ, kÄ iecerÄjis pats izstrÄdÄtÄjs.
Å is princips nosaka, ka jums nevajadzÄtu glabÄt savus žurnÄlus savÄ failu sistÄmÄ - jums tie vienkÄrÅ”i ir ājÄizvadaā ekrÄnÄ, piemÄram, tas jÄdara ar sistÄmas standarta izvadi. Un tÄdÄ veidÄ izstrÄdes laikÄ bÅ«s iespÄjams uzraudzÄ«t plÅ«smu terminÄlÄ«.
Vai tas nozÄ«mÄ, ka žurnÄli vispÄr nav jÄsaglabÄ? Protams, nÄ. JÅ«su lietojumprogrammai to nevajadzÄtu darÄ«t ā atstÄjiet to treÅ”o puÅ”u pakalpojumu ziÅÄ. JÅ«su lietojumprogramma var pÄrsÅ«tÄ«t žurnÄlus tikai uz noteiktu failu vai terminÄli, lai tos skatÄ«tu reÄllaikÄ, vai pÄrsÅ«tÄ«t tos uz vispÄrÄjas nozÄ«mes datu glabÄÅ”anas sistÄmu (piemÄram, Hadoop). JÅ«su lietojumprogrammai nevajadzÄtu glabÄt žurnÄlus vai mijiedarboties ar tiem.
Princips 10. PÄrbaudi!
RÅ«pnieciskajai maŔīnmÄcÄ«bai Å”is posms ir ÄrkÄrtÄ«gi svarÄ«gs, jo jums ir jÄsaprot, ka modelis darbojas pareizi un rada to, ko vÄlaties.
Testus var izveidot, izmantojot pytest, un pÄrbaudÄ«t, izmantojot nelielu datu kopu, ja jums ir regresijas/klasifikÄcijas uzdevums.
Neaizmirstiet iestatÄ«t vienu un to paÅ”u sÄklu dziļÄs mÄcÄ«Å”anÄs modeļiem, lai tie pastÄvÄ«gi neradÄ«tu atŔķirÄ«gus rezultÄtus.
Å is bija Ä«ss 10 principu apraksts, un, protams, tos ir grÅ«ti izmantot, neizmÄÄ£inot un neredzot, kÄ tie darbojas, tÄpÄc Å”is raksts ir tikai prologs interesantu rakstu sÄrijai, kurÄ atklÄÅ”u, kÄ izveidot rÅ«pnieciskÄs maŔīnmÄcÄ«Å”anÄs modeļi , kÄ tos integrÄt sistÄmÄs un kÄ Å”ie principi var atvieglot mÅ«su visu dzÄ«vi.
MÄÄ£inÄÅ”u izmantot arÄ« forÅ”us principus, kurus ikviens var atstÄt komentÄros, ja vÄlas.