Kujifunza kwa Mashine ya Viwanda: Kanuni 10 za Usanifu

Kujifunza kwa Mashine ya Viwanda: Kanuni 10 za Usanifu

Siku hizi, huduma mpya, programu na programu zingine muhimu huundwa kila siku ambayo inafanya uwezekano wa kuunda vitu vya kushangaza: kutoka kwa programu ya kudhibiti roketi ya SpaceX hadi kuingiliana na kettle kwenye chumba kinachofuata kupitia simu mahiri.

Na, wakati mwingine, kila mpangaji programu anayeanza, iwe ni mwanzilishi wa shauku au Mwanasayansi wa kawaida wa Stack au Data Scientist, mapema au baadaye anakuja ufahamu kwamba kuna sheria fulani za kupanga na kuunda programu ambazo hurahisisha maisha.

Katika makala haya, nitaeleza kwa ufupi kanuni 10 za jinsi ya kupanga ujifunzaji wa mashine za viwandani ili iweze kuunganishwa kwa urahisi katika programu/huduma, kwa kuzingatia mbinu ya Programu yenye vipengele 12. iliyopendekezwa na timu ya Heroku. Mpango wangu ni kuongeza ufahamu wa mbinu hii, ambayo inaweza kusaidia watengenezaji wengi na watu wa sayansi ya data.

Makala haya ni utangulizi wa mfululizo wa makala kuhusu Mafunzo ya Mashine ya viwandani. Ndani yao nitazungumza zaidi juu ya jinsi ya kutengeneza mfano na kuzindua katika uzalishaji, kuunda API kwa ajili yake, pamoja na mifano kutoka kwa maeneo mbalimbali na makampuni ambayo yamejenga ML katika mifumo yao.

Kanuni ya 1: Msingi wa msimbo mmoja

Watengenezaji programu wengine katika hatua za kwanza, kwa sababu ya uvivu wa kuigundua (au kwa sababu zao wenyewe), kusahau kuhusu Git. Wanasahau kabisa neno, yaani, wanarushiana faili kwenye gari / kutupa maandishi tu / kutuma njiwa, au hawafikirii kupitia mtiririko wao wa kazi, na kujitolea kila mmoja kwa tawi lake, na kisha kwa bwana.

Kanuni hii inasema: kuwa na codebase moja na matumizi mengi.

Git inaweza kutumika katika uzalishaji na katika utafiti na maendeleo (R&D), ambayo haitumiwi mara kwa mara.

Kwa mfano, katika awamu ya R&D unaweza kuacha ahadi zilizo na mbinu na miundo tofauti ya kuchakata data, ili kisha uchague bora zaidi na uendelee kufanya kazi nayo zaidi kwa urahisi.

Pili, katika uzalishaji hii ni jambo lisiloweza kubadilishwa - utahitaji kuangalia kila mara jinsi nambari yako inavyobadilika na kujua ni mfano gani uliotoa matokeo bora, ni nambari gani ilifanya kazi mwishoni na ni nini kilifanyika ambacho kilisababisha kuacha kufanya kazi au kuanza kutoa matokeo yasiyo sahihi. . Hiyo ni nini anafanya ni kwa ajili ya!

Unaweza pia kuunda kifurushi cha mradi wako, ukiweka, kwa mfano, kwenye Gemfury, na kisha kuingiza kazi kutoka kwake kwa miradi mingine, ili usiandike tena mara 1000, lakini zaidi juu ya hilo baadaye.

Kanuni ya 2: Tangaza kwa uwazi na tenga utegemezi

Kila mradi una maktaba tofauti unazoagiza kutoka nje ili kuzitumia mahali fulani. Iwe ni maktaba za Python, au maktaba za lugha zingine kwa madhumuni anuwai, au zana za mfumo - kazi yako ni:

  • Tangaza wazi utegemezi, yaani, faili ambayo itakuwa na maktaba, zana, na matoleo yote ambayo yanatumika katika mradi wako na ambayo lazima yasakinishwe (kwa mfano, katika Python hii inaweza kufanywa kwa kutumia Pipfile au requirements.txt. A kiungo kinachoruhusu vizuri kuelewa: realpython.com/pipenv-guide)
  • Tenga vitegemezi mahususi kwa programu yako wakati wa usanidi. Hutaki kubadilisha matoleo kila mara na kusakinisha upya, kwa mfano, Tensorflow?

Kwa njia hii, watengenezaji ambao watajiunga na timu yako katika siku zijazo wataweza kufahamiana haraka na maktaba na matoleo yao ambayo yanatumika katika mradi wako, na pia utakuwa na fursa ya kudhibiti matoleo na maktaba zenyewe zilizosanikishwa kwa maalum. mradi, ambayo itakusaidia kuzuia kutokubaliana kwa maktaba au matoleo yao.

Programu yako pia haipaswi kutegemea zana za mfumo ambazo zinaweza kusakinishwa kwenye OS mahususi. Zana hizi lazima pia zitangazwe katika faili ya utegemezi. Hii ni muhimu ili kuepuka hali ambapo toleo la zana (pamoja na upatikanaji wao) hailingani na zana za mfumo wa OS fulani.

Kwa hivyo, hata ikiwa curl inaweza kutumika karibu na kompyuta zote, bado unapaswa kuitangaza kwa utegemezi, kwani wakati wa kuhamia jukwaa lingine inaweza kuwa haipo au toleo halitakuwa lile ulilohitaji hapo awali.

Kwa mfano, requirements.txt yako inaweza kuonekana kama hii:

# 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

Kanuni ya 3: Mipangilio

Wengi wamesikia hadithi za wasanidi programu mbalimbali kupakia msimbo kwa bahati mbaya kwa GitHub kwenye hazina za umma na nywila na vitufe vingine kutoka kwa AWS, wakiamka siku iliyofuata wakiwa na deni la $6000, au hata $50000.

Kujifunza kwa Mashine ya Viwanda: Kanuni 10 za Usanifu

Kwa kweli, kesi hizi ni kali, lakini ni muhimu sana. Ikiwa utahifadhi kitambulisho chako au data nyingine inayohitajika kwa usanidi ndani ya nambari, unafanya makosa, na nadhani hakuna haja ya kueleza kwa nini.

Njia mbadala ya hii ni kuhifadhi usanidi katika anuwai za mazingira. Unaweza kusoma zaidi juu ya anuwai ya mazingira hapa.

Mifano ya data ambayo kwa kawaida huhifadhiwa katika anuwai za mazingira:

  • Majina ya vikoa
  • URL za API/URI
  • Funguo za umma na za kibinafsi
  • Anwani (barua, simu, n.k.)

Kwa njia hii sio lazima ubadilishe nambari kila wakati ikiwa anuwai za usanidi wako zitabadilika. Hii itakusaidia kuokoa muda, juhudi na pesa.

Kwa mfano, ikiwa unatumia API ya Kaggle kufanya majaribio (kwa mfano, pakua programu na uendeshe modeli kupitia hiyo ili kujaribu wakati wa kuendesha modeli inafanya kazi vizuri), basi funguo za kibinafsi kutoka Kaggle, kama vile KAGGLE_USERNAME na KAGGLE_KEY, zinapaswa kuwa. kuhifadhiwa katika vigezo vya mazingira.

Kanuni ya 4: Huduma za Watu Wengine

Wazo hapa ni kuunda programu kwa njia ambayo hakuna tofauti kati ya rasilimali za ndani na za tatu kwa suala la kanuni. Kwa mfano, unaweza kuunganisha MySQL ya ndani na wale wa tatu. Vile vile huenda kwa API mbalimbali kama vile Ramani za Google au API ya Twitter.

Ili kuzima huduma ya tatu au kuunganisha mwingine, unahitaji tu kubadilisha funguo katika usanidi katika vigezo vya mazingira, ambayo nilizungumzia katika aya hapo juu.

Kwa hivyo, kwa mfano, badala ya kutaja njia ya faili zilizo na hifadhidata ndani ya nambari kila wakati, ni bora kutumia maktaba ya pathlib na kutangaza njia ya hifadhidata kwenye config.py, ili haijalishi unatumia huduma gani (kwa kwa mfano, CircleCI), programu iliweza kujua njia ya hifadhidata kwa kuzingatia muundo wa mfumo mpya wa faili katika huduma mpya.

Kanuni ya 5. Kujenga, kutolewa, wakati wa kukimbia

Watu wengi katika Sayansi ya Data wanaona kuwa ni muhimu kuboresha ujuzi wao wa kuandika programu. Ikiwa tunataka programu yetu ivunjike mara chache iwezekanavyo na ifanye kazi bila kushindwa kwa muda mrefu iwezekanavyo, tunahitaji kugawanya mchakato wa kutoa toleo jipya katika hatua 3:

  1. Hatua makanisa. Unabadilisha nambari yako wazi na rasilimali za kibinafsi kuwa kifurushi kinachojulikana ambacho kina nambari na data zote muhimu. Kifurushi hiki kinaitwa mkusanyiko.
  2. Hatua kutolewa - hapa tunaunganisha usanidi wetu kwenye kusanyiko, bila ambayo hatutaweza kutoa programu yetu. Sasa hili ni toleo lililo tayari kabisa kuzinduliwa.
  3. Inayofuata inakuja hatua utimilifu. Hapa tunaachilia programu kwa kuendesha michakato muhimu kutoka kwa toleo letu.

Mfumo kama huo wa kutoa matoleo mapya ya mfano au bomba zima hukuruhusu kutenganisha majukumu kati ya wasimamizi na watengenezaji, hukuruhusu kufuatilia matoleo na kuzuia vituo visivyohitajika vya programu.

Kwa kazi ya kutolewa, huduma nyingi tofauti zimeundwa ambazo unaweza kuandika michakato ya kujiendesha katika faili ya .yml (kwa mfano, katika CircleCI hii ni config.yml kusaidia mchakato yenyewe). Wheely ni mzuri katika kuunda vifurushi vya miradi.

Unaweza kuunda vifurushi vilivyo na matoleo tofauti ya modeli yako ya kujifunza mashine, na kisha kuvifunga na kurejelea vifurushi vinavyohitajika na matoleo yake ili kutumia utendakazi ulizoandika kutoka hapo. Hii itakusaidia kuunda API ya mfano wako, na kifurushi chako kinaweza kupangishwa kwenye Gemfury, kwa mfano.

Kanuni ya 6. Endesha muundo wako kama mchakato mmoja au zaidi

Zaidi ya hayo, michakato haipaswi kuwa na data iliyoshirikiwa. Hiyo ni, michakato lazima iwepo tofauti, na kila aina ya data lazima iwepo tofauti, kwa mfano, kwenye huduma za watu wengine kama MySQL au zingine, kulingana na kile unachohitaji.

Hiyo ni, hakika haifai kuhifadhi data ndani ya mfumo wa faili wa mchakato, vinginevyo hii inaweza kusababisha kufuta data hii wakati wa kutolewa / mabadiliko ya usanidi au uhamisho wa mfumo ambao programu inaendesha.

Lakini kuna ubaguzi: kwa miradi ya kujifunza mashine, unaweza kuhifadhi akiba ya maktaba ili usiziweke tena kila wakati unapozindua toleo jipya, ikiwa hakuna maktaba za ziada au mabadiliko yoyote yamefanywa kwa matoleo yao. Kwa njia hii, utapunguza wakati inachukua kuzindua mfano wako katika tasnia.

Ili kuendesha kielelezo kama michakato kadhaa, unaweza kuunda faili ya .yml ambayo unabainisha michakato muhimu na mlolongo wao.

Kanuni ya 7: Kutumika tena

Michakato inayoendeshwa katika utumizi wa kielelezo chako inapaswa kuwa rahisi kuanza na kuacha. Kwa hivyo, hii itakuruhusu kupeleka haraka mabadiliko ya nambari, mabadiliko ya usanidi, kiwango cha haraka na rahisi, na kuzuia kuvunjika kwa toleo la kufanya kazi.

Hiyo ni, mchakato wako na mfano unapaswa:

  • Punguza muda wa kuanza. Kwa kweli, wakati wa kuanza (kutoka wakati amri ya kuanza ilitolewa hadi wakati mchakato unaanza kufanya kazi) haipaswi kuwa zaidi ya sekunde chache. Uhifadhi wa maktaba, ulioelezwa hapo juu, ni mbinu mojawapo ya kupunguza muda wa kuanza.
  • Maliza kwa usahihi. Hiyo ni, kusikiliza kwenye bandari ya huduma ni kweli kusimamishwa, na maombi mapya yaliyowasilishwa kwenye bandari hii hayatashughulikiwa. Hapa unahitaji kuanzisha mawasiliano mazuri na wahandisi wa DevOps, au kuelewa jinsi inavyofanya kazi mwenyewe (ikiwezekana, bila shaka, mwisho, lakini mawasiliano inapaswa kudumishwa kila wakati, katika mradi wowote!)

Kanuni ya 8: Usambazaji Unaoendelea/Muunganisho

Kampuni nyingi hutumia utengano kati ya timu za ukuzaji programu na upelekaji (kufanya programu ipatikane kwa watumiaji wa mwisho). Hii inaweza kupunguza kasi ya ukuzaji wa programu na maendeleo katika kuiboresha. Pia inaharibu tamaduni ya DevOps, ambapo maendeleo na ujumuishaji, takriban, zimeunganishwa.

Kwa hiyo, kanuni hii inasema kwamba mazingira yako ya maendeleo yanapaswa kuwa karibu iwezekanavyo na mazingira yako ya uzalishaji.

Hii itaruhusu:

  1. Punguza muda wa kutolewa kwa makumi ya nyakati
  2. Punguza idadi ya makosa kutokana na kutopatana kwa msimbo.
  3. Hii pia hupunguza mzigo wa kazi kwa wafanyikazi, kwa kuwa wasanidi programu na watu wanaotuma programu sasa ni timu moja.

Zana zinazokuruhusu kufanya kazi na hii ni CircleCI, Travis CI, GitLab CI na zingine.

Unaweza haraka kufanya nyongeza kwa mfano, kusasisha, na kuzindua mara moja, wakati itakuwa rahisi, ikiwa ni kushindwa, kurudi haraka sana kwenye toleo la kufanya kazi, ili mtumiaji wa mwisho hata asitambue. Hii inaweza kufanyika hasa kwa urahisi na kwa haraka ikiwa una vipimo vyema.

Punguza tofauti!!!

Kanuni ya 9. Kumbukumbu zako

Kumbukumbu (au "Kumbukumbu") ni matukio, kwa kawaida hurekodiwa katika umbizo la maandishi, ambayo hutokea ndani ya programu (mtiririko wa tukio). Mfano rahisi: "2020-02-02 - kiwango cha mfumo - jina la mchakato." Zimeundwa ili msanidi programu aweze kuona kihalisi kile kinachotokea wakati programu inaendeshwa. Anaona maendeleo ya michakato na anaelewa ikiwa ni kama msanidi mwenyewe alivyokusudia.

Kanuni hii inasema kwamba hupaswi kuhifadhi kumbukumbu zako ndani ya mfumo wako wa faili - unapaswa "kutoa" tu kwenye skrini, kwa mfano, fanya hivi kwenye pato la kawaida la mfumo. Na kwa njia hii itawezekana kufuatilia mtiririko katika terminal wakati wa maendeleo.

Je, hii ina maana kwamba hakuna haja ya kuhifadhi kumbukumbu hata kidogo? Bila shaka hapana. Programu yako haifai kufanya hiviβ€”iache kwa huduma za wahusika wengine. Programu yako inaweza tu kusambaza kumbukumbu kwa faili mahususi au terminal kwa kutazamwa kwa wakati halisi, au kuzisambaza kwa mfumo wa uhifadhi wa data wa madhumuni ya jumla (kama vile Hadoop). Programu yako yenyewe haipaswi kuhifadhi au kuingiliana na kumbukumbu.

Kanuni ya 10. Mtihani!

Kwa ujifunzaji wa mashine ya viwandani, awamu hii ni muhimu sana, kwani unahitaji kuelewa kuwa mfano hufanya kazi kwa usahihi na hutoa kile ulichotaka.

Majaribio yanaweza kuundwa kwa kutumia pytest, na kujaribiwa kwa kutumia hifadhidata ndogo ikiwa una kazi ya urekebishaji/uainishaji.

Usisahau kuweka mbegu sawa kwa mifano ya kujifunza kwa kina ili wasiweke mara kwa mara matokeo tofauti.

Hii ilikuwa maelezo mafupi ya kanuni 10, na, kwa kweli, ni ngumu kuzitumia bila kujaribu na kuona jinsi zinavyofanya kazi, kwa hivyo nakala hii ni utangulizi wa safu ya nakala za kupendeza ambazo nitafunua jinsi ya kuunda. miundo ya kujifunza mashine za viwandani , jinsi ya kuziunganisha kwenye mifumo, na jinsi kanuni hizi zinavyoweza kurahisisha maisha kwa ajili yetu sote.

Pia nitajaribu kutumia kanuni nzuri ambazo mtu yeyote anaweza kuacha kwenye maoni ikiwa anataka.

Chanzo: mapenzi.com

Kuongeza maoni