Pagkat-on sa Industrial Machine: 10 Mga Prinsipyo sa Disenyo

Pagkat-on sa Industrial Machine: 10 Mga Prinsipyo sa Disenyo

Karong panahona, ang mga bag-ong serbisyo, aplikasyon ug uban pang hinungdanon nga mga programa gihimo matag adlaw nga nagpaposible sa paghimo sa dili katuohan nga mga butang: gikan sa software alang sa pagkontrol sa usa ka SpaceX rocket hangtod sa pakig-uban sa usa ka takure sa sunod nga kwarto pinaagi sa usa ka smartphone.

Ug, usahay, ang matag bag-ong programmer, bisan siya usa ka madasigon nga startupper o usa ka ordinaryo nga Full Stack o Data Scientist, sa madugay o sa madali makaamgo nga adunay piho nga mga lagda alang sa pagprograma ug paghimo og software nga labi nga nagpayano sa kinabuhi.

Niini nga artikulo, akong ihulagway sa daklit ang 10 ka mga prinsipyo kon unsaon pagprograma ang pagkat-on sa industriyal nga makina aron kini dali nga ma-integrate sa usa ka aplikasyon/serbisyo, base sa 12-factor App methodology. gisugyot sa Heroku team. Ang akong inisyatiba mao ang pagdugang sa kahibalo sa kini nga teknik, nga makatabang sa daghang mga developer ug data science nga mga tawo.

Kini nga artikulo usa ka pasiuna sa usa ka serye sa mga artikulo bahin sa industriyal nga Pagkat-on sa Machine. Diha kanila ako dugang nga maghisgot kon unsaon paghimo sa usa ka modelo ug paglansad niini ngadto sa produksyon, paghimo og API alang niini, ingon man mga pananglitan gikan sa nagkalain-laing mga lugar ug mga kompanya nga adunay built-in nga ML sa ilang mga sistema.

Prinsipyo 1: Usa ka base sa code

Ang ubang mga programmer sa unang mga hugna, tungod sa katapolan sa paghunahuna niini (o sa ilang kaugalingong rason), makalimot sa Git. Sila mahimong hingpit nga makalimot sa pulong, nga mao, sila maglabay sa mga file ngadto sa usag usa sa drive/maglabay lang og text/magpadala sa mga salampati, o dili sila maghunahuna pinaagi sa ilang workflow, ug itugyan ang matag usa ngadto sa ilang kaugalingong sanga, ug dayon ngadto sa agalon.

Kini nga prinsipyo nag-ingon: adunay usa ka codebase ug daghang deployment.

Ang Git mahimong magamit sa produksiyon ug sa panukiduki ug kalamboan (R&D), diin dili kini kanunay nga gigamit.

Pananglitan, sa yugto sa R&D mahimo nimong biyaan ang mga commit nga adunay lainlaing mga pamaagi sa pagproseso sa datos ug mga modelo, aron mapili dayon ang labing kaayo ug dali nga magpadayon sa pagtrabaho uban niini.

Ikaduha, sa produksiyon kini usa ka dili mapulihan nga butang - kinahanglan nimo nga kanunay nga tan-awon kung giunsa ang pagbag-o sa imong code ug mahibal-an kung unsang modelo ang naghimo sa labing kaayo nga mga sangputanan, kung unsang code ang nagtrabaho sa katapusan ug kung unsa ang nahitabo nga hinungdan nga kini mihunong sa pagtrabaho o nagsugod sa paghimo sa dili husto nga mga sangputanan. . Para kana sa commit!

Mahimo ka usab maghimo usa ka pakete sa imong proyekto, ibutang kini, pananglitan, sa Gemfury, ug dayon i-import lang ang mga gimbuhaton gikan niini alang sa ubang mga proyekto, aron dili kini isulat pag-usab sa 1000 ka beses, apan labi pa sa ulahi.

Prinsipyo 2: Klaro nga ipahayag ug ibulag ang mga dependency

Ang matag proyekto adunay lainlaing mga librarya nga imong gi-import gikan sa gawas aron magamit kini bisan diin. Bisan kung kini mga librarya sa Python, o mga librarya sa ubang mga pinulongan alang sa lainlaing mga katuyoan, o mga himan sa sistema - ang imong buluhaton mao ang:

  • Klaro nga ideklara ang mga dependency, nga mao, usa ka file nga maglangkob sa tanan nga mga librarya, mga himan, ug ang ilang mga bersyon nga gigamit sa imong proyekto ug kinahanglan nga i-install (pananglitan, sa Python mahimo kini gamit ang Pipfile o requirements.txt. A link nga nagtugot sa maayo nga masabtan: realpython.com/pipenv-guide)
  • Ilain ang mga dependency ilabi na alang sa imong programa sa panahon sa pag-uswag. Dili nimo gusto nga kanunay nga usbon ang mga bersyon ug i-install pag-usab, pananglitan, Tensorflow?

Niining paagiha, ang mga nag-develop nga moapil sa imong team sa umaabot dali nga mahimong pamilyar sa mga librarya ug sa ilang mga bersyon nga gigamit sa imong proyekto, ug makabaton ka usab higayon sa pagdumala sa mga bersyon ug mga librarya mismo nga na-install alang sa usa ka piho nga paagi. proyekto, nga makatabang kanimo sa paglikay sa dili pagkaangay sa mga librarya o sa ilang mga bersyon.

Ang imong aplikasyon kinahanglan nga dili usab magsalig sa mga himan sa sistema nga mahimong ma-install sa usa ka piho nga OS. Kini nga mga himan kinahanglan usab nga ipahayag sa mga dependency nga gipakita. Gikinahanglan kini aron malikayan ang mga sitwasyon diin ang bersyon sa mga himan (ingon man ang ilang pagkaanaa) dili motakdo sa mga himan sa sistema sa usa ka partikular nga OS.

Sa ingon, bisan kung magamit ang curl sa hapit tanan nga mga kompyuter, kinahanglan nimo nga ipahayag kini sa mga dependency, tungod kay kung mobalhin sa laing plataporma mahimo’g wala kini didto o ang bersyon dili ang orihinal nga kinahanglan nimo.

Pananglitan, ang imong requirements.txt mahimong sama niini:

# 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

Prinsipyo 3: Mga Konfigurasyon

Daghan ang nakadungog sa mga istorya sa lain-laing mga developer guys nga aksidenteng nag-upload sa code ngadto sa GitHub ngadto sa publiko nga mga repository nga adunay mga password ug uban pang mga yawe gikan sa AWS, pagmata sa sunod nga adlaw nga adunay utang nga $6000, o bisan $50000.

Pagkat-on sa Industrial Machine: 10 Mga Prinsipyo sa Disenyo

Siyempre, kini nga mga kaso grabe, apan hinungdanon kaayo. Kung gitipigan nimo ang imong mga kredensyal o uban pang datos nga gikinahanglan alang sa pag-configure sa sulod sa code, nasayop ka, ug sa akong hunahuna dili kinahanglan nga ipasabut kung ngano.

Usa ka alternatibo niini mao ang pagtipig sa mga kumpigurasyon sa mga variable sa palibot. Mahimo nimong mabasa ang dugang bahin sa mga variable sa palibot dinhi.

Mga pananglitan sa datos nga kasagarang gitipigan sa mga variable sa palibot:

  • Mga ngalan sa domain
  • Mga URL sa API/URI
  • Pampubliko ug pribado nga mga yawe
  • Mga kontak (mail, telepono, ug uban pa)

Niining paagiha dili nimo kinahanglan nga usbon kanunay ang code kung ang imong mga variable sa pag-configure mausab. Makatabang kini sa pagluwas kanimo sa oras, paningkamot ug salapi.

Pananglitan, kon imong gamiton ang Kaggle API sa pagpahigayon og mga pagsulay (pananglitan, i-download ang software ug ipadagan ang modelo pinaagi niini aron masulayan kung modagan nga ang modelo maayo nga magamit), nan ang mga pribado nga yawe gikan sa Kaggle, sama sa KAGGLE_USERNAME ug KAGGLE_KEY, kinahanglan gitipigan sa mga variable sa palibot.

Prinsipyo 4: Mga Serbisyo sa Third Party

Ang ideya dinhi mao ang paghimo sa programa sa paagi nga wala’y kalainan tali sa lokal ug ikatulo nga partido nga mga kapanguhaan sa termino sa code. Pananglitan, mahimo nimong ikonektar ang lokal nga MySQL ug ang ikatulo nga partido. Ingon usab ang alang sa lainlaing mga API sama sa Google Maps o Twitter API.

Aron ma-disable ang serbisyo sa ikatulo nga partido o magkonektar sa lain, kinahanglan nimo nga usbon ang mga yawe sa pag-configure sa mga variable sa palibot, nga akong gihisgutan sa parapo sa ibabaw.

Busa, pananglitan, imbis nga ipiho ang agianan sa mga file nga adunay mga dataset sa sulod sa code matag higayon, mas maayo nga gamiton ang librarya sa pathlib ug ipahayag ang agianan sa mga dataset sa config.py, aron bisan unsa nga serbisyo ang imong gamiton (alang sa Pananglitan, CircleCI), ang programa nakahimo sa pagpangita sa dalan ngadto sa mga dataset nga gikonsiderar ang istruktura sa bag-ong file system sa bag-ong serbisyo.

Prinsipyo 5. Pagtukod, pagpagawas, runtime

Daghang mga tawo sa Data Science ang nakit-an nga mapuslanon aron mapaayo ang ilang kahanas sa pagsulat sa software. Kung gusto namon nga ang among programa mag-crash ingon panagsa ra kutob sa mahimo ug molihok nga wala’y kapakyasan hangtod sa mahimo, kinahanglan namon nga bahinon ang proseso sa pagpagawas sa usa ka bag-ong bersyon sa 3 nga mga yugto:

  1. Stage mga asembliya. Gibag-o nimo ang imong hubo nga code gamit ang indibidwal nga mga kahinguhaan ngadto sa usa ka gitawag nga package nga adunay tanan nga kinahanglan nga code ug data. Kini nga pakete gitawag nga asembliya.
  2. Stage pagpagawas - dinhi among gikonektar ang among config sa asembliya, kung wala kini dili namo mapagawas ang among programa. Karon kini usa ka hingpit nga andam-sa-paglansad nga pagpagawas.
  3. Sunod moabut ang entablado katumanan. Dinhi among gibuhian ang aplikasyon pinaagi sa pagpadagan sa mga gikinahanglang proseso gikan sa among pagpagawas.

Ang ingon nga sistema sa pagpagawas sa bag-ong mga bersyon sa usa ka modelo o ang tibuuk nga pipeline nagtugot kanimo sa pagbulag sa mga tahas tali sa mga administrador ug mga developer, gitugotan ka nga masubay ang mga bersyon ug mapugngan ang dili gusto nga paghunong sa programa.

Alang sa buluhaton sa pagpagawas, daghang lain-laing mga serbisyo ang nahimo diin mahimo nimong isulat ang mga proseso aron madagan ang imong kaugalingon sa usa ka .yml file (pananglitan, sa CircleCI kini ang config.yml aron suportahan ang proseso mismo). Maayo si Wheely sa paghimo og mga pakete para sa mga proyekto.

Makahimo ka og mga pakete nga adunay lain-laing mga bersyon sa imong modelo sa pagkat-on sa makina, ug dayon i-package kini ug i-refer ang gikinahanglan nga mga pakete ug ang ilang mga bersyon aron magamit ang mga function nga imong gisulat gikan didto. Makatabang kini kanimo sa paghimo og API alang sa imong modelo, ug ang imong package mahimong ma-host sa Gemfury, pananglitan.

Prinsipyo 6. Pagdalagan ang imong modelo isip usa o daghang proseso

Dugang pa, ang mga proseso kinahanglan dili adunay gipaambit nga datos. Kana mao, ang mga proseso kinahanglan nga maglainlain, ug ang tanan nga mga klase sa datos kinahanglan nga adunay lahi, pananglitan, sa mga serbisyo sa ikatulo nga partido sama sa MySQL o uban pa, depende sa imong kinahanglan.

Sa ato pa, siguradong dili kini takus sa pagtipig sa datos sa sulod sa sistema sa file sa proseso, kung dili mahimo’g mosangput kini sa paghawan sa kini nga datos sa panahon sa sunod nga pagpagawas / pagbag-o sa mga pag-configure o pagbalhin sa sistema diin gipadagan ang programa.

Apan adunay usa ka eksepsiyon: alang sa mga proyekto sa pagkat-on sa makina, mahimo nimong tipigan ang usa ka cache sa mga librarya aron dili kini i-install pag-usab sa matag higayon nga maglunsad ka og bag-ong bersyon, kung walay dugang nga mga librarya o bisan unsang mga kausaban nga gihimo sa ilang mga bersyon. Niining paagiha, makunhuran nimo ang oras nga gikinahanglan sa paglansad sa imong modelo sa industriya.

Sa pagpadagan sa modelo ingon nga daghang mga proseso, mahimo ka maghimo usa ka .yml file diin imong gipiho ang kinahanglan nga mga proseso ug ang pagkasunod-sunod niini.

Prinsipyo 7: Pag-recycle

Ang mga proseso nga nagdagan sa imong modelo nga aplikasyon kinahanglan nga dali sugdan ug hunongon. Sa ingon, tugotan ka niini nga dali nga mag-deploy sa mga pagbag-o sa code, pagbag-o sa pag-configure, dali ug dali nga sukod, ug mapugngan ang posible nga pagkaguba sa nagtrabaho nga bersyon.

Kana mao, ang imong proseso sa modelo kinahanglan:

  • Pagmenos sa oras sa pagsugod. Sa tinuud, ang oras sa pagsugod (gikan sa pagsugod sa command sa pagsugod hangtod sa pagsugod sa proseso) kinahanglan dili molapas sa pipila ka segundo. Ang caching sa librarya, nga gihulagway sa ibabaw, usa ka teknik sa pagpakunhod sa oras sa pagsugod.
  • Tapuson sa husto. Sa ato pa, ang pagpaminaw sa service port gisuspinde gyud, ug ang mga bag-ong hangyo nga gisumite niini nga pantalan dili maproseso. Dinhi kinahanglan nimo nga magbutang ug maayong komunikasyon sa mga inhenyero sa DevOps, o sabton kung giunsa kini molihok sa imong kaugalingon (mas maayo, siyempre, ang ulahi, apan ang komunikasyon kinahanglan kanunay nga mapadayon, sa bisan unsang proyekto!)

Prinsipyo 8: Padayon nga Deployment/Integration

Daghang mga kompanya ang naggamit sa usa ka panagbulag tali sa pagpauswag sa aplikasyon ug mga grupo sa pag-deploy (gihimo ang aplikasyon nga magamit sa mga end user). Makapahinay kini pag-ayo sa pagpalambo sa software ug pag-uswag niini. Gidaot usab niini ang kultura sa DevOps, diin ang pag-uswag ug panagsama, sa halos pagsulti, gihiusa.

Busa, kini nga prinsipyo nag-ingon nga ang imong palibot sa pag-uswag kinahanglan nga labing duol sa imong palibot sa produksiyon.

Kini magtugot:

  1. Bawasan ang oras sa pagpagawas sa napulo ka beses
  2. Bawasan ang gidaghanon sa mga sayop tungod sa code incompatibility.
  3. Gipamenos usab niini ang workload sa mga kawani, tungod kay ang mga developer ug mga tawo nga nag-deploy sa aplikasyon usa na ka team.

Ang mga himan nga nagtugot kanimo sa pagtrabaho niini mao ang CircleCI, Travis CI, GitLab CI ug uban pa.

Mahimo nimo nga dali nga madugangan ang modelo, i-update kini, ug ilunsad kini dayon, samtang kini dali, kung adunay mga kapakyasan, nga makabalik dayon sa nagtrabaho nga bersyon, aron ang katapusan nga tiggamit dili makamatikod niini. Mahimo kini labi na dali ug dali kung adunay ka maayo nga mga pagsulay.

Pagmenos sa mga kalainan!!!

Prinsipyo 9. Ang imong mga troso

Ang mga log (o "Mga Log") mga panghitabo, kasagarang girekord sa pormat sa teksto, nga mahitabo sulod sa aplikasyon (agos sa panghitabo). Usa ka yano nga pananglitan: "2020-02-02 - lebel sa sistema - ngalan sa proseso." Gidisenyo kini aron ang developer literal nga makakita kung unsa ang nahitabo kung ang programa nagdagan. Nakita niya ang pag-uswag sa mga proseso ug nasabtan kung kini ba ang gituyo mismo sa developer.

Kini nga prinsipyo nag-ingon nga dili nimo ibutang ang imong mga troso sulod sa imong file system - kinahanglan nimo nga "i-output" kini sa screen, pananglitan, buhaton kini sa standard nga output sa sistema. Ug sa ingon nga paagi mahimo’g ma-monitor ang dagan sa terminal sa panahon sa pag-uswag.

Nagpasabot ba kini nga dili na kinahanglan nga tipigan ang mga troso? Siyempre dili. Ang imong aplikasyon dili kinahanglan nga buhaton kini - ibilin kini sa mga serbisyo sa ikatulo nga partido. Ang imong aplikasyon makapasa lamang sa mga troso ngadto sa usa ka piho nga file o terminal para sa real-time nga pagtan-aw, o ipasa kini ngadto sa usa ka general purpose data storage system (sama sa Hadoop). Ang imong aplikasyon mismo kinahanglan dili magtipig o makig-uban sa mga troso.

Prinsipyo 10. Sulayi!

Alang sa pagkat-on sa makina sa industriya, kini nga yugto hinungdanon kaayo, tungod kay kinahanglan nimo nga masabtan nga ang modelo nagtrabaho sa husto ug naghimo kung unsa ang imong gusto.

Ang mga pagsulay mahimong mabuhat gamit ang pytest, ug sulayan gamit ang gamay nga dataset kung ikaw adunay usa ka regression/classification nga buluhaton.

Ayaw kalimti ang pagbutang sa parehas nga liso alang sa lawom nga mga modelo sa pagkat-on aron dili sila kanunay nga makahimo og lainlaing mga resulta.

Kini usa ka mubo nga paghulagway sa 10 nga mga prinsipyo, ug, siyempre, lisud nga gamiton kini nga wala’y pagsulay ug pagtan-aw kung giunsa kini molihok, mao nga kini nga artikulo usa lamang ka pasiuna sa usa ka serye sa makapaikag nga mga artikulo diin akong ipadayag kung giunsa paghimo. mga modelo sa pagkat-on sa makina sa industriya, kung giunsa kini i-integrate sa mga sistema, ug kung giunsa kini nga mga prinsipyo makapasayon ​​sa kinabuhi alang kanatong tanan.

Paningkamutan usab nako nga gamiton ang mga cool nga mga prinsipyo nga mahimong ibilin ni bisan kinsa sa mga komento kung gusto nila.

Source: www.habr.com

Idugang sa usa ka comment