Dysgu Peiriannau Diwydiannol: 10 Egwyddor Dylunio

Dysgu Peiriannau Diwydiannol: 10 Egwyddor Dylunio

Y dyddiau hyn, mae gwasanaethau newydd, cymwysiadau a rhaglenni pwysig eraill yn cael eu creu bob dydd sy'n ei gwneud hi'n bosibl creu pethau anhygoel: o feddalwedd ar gyfer rheoli roced SpaceX i ryngweithio â thegell yn yr ystafell nesaf trwy ffôn clyfar.

Ac, weithiau, mae pob rhaglennydd newydd, p'un a yw'n ddechreuwr angerddol neu'n Bentwr Llawn neu'n Wyddonydd Data arferol, yn hwyr neu'n hwyrach yn dod i sylweddoli bod yna rai rheolau ar gyfer rhaglennu a chreu meddalwedd sy'n symleiddio bywyd yn fawr.

Yn yr erthygl hon, byddaf yn disgrifio'n fyr 10 egwyddor o sut i raglennu dysgu peiriannau diwydiannol fel y gellir ei integreiddio'n hawdd i gymhwysiad / gwasanaeth, yn seiliedig ar fethodoleg App 12-ffactor. awgrymwyd gan dîm Heroku. Fy menter yw cynyddu ymwybyddiaeth o'r dechneg hon, a all helpu llawer o ddatblygwyr a phobl gwyddor data.

Mae'r erthygl hon yn brolog i gyfres o erthyglau am Ddysgu Peiriannau diwydiannol. Ynddyn nhw byddaf yn siarad ymhellach am sut i wneud model mewn gwirionedd a'i lansio i gynhyrchu, creu API ar ei gyfer, yn ogystal ag enghreifftiau o wahanol feysydd a chwmnïau sydd wedi ymgorffori ML yn eu systemau.

Egwyddor 1: Un sylfaen cod

Mae rhai rhaglenwyr yn y camau cyntaf, allan o ddiogi i ddarganfod hynny (neu am ryw reswm eu hunain), yn anghofio am Git. Maen nhw naill ai'n anghofio'r gair yn llwyr, hynny yw, maen nhw'n taflu ffeiliau at ei gilydd yn y dreif / dim ond taflu testun / anfon gyda cholomennod, neu dydyn nhw ddim yn meddwl trwy eu llif gwaith, ac yn ymrwymo pob un i'w cangen ei hun, ac yna i'r meistr.

Mae’r egwyddor hon yn datgan: cael un sylfaen cod a llawer o leoliadau.

Gellir defnyddio git wrth gynhyrchu ac mewn ymchwil a datblygu, lle na chaiff ei ddefnyddio mor aml.

Er enghraifft, yn y cyfnod Ymchwil a Datblygu gallwch chi adael ymrwymiad gyda gwahanol ddulliau a modelau prosesu data, er mwyn dewis yr un gorau a pharhau i weithio gydag ef ymhellach yn hawdd.

Yn ail, wrth gynhyrchu mae hwn yn beth anadferadwy - bydd angen i chi edrych yn gyson ar sut mae'ch cod yn newid a gwybod pa fodel a gynhyrchodd y canlyniadau gorau, pa god a weithiodd yn y diwedd a beth ddigwyddodd a achosodd iddo roi'r gorau i weithio neu ddechrau cynhyrchu canlyniadau anghywir . Dyna beth yw pwrpas ymrwymo!

Gallwch hefyd greu pecyn o'ch prosiect, gan ei osod, er enghraifft, ar Gemfury, ac yna mewnforio swyddogaethau ohono ar gyfer prosiectau eraill, er mwyn peidio â'u hailysgrifennu 1000 o weithiau, ond mwy ar hynny yn ddiweddarach.

Egwyddor 2: Datgan yn glir ac ynysu dibyniaethau

