Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

entry

Sawubona!

Kulesi sihloko ngizokwabelana ngolwazi lwami lokwakha i-microservice architecture yephrojekthi esebenzisa amanethiwekhi e-neural.

Ake sikhulume ngezidingo zezakhiwo, sibheke imidwebo ehlukahlukene yesakhiwo, sihlaziye ingxenye ngayinye yezakhiwo eziqediwe, futhi sihlole amamethrikhi ezobuchwepheshe esixazululo.

Jabulela ukufunda!

Amagama ambalwa mayelana nenkinga nesixazululo sayo

Umqondo oyinhloko uwukuhlola ukukhanga komuntu esikalini samaphuzu ayishumi ngokusekelwe esithombeni.

Kulesi sihloko sizosuka ekuchazeni kokubili amanethiwekhi e-neural asetshenzisiwe kanye nenqubo yokulungiselela nokuqeqeshwa kwedatha. Nokho, kokunye kokushicilelwe okulandelayo, sizobuyela nakanjani ekuhlaziyeni ipayipi lokuhlola ezingeni elijulile.

Manje sizodlula emgqeni wokuhlola ezingeni eliphezulu, futhi sizogxila ekusebenzisaneni kwama-microservices kumongo wesakhiwo sephrojekthi iyonke. 

Lapho kusetshenzwa epayipini lokuhlola ukukhanga, umsebenzi wahlukaniswa waba yizingxenye ezilandelayo:

  1. Ukukhetha ubuso ezithombeni
  2. Isilinganiso somuntu ngamunye
  3. Nikeza umphumela

Eyokuqala ixazululwa ngamandla okuqeqeshwa ngaphambilini I-MTCNN. Okwesibili, inethiwekhi ye-convolutional neural yaqeqeshwa ku-PyTorch, kusetshenziswa I-ResNet34 - kusuka kubhalansi "ikhwalithi / isivinini sokucabanga ku-CPU"

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

Umdwebo osebenzayo wepayipi lokuhlola

Ukuhlaziywa kwezidingo zesakhiwo sephrojekthi

Emjikelezweni wokuphila ML Izigaba zephrojekthi yomsebenzi ekwakhiweni kwezakhiwo kanye ne-automation yokuthunyelwa kwamamodeli ngokuvamile ziphakathi kwezinto ezidla isikhathi kakhulu futhi ezidla izinsiza.

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

Umjikelezo wokuphila wephrojekthi ye-ML

Le phrojekthi ayihlukile - kwathathwa isinqumo sokugoqa ipayipi lokuhlola libe yinsizakalo ye-inthanethi, eyayidinga ukuthi sigxile ekwakhiweni kwezakhiwo. Izimfuneko ezilandelayo eziyisisekelo zihlonziwe:

  1. Isitoreji selogi esihlanganisiwe - zonke izinsizakalo kufanele zibhale izingodo endaweni eyodwa, kufanele kube lula ukuzihlaziya
  2. Amathuba okukalwa okuvundlile kwesevisi yokuhlola - njenge-Bottleneck okungenzeka kakhulu
  3. Inani elifanayo lezinsiza zokucubungula kufanele labelwe ukuhlola isithombe ngasinye ukuze kugwenywe abangaphandle ekusabalaliseni isikhathi sokuqagela.
  4. Ukuthunyelwa okusheshayo (kabusha) kokubili kwezinsizakalo ezithile kanye nesitaki sisonke
  5. Ikhono, uma kunesidingo, ukusebenzisa izinto ezivamile ezinkonzweni ezahlukene

bokwakha

Ngemuva kokuhlaziya izidingo, kwaba sobala ukuthi ukwakhiwa kwe-microservice kufanelana cishe ngokuphelele.

Ukuze kuqedwe ubuhlungu bekhanda obungenasidingo, i-Telegram API yakhethwa njengephambili.

Okokuqala, ake sibheke umdwebo wesakhiwo sezakhiwo eziqediwe, bese sidlulela encazelweni yengxenye ngayinye, futhi senze ngokusemthethweni inqubo yokucubungula isithombe ngempumelelo.

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

Umdwebo wesakhiwo wezakhiwo eziqediwe

Ake sikhulume ngokuningiliziwe mayelana nengxenye ngayinye yomdwebo, esiwubonisa Umthwalo Wemfanelo Owodwa ohlelweni lokuhlola isithombe.

I-Microservice “attrai-telegram-bot”

Le microservice ihlanganisa konke ukusebenzisana neTelegram API. Kunezimo ezi-2 eziyinhloko: ukusebenza ngesithombe sangokwezifiso nokusebenza ngomphumela wepayipi lokuhlola. Ake sibheke zombili lezi zimo ngokwemibandela ejwayelekile.

Uma uthola umlayezo wangokwezifiso onesithombe:

  1. Ukuhlunga kuyenziwa, okuhlanganisa ukuhlola okulandelayo:
    • Ukutholakala kosayizi wesithombe ophelele
    • Inombolo yezithombe zomsebenzisi esezivele zikulayini
  2. Lapho udlulisa ukuhlunga kokuqala, isithombe sigcinwa kuvolumu yedokha
  3. Umsebenzi ukhiqizwa kulayini "wo_ukulinganisa", ohlanganisa, phakathi kwezinye izinto, indlela eya esithombeni esitholakala kuvolumu yethu.
  4. Uma izinyathelo ezingenhla ziqedwa ngempumelelo, umsebenzisi uzothola umlayezo onesikhathi esilinganiselwe sokucubungula isithombe, esibalwa ngokusekelwe enanini lemisebenzi emgqeni. Uma kwenzeka iphutha, umsebenzisi uzokwaziswa ngokusobala ngokuthumela umlayezo onolwazi mayelana nokuthi yini okungenzeka ukuthi ayihambanga kahle.

Futhi, le sevisi encane, njengesisebenzi sesilimo esidliwayo esinamagatsha anamanzi, ilalela ulayini othi “after_estimate”, ohloselwe imisebenzi eye yadlula epayipini lokuhlola.

Lapho uthola umsebenzi omusha ku-“after_estimate”:

  1. Uma isithombe sicutshungulwe ngempumelelo, sithumela umphumela kumsebenzisi; uma kungenjalo, sazisa ngephutha.
  2. Ukukhipha isithombe esiwumphumela wepayipi lokuhlola

Evaluation microservice “attrai-estimator”

Le microservice isisebenzi sesilimo esidliwayo esinamagatsha anamanzi futhi ihlanganisa yonke into ehlobene nepayipi lokuhlola isithombe. Kune-algorithm eyodwa kuphela esebenzayo lapha - ake siyihlaziye.

Uma uthola umsebenzi omusha kokuthi “to_estimate”:

  1. Masisebenzise isithombe ngepayipi lokuhlola:
    1. Ilayisha isithombe kumemori
    2. Siletha isithombe kusayizi odingekayo
    3. Ithola bonke ubuso (MTCNN)
    4. Sihlola bonke ubuso (sigoqa ubuso obutholakala esinyathelweni sokugcina sibe yinqwaba kanye nesithenjwa esithi ResNet34)
    5. Nikeza isithombe sokugcina
      1. Masidwebe amabhokisi okubopha
      2. Ukudweba izilinganiso
  2. Isusa isithombe sangokwezifiso (sangempela).
  3. Ilondoloza okukhiphayo epayipini lokuhlola
  4. Sibeka umsebenzi kumugqa othi “after_estimate”, olalelwa yi-microservice ye-“attrai-telegram-bot” okukhulunywe ngayo ngenhla.

I-Greylog (+ mongoDB + Elasticsearch)

Mpunga iyisixazululo sokuphathwa kwelogi okumaphakathi. Kule phrojekthi, yasetshenziselwa inhloso yayo.

Ukukhetha kwawela kuye, hhayi kokujwayelekile Elk isitaki, ngenxa yokwenza lula ukusebenza nayo kusuka kuPython. Odinga ukukwenza ukuze ungene ku-Greylog ukwengeza i-GELFTCPHndler kusuka kuphakheji mpunga kubo bonke abanye abaphathi bezimpande ze-python microservice yethu.

Njengomuntu owake wasebenza kuphela nesitaki se-ELK, ngibe nesipiliyoni esihle lapho ngisebenza noGreylog. Okuwukuphela kwento ecindezelayo ukuphakama kwezici ze-Kibana ngaphezu kwe-interface yewebhu ye-Greylog.

RabbitMQ

RabbitMQ iwumthengisi womlayezo osuselwe kuphrothokholi ye-AMQP.

Kule phrojekthi isetshenziswe njenge ezinzile kakhulu futhi ihlolwe isikhathi umthengisi we-Celery futhi wasebenza ngemodi eqinile.

Redis

Redis iyi-NoSQL DBMS esebenza nezakhiwo zedatha enani elingukhiye

Kwesinye isikhathi kunesidingo sokusebenzisa izinto ezijwayelekile ezisebenzisa izakhiwo ezithile zedatha kuma-microservices ahlukene ePython.

Isibonelo, i-Redis igcina i-hashmap yefomu elithi “telegram_user_id => inombolo yemisebenzi esebenzayo kulayini,” ekuvumela ukuthi ukhawulele inani lezicelo ezivela kumsebenzisi oyedwa kuye kunani elithile futhi, ngalokho, uvimbele ukuhlaselwa kwe-DoS.

Ake senze ngokusemthethweni inqubo yokucubungula isithombe ngempumelelo

  1. Umsebenzisi uthumela isithombe ku-Telegraph bot
  2. "i-attrai-telegram-bot" ithola umlayezo ovela ku-Telegram API bese iyawudlulisa
  3. Umsebenzi onesithombe wengezwe kumugqa ongavumelani "to_estimate"
  4. Umsebenzisi uthola umlayezo onesikhathi sokuhlola esihleliwe
  5. I-“attrai-estimator” ithatha umsebenzi ukusuka kumugqa othi “to_estimate”, iqhuba izilinganiso ngepayipi futhi ikhiqize umsebenzi kumugqa othi “after_estimate”
  6. "attrai-telegram-bot" elalele ulayini "after_estimate", ithumela umphumela kumsebenzisi

I-DevOps

Ekugcineni, ngemuva kokubuyekeza ukwakheka, ungadlulela engxenyeni ethakazelisa ngokulinganayo - i-DevOps

I-Docker Swarm

 

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

I-Docker Swarm  - uhlelo lokuhlanganisa, ukusebenza kwalo okwenziwa ngaphakathi kwe-Docker Engine futhi lutholakala ngaphandle kwebhokisi.

Ngokusebenzisa "i-swarm", wonke ama-node ku-cluster yethu angahlukaniswa ngezinhlobo ezi-2 - isisebenzi nomphathi. Emishinini yohlobo lokuqala, amaqembu eziqukathi (izitaki) asetshenziswa, imishini yohlobo lwesibili inesibopho sokukala, ukulinganisa kanye nokulinganisa. ezinye izici ezipholile. Abaphathi nabo bangabasebenzi ngokuzenzakalelayo.

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

Iqoqo elinomphathi oyedwa kanye nabasebenzi abathathu

Ubuncane bosayizi weqoqo ongaba khona yinodi engu-1; umshini owodwa uzosebenza kanyekanye njengomphathi womholi nesisebenzi. Ngokusekelwe kubukhulu bephrojekthi kanye nezidingo ezincane zokubekezelela amaphutha, kunqunywe ukusebenzisa le ndlela.

Uma ngibheka phambili, ngizosho ukuthi kusukela ukulethwa kokuqala kokukhiqiza, okwakuphakathi noJuni, akuzange kube nezinkinga ezihlobene nale nhlangano yeqoqo (kodwa lokhu akusho ukuthi inhlangano enjalo iyamukeleka nganoma iyiphi indlela kunoma iyiphi i-medium-enkulu. amaphrojekthi, angaphansi kwezidingo zokubekezelela amaphutha).

I-Docker Stack

Kumodi ye-swarm, unesibopho sokuthumela izitaki (amasethi wezinsizakalo ze-docker) isitaki se-docker

Isekela i-docker-compose configs, ikuvumela ukuthi usebenzise izinketho zokusebenzisa.  

Isibonelo, kusetshenziswa la mapharamitha, izinsiza zesenzakalo ngasinye sokuhlaziya se-microservice zazikhawulelwe (sabela ama-N cores ezimweni ezingu-N, ku-microservice ngokwayo sikhawulela inani lama-cores asetshenziswa yi-PyTorch kokukodwa)

attrai_estimator:
  image: 'erqups/attrai_estimator:1.2'
  deploy:
    replicas: 4
    resources:
      limits:
        cpus: '4'
    restart_policy:
      condition: on-failure
      …

Kubalulekile ukuqaphela ukuthi i-Redis, i-RabbitMQ ne-Greylog yizinsizakalo ezisezingeni eliphezulu futhi azikwazi ukulinganiswa kalula njengokuthi "i-attrai-estimator"

Ukubikezela umbuzo - kungani kungenjalo uKubernetes?

Kubonakala sengathi ukusebenzisa i-Kubernetes kumaphrojekthi amancane naphakathi kuwumsebenzi ongaphezulu; konke ukusebenza okudingekayo kungatholwa ku-Docker Swarm, esebenziseka kalula ku-orchestrator yeziqukathi futhi enomkhawulo ophansi wokungena.

Ingqalasizinda

Konke lokhu kwafakwa ku-VDS ngezici ezilandelayo:

  • CPU: 4 core Intel® Xeon® Gold 5120 CPU @ 2.20GHz
  • RAM: 8 GB
  • I-SSD: 160 GB

Ngemva kokuhlolwa komthwalo wendawo, kwabonakala sengathi ngokutheleka okukhulu kwabasebenzisi, lo mshini uzokwanela.

Kodwa, ngokushesha ngemva kokuthunyelwa, ngithumele isixhumanisi kwelinye lamabhodi ezithombe ezidume kakhulu ku-CIS (yup, leyo efanayo), ngemva kwalokho abantu baba nesithakazelo futhi emahoreni ambalwa insizakalo icubungule ngempumelelo amashumi ezinkulungwane zezithombe. Ngesikhathi esifanayo, ngezikhathi eziphakeme kakhulu, izinsiza ze-CPU ne-RAM azizange zisetshenziswe ngisho nengxenye.

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural
Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

Ezinye ihluzo

Inombolo yabasebenzisi abahlukile nezicelo zokuhlaziya kusukela ekusetshenzisweni, kuye ngosuku

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

Ukusabalalisa isikhathi sokubikezela kwepayipi lokuhlola

Ukubuka konke okujwayelekile kwesakhiwo sesevisi sokuhlolwa kokubukeka okusekelwe kumanethiwekhi e-neural

okutholakele

Ukufingqa, ngingasho ukuthi ukwakheka kanye nendlela yokuhlelwa kweziqukathi zazizithethelela ngokugcwele - ngisho nangezikhathi eziphakeme kwakungekho maconsi noma ukuwohloka ngesikhathi sokucubungula. 

Ngicabanga ukuthi amaphrojekthi amancane naphakathi nendawo asebenzisa inference yesikhathi sangempela yamanethiwekhi e-neural ku-CPU enqubweni yawo angakwazi ukwamukela izinqubo ezichazwe kulesi sihloko.

Ngizokwengeza ukuthi ekuqaleni indatshana yayiyinde, kodwa ukuze ngingathumeli isikhathi eside, nginqume ukushiya amaphuzu athile kulesi sihloko - sizobuyela kuwo ezincwadini ezizayo.

Ungakwazi ukufaka i-bot kuTelegram - @AttraiBot, izosebenza okungenani kuze kube sekupheleni kwekwindla ka-2020. Ake ngikukhumbuze ukuthi ayikho idatha yomsebenzisi egciniwe - noma izithombe zangempela, noma imiphumela yepayipi lokuhlola - yonke into idilizwa ngemva kokucubungula.

Source: www.habr.com

Engeza amazwana