Mae gan bob prosiect lyfrgelloedd gwahanol rydych chi'n eu mewnforio o'r tu allan er mwyn eu cymhwyso yn rhywle. Boed yn llyfrgelloedd Python, neu lyfrgelloedd o ieithoedd eraill at wahanol ddibenion, neu offer system - eich tasg yw:

  • Datgan dibyniaethau yn glir, hynny yw, ffeil a fydd yn cynnwys yr holl lyfrgelloedd, offer, a'u fersiynau a ddefnyddir yn eich prosiect ac y mae'n rhaid eu gosod (er enghraifft, yn Python gellir gwneud hyn gan ddefnyddio Pipfile neu requirements.txt. A. cyswllt sy'n caniatáu da i ddeall: realpython.com/pipenv-guide)
  • Arwahanwch ddibyniaethau yn benodol ar gyfer eich rhaglen yn ystod datblygiad. Nid ydych chi eisiau newid fersiynau yn gyson ac ailosod, er enghraifft, Tensorflow?

Fel hyn, bydd datblygwyr a fydd yn ymuno â'ch tîm yn y dyfodol yn gallu dod yn gyfarwydd yn gyflym â'r llyfrgelloedd a'u fersiynau a ddefnyddir yn eich prosiect, a byddwch hefyd yn cael y cyfle i reoli'r fersiynau a'r llyfrgelloedd eu hunain sydd wedi'u gosod ar gyfer rhaglen benodol. prosiect, a fydd yn eich helpu i osgoi anghydnawsedd llyfrgelloedd neu eu fersiynau.

Ni ddylai eich cais hefyd ddibynnu ar offer system y gellir eu gosod ar OS penodol. Rhaid datgan yr offer hyn hefyd yn yr amlygrwydd dibyniaethau. Mae hyn yn angenrheidiol er mwyn osgoi sefyllfaoedd lle nad yw fersiwn yr offer (yn ogystal â'u hargaeledd) yn cyd-fynd ag offer system OS penodol.

Felly, hyd yn oed os gellir defnyddio cyrl ar bron pob cyfrifiadur, dylech chi ei ddatgan mewn dibyniaethau o hyd, oherwydd wrth fudo i blatfform arall efallai na fydd yno neu nid y fersiwn fydd yr un yr oedd ei angen arnoch yn wreiddiol.

Er enghraifft, gallai eich gofynion.txt edrych fel hyn:

# 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

Egwyddor 3: Cyfluniadau

Mae llawer wedi clywed straeon am wahanol ddatblygwr yn uwchlwytho cod yn ddamweiniol i GitHub i ystorfeydd cyhoeddus gyda chyfrineiriau ac allweddi eraill gan AWS, gan ddeffro drannoeth gyda dyled o $6000, neu hyd yn oed $50000.

Dysgu Peiriannau Diwydiannol: 10 Egwyddor Dylunio

Wrth gwrs, mae'r achosion hyn yn eithafol, ond yn arwyddocaol iawn. Os ydych chi'n storio'ch tystlythyrau neu ddata arall sydd ei angen ar gyfer cyfluniad y tu mewn i'r cod, rydych chi'n gwneud camgymeriad, a chredaf nad oes angen esbonio pam.

Dewis arall yn lle hyn yw storio ffurfweddiadau mewn newidynnau amgylchedd. Gallwch ddarllen mwy am newidynnau amgylchedd yma.

Enghreifftiau o ddata sydd fel arfer yn cael ei storio mewn newidynnau amgylchedd:

  • Enwau parth
  • URLs API/URI's
  • Allweddi cyhoeddus a phreifat
  • Cysylltiadau (post, ffonau, ac ati)

Fel hyn nid oes rhaid i chi newid y cod yn gyson os bydd eich newidynnau cyfluniad yn newid. Bydd hyn yn eich helpu i arbed amser, ymdrech ac arian.

Er enghraifft, os ydych chi'n defnyddio'r Kaggle API i gynnal profion (er enghraifft, lawrlwythwch y feddalwedd a rhedeg y model trwyddo i brofi wrth redeg bod y model yn gweithio'n dda), yna dylai allweddi preifat o Kaggle, megis KAGGLE_USERNAME a KAGGLE_KEY, fod storio mewn newidynnau amgylchedd.

Egwyddor 4: Gwasanaethau Trydydd Parti

Y syniad yma yw creu’r rhaglen yn y fath fodd fel nad oes gwahaniaeth rhwng adnoddau lleol a thrydydd parti o ran cod. Er enghraifft, gallwch gysylltu MySQL lleol a rhai trydydd parti. Mae'r un peth yn wir am APIs amrywiol fel Google Maps neu Twitter API.

Er mwyn analluogi gwasanaeth trydydd parti neu gysylltu un arall, does ond angen i chi newid yr allweddi yn y ffurfweddiad yn y newidynnau amgylchedd, y soniais amdanynt yn y paragraff uchod.

Felly, er enghraifft, yn lle nodi'r llwybr i ffeiliau gyda setiau data y tu mewn i'r cod bob tro, mae'n well defnyddio'r llyfrgell pathlib a datgan y llwybr i'r setiau data yn config.py, fel na waeth pa wasanaeth rydych chi'n ei ddefnyddio (ar gyfer enghraifft, CircleCI), roedd y rhaglen yn gallu darganfod y llwybr i'r setiau data gan ystyried strwythur y system ffeiliau newydd yn y gwasanaeth newydd.

Egwyddor 5. Adeiladu, rhyddhau, amser rhedeg

Mae llawer o bobl mewn Gwyddor Data yn ei chael yn ddefnyddiol i wella eu sgiliau ysgrifennu meddalwedd. Os ydym am i’n rhaglen chwalu mor anaml â phosibl a gweithio heb fethiannau cyhyd â phosibl, mae angen i ni rannu’r broses o ryddhau fersiwn newydd yn 3 cham:

  1. Cam gwasanaethau. Rydych chi'n trawsnewid eich cod noeth gydag adnoddau unigol yn becyn fel y'i gelwir sy'n cynnwys yr holl god a data angenrheidiol. Gelwir y pecyn hwn yn gynulliad.
  2. Cam rhyddhau — yma rydym yn cysylltu ein cyfluniad â'r cynulliad, heb hynny ni fyddem yn gallu rhyddhau ein rhaglen. Nawr mae hwn yn ddatganiad cwbl barod i'w lansio.
  3. Nesaf daw'r llwyfan cyflawniad. Yma rydyn ni'n rhyddhau'r cais trwy redeg y prosesau angenrheidiol o'n datganiad.

Mae system o'r fath ar gyfer rhyddhau fersiynau newydd o fodel neu'r biblinell gyfan yn caniatáu ichi wahanu rolau rhwng gweinyddwyr a datblygwyr, yn caniatáu ichi olrhain fersiynau ac yn atal stopiau diangen o'r rhaglen.

Ar gyfer y dasg rhyddhau, mae llawer o wahanol wasanaethau wedi'u creu lle gallwch chi ysgrifennu prosesau i redeg eich hun mewn ffeil .yml (er enghraifft, yn CircleCI dyma config.yml i gefnogi'r broses ei hun). Mae Wheely yn wych am greu pecynnau ar gyfer prosiectau.

Gallwch greu pecynnau gyda gwahanol fersiynau o'ch model dysgu peiriant, ac yna eu pecynnu a chyfeirio at y pecynnau angenrheidiol a'u fersiynau i ddefnyddio'r swyddogaethau a ysgrifennoch oddi yno. Bydd hyn yn eich helpu i greu API ar gyfer eich model, a gellir cynnal eich pecyn ar Gemfury, er enghraifft.

Egwyddor 6. Rhedeg eich model fel un neu fwy o brosesau

At hynny, ni ddylai prosesau fod wedi rhannu data. Hynny yw, rhaid i brosesau fodoli ar wahân, a rhaid i bob math o ddata fodoli ar wahân, er enghraifft, ar wasanaethau trydydd parti fel MySQL neu eraill, yn dibynnu ar yr hyn sydd ei angen arnoch chi.

Hynny yw, yn bendant nid yw'n werth storio data y tu mewn i'r system ffeiliau proses, fel arall gall hyn arwain at glirio'r data hwn yn ystod y datganiad nesaf / newid ffurfweddiadau neu drosglwyddiad y system y mae'r rhaglen yn rhedeg arni.

Ond mae eithriad: ar gyfer prosiectau dysgu peiriannau, gallwch storio storfa o lyfrgelloedd er mwyn peidio â'u hailosod bob tro y byddwch chi'n lansio fersiwn newydd, os nad oes llyfrgelloedd ychwanegol neu unrhyw newidiadau wedi'u gwneud i'w fersiynau. Fel hyn, byddwch yn lleihau'r amser y mae'n ei gymryd i lansio'ch model mewn diwydiant.

I redeg y model fel sawl proses, gallwch greu ffeil .yml lle rydych chi'n nodi'r prosesau angenrheidiol a'u dilyniant.

Egwyddor 7: Ailgylchadwyedd

Dylai'r prosesau sy'n rhedeg yn eich cais enghreifftiol fod yn hawdd i'w cychwyn a'u hatal. Felly, bydd hyn yn caniatáu ichi ddefnyddio newidiadau cod yn gyflym, newidiadau cyfluniad, graddfa gyflym a hyblyg, ac atal dadansoddiadau posibl o'r fersiwn weithio.

Hynny yw, dylai eich proses gyda'r model:

  • Lleihau amser cychwyn. Yn ddelfrydol, ni ddylai'r amser cychwyn (o'r eiliad y cyhoeddwyd y gorchymyn cychwyn i'r eiliad y daw'r broses i rym) fod yn fwy nag ychydig eiliadau. Mae caching llyfrgell, a ddisgrifir uchod, yn un dechneg ar gyfer lleihau amser cychwyn.
  • Gorffen yn gywir. Hynny yw, mae gwrando ar y porthladd gwasanaeth wedi'i atal mewn gwirionedd, ac ni fydd ceisiadau newydd a gyflwynir i'r porthladd hwn yn cael eu prosesu. Yma mae angen i chi naill ai sefydlu cyfathrebu da gyda pheirianwyr DevOps, neu ddeall sut mae'n gweithio eich hun (yn ddelfrydol, wrth gwrs, yr olaf, ond dylid cynnal cyfathrebu bob amser, mewn unrhyw brosiect!)

Egwyddor 8: Defnydd/Integreiddio Parhaus

Mae llawer o gwmnïau'n defnyddio gwahaniad rhwng y timau datblygu a defnyddio cymwysiadau (sicrhau bod y rhaglen ar gael i ddefnyddwyr terfynol). Gall hyn arafu datblygiad meddalwedd yn fawr a chynnydd wrth ei wella. Mae hefyd yn difetha diwylliant DevOps, lle mae datblygiad ac integreiddio, yn fras, wedi'u cyfuno.

Felly, mae'r egwyddor hon yn nodi y dylai eich amgylchedd datblygu fod mor agos â phosibl at eich amgylchedd cynhyrchu.

Bydd hyn yn caniatáu:

  1. Lleihau amser rhyddhau gan ddegau o weithiau
  2. Lleihau nifer y gwallau oherwydd anghydnawsedd cod.
  3. Mae hyn hefyd yn lleihau'r llwyth gwaith ar staff, gan fod datblygwyr a phobl sy'n defnyddio'r rhaglen bellach yn un tîm.

Offer sy'n eich galluogi i weithio gyda hyn yw CircleCI, Travis CI, GitLab CI ac eraill.

Gallwch chi wneud ychwanegiadau i'r model yn gyflym, ei ddiweddaru, a'i lansio ar unwaith, tra bydd yn hawdd, rhag ofn methiannau, ddychwelyd yn gyflym iawn i'r fersiwn waith, fel na fydd y defnyddiwr terfynol hyd yn oed yn sylwi arno. Gellir gwneud hyn yn arbennig o hawdd ac yn gyflym os cewch brofion da.

Lleihau gwahaniaethau!!!

Egwyddor 9. Eich logiau

Mae logiau (neu “Logiau”) yn ddigwyddiadau, a gofnodir fel arfer ar ffurf testun, sy'n digwydd o fewn y rhaglen (ffrwd digwyddiad). Enghraifft syml: "2020-02-02 - lefel system - enw proses." Maent wedi'u cynllunio fel bod y datblygwr yn gallu gweld yn llythrennol beth sy'n digwydd pan fydd y rhaglen yn rhedeg. Mae'n gweld cynnydd prosesau ac yn deall a yw fel y bwriadwyd gan y datblygwr ei hun.

Mae'r egwyddor hon yn nodi na ddylech storio'ch logiau y tu mewn i'ch system ffeiliau - dylech eu “allbynnu” i'r sgrin, er enghraifft, gwnewch hyn ar allbwn safonol y system. Ac yn y modd hwn bydd yn bosibl monitro'r llif yn y derfynell yn ystod y datblygiad.

A yw hyn yn golygu nad oes angen cadw logiau o gwbl? Wrth gwrs ddim. Ni ddylai eich cais wneud hyn - gadewch ef i wasanaethau trydydd parti. Dim ond i ffeil neu derfynell benodol y gall eich cais ei hanfon ymlaen i'w gwylio mewn amser real, neu eu hanfon ymlaen i system storio data pwrpas cyffredinol (fel Hadoop). Ni ddylai eich cais ei hun storio na rhyngweithio â logiau.

Egwyddor 10. Prawf!

Ar gyfer dysgu peiriannau diwydiannol, mae'r cam hwn yn hynod bwysig, gan fod angen i chi ddeall bod y model yn gweithio'n gywir ac yn cynhyrchu'r hyn yr oeddech ei eisiau.

Gellir creu profion gan ddefnyddio pytest, a'u profi gan ddefnyddio set ddata fach os oes gennych dasg atchweliad/dosbarthiad.

Peidiwch ag anghofio gosod yr un hedyn ar gyfer modelau dysgu dwfn fel nad ydynt yn cynhyrchu canlyniadau gwahanol yn gyson.

Roedd hwn yn ddisgrifiad byr o'r 10 egwyddor, ac, wrth gwrs, mae'n anodd eu defnyddio heb geisio gweld sut maen nhw'n gweithio, felly dim ond prolog yw'r erthygl hon i gyfres o erthyglau diddorol lle byddaf yn datgelu sut i greu modelau dysgu peiriannau diwydiannol , sut i'w hintegreiddio i systemau, a sut y gall yr egwyddorion hyn wneud bywyd yn haws i bob un ohonom.

Byddaf hefyd yn ceisio defnyddio egwyddorion cŵl y gall unrhyw un eu gadael yn y sylwadau os dymunant.

Ffynhonnell: hab.com

Ychwanegu sylw