Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

entry

Hello!

Di vê gotarê de ez ê ezmûna xwe ya avakirina mîmariya mîkroxizmetê ji bo projeyek bi karanîna torên neuralî parve bikim.

Werin em li ser hewcedariyên mîmariyê biaxivin, li nexşeyên cihêreng ên strukturel binihêrin, her yek ji pêkhateyên mîmariya qediyayî analîz bikin, û her weha metrîkên teknîkî yên çareseriyê jî binirxînin.

Bixwînin!

Çend gotin li ser pirsgirêk û çareseriya wê

Fikra sereke ev e ku meriv balkêşiya kesek li ser pîvanek deh xalî li ser bingeha wêneyek binirxîne.

Di vê gotarê de em ê ji danasîna hem torên neuralî yên têne bikar anîn hem jî pêvajoya amadekirina daneyan û perwerdehiyê dûr bikevin. Lêbelê, di yek ji weşanên jêrîn de, em ê bê guman vegerin ser analîzkirina xeta nirxandinê di astek kûr de.

Naha em ê di asta jor de di xeta nirxandinê re derbas bibin, û em ê di çarçoweya mîmariya giştî ya projeyê de balê bikişînin ser pêwendiya mîkroxizmetan. 

Dema ku li ser xeta nirxandina balkêşiyê xebitîn, peywir di beşên jêrîn de hate dabeş kirin:

  1. Hilbijartina rûyên di wêneyan de
  2. Rêjeya her kesî
  3. Encamê bidin

Ya yekem ji hêla hêzên pêş-perwerdekirî ve tê çareser kirin MTCNN. Ji bo ya duyemîn, torgilokek neuralî ya konvolutional li ser PyTorch hate perwerde kirin, bi kar anîn ResNet34 - ji hevsengiya "kalîte / leza encamdana li ser CPU"

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Diagrama fonksiyonê ya lûleya nirxandinê

Analîza daxwazên mîmariya projeyê

Di çerxa jiyanê de ML qonaxên projeyê yên xebatê yên li ser mîmarî û otomasyona bicîhkirina modelê bi gelemperî di nav demên herî dem dixwe û çavkaniyê dixwe.

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Dewreya jiyanê ya projeyek ML

Ev proje ne îstîsna ye - biryar hate girtin ku lûleya nirxandinê di nav karûbarek serhêl de bipêçin, ku hewce dike ku em xwe di nav mîmariyê de binixumînin. Pêdiviyên bingehîn ên jêrîn hatine destnîşankirin:

  1. Hilberîna têketinê ya yekbûyî - Pêdivî ye ku hemî karûbar li yek cîhek têketin binivîsin, divê ew ji bo analîzkirinê hêsan bin
  2. Ihtîmala pîvandina horizontî ya karûbarê nirxandinê - wekî herî gengaz Bottleneck
  3. Ji bo nirxandina her wêneyê divê heman mîqdara çavkaniyên pêvajoyê were veqetandin da ku di belavkirina wextê ji bo encamnameyê de ji derveyî dûr nekevin.
  4. Bi lez (ji nû ve) danîna hem karûbarên taybetî û hem jî stackê bi tevahî
  5. Ger hewce be, şiyana karanîna tiştên hevpar di karûbarên cûda de

avakarî

Piştî analîzkirina hewcedariyên, diyar bû ku mîmariya mîkroxizmet hema hema bêkêmasî pêk tê.

Ji bo ku hûn ji serêşên nehewce xilas bibin, API-ya Telegram wekî pêşîn hate hilbijartin.

Pêşîn, bila em li şemaya strukturî ya mîmariya qediyayî binihêrin, dûv re derbasî ravekirina her yek ji pêkhateyan bibin, û di heman demê de pêvajoya hilanîna wêneya serketî fermî bikin.

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Diyagrama strukturel a mîmariya qediyayî

Ka em bi hûrgulî li ser her yek ji hêmanên diagramê biaxivin, û wan di pêvajoya nirxandina wêneyê de Berpirsiyariya Yekane destnîşan bikin.

Microservice "attrai-telegram-bot"

Ev microservice hemî danûstendinên bi Telegram API-ê re vedigire. 2 senaryoyên sereke hene: bi wêneyek xwerû re xebitîn û bi encama boriyek nirxandinê re xebitîn. Werin em li her du senaryoyan bi giştî binêrin.

Dema ku peyamek xwerû ya bi wêneyek werdigire:

  1. Parzûnkirin tê kirin, ku ji kontrolên jêrîn pêk tê:
    • Hebûna mezinahiya wêneya çêtirîn
    • Hejmara wêneyên bikarhêner jixwe di rêzê de ye
  2. Dema ku fîlterkirina destpêkê derbas dibe, wêne di volga dokerê de tê hilanîn
  3. Peywirek di rêza "to_estimate" de tê hilberandin, ku di nav tiştên din de, rêça wêneya ku di cildê me de ye jî vedihewîne.
  4. Ger gavên li jor bi serfirazî qediyan, bikarhêner dê peyamek bi wextê pêvekirina wêneyê ya texmînî, ku li ser bingeha hejmara peywirên di rêzê de tê hesibandin, bistîne. Ger xeletiyek çêbibe, bikarhêner dê bi şandina peyamek bi agahdariya li ser tiştê ku dibe ku xelet çûbe bi eşkere were agahdar kirin.

Di heman demê de, ev mîkroxizmet, mîna xebatkarek kerfes, guh dide rêza "after_estimate", ku ji bo karên ku di xeta nirxandinê re derbas bûne ve hatî armanc kirin.

Dema ku peywirek nû ji "after_estimate" distîne:

  1. Ger wêne bi serfirazî were hilanîn, em encamê ji bikarhênerê re dişînin; heke na, em li ser xeletiyek agahdar dikin.
  2. Rakirina wêneyê ku encama lûleya nirxandinê ye

Microservice Nirxandina "attrai-estimator"

Ev mîkroxizmet xebatkarek kerfes e û her tiştê ku bi xeta nirxandina wêneyê ve girêdayî ye vedihewîne. Li vir tenê algorîtmayek xebitandinê heye - em wê analîz bikin.

Dema ku peywirek nû ji "to_estimate" werdigire:

  1. Ka em wêneyê di nav lûleya nirxandinê de bimeşînin:
    1. Barkirina wêneyê di bîranînê de
    2. Em wêneyê bi mezinahiya pêwîst tînin
    3. Dîtina Hemî Rûyan (MTCNN)
    4. Em hemî rûyan dinirxînin (em rûyên ku di gava paşîn de hatine dîtin di nav komek û encamek ResNet34 de dipêçin)
    5. Wêneyê dawîn bidin
      1. Ka em qutiyên sînor xêz bikin
      2. Nirxandina nirxan
  2. Jêbirina wêneyek xwerû (orijînal).
  3. Sazkirina encam ji lûleya nirxandinê
  4. Em peywirê dixin rêza "after_estimate", ya ku ji hêla mîkroxizmeta "attrai-telegram-bot" ya ku li jor hatî nîqaş kirin tê guhdarî kirin.

Graylog (+ mongoDB + Elasticsearch)

graylog çareseriyek ji bo rêveberiya têketinê ya navendî ye. Di vê projeyê de, ew ji bo armanca xwe tê bikaranîn.

Hilbijartin li ser wî ket, û ne li ser ya adetî ELK stack, ji ber rehetiya xebata bi wê re ji Python. Tişta ku hûn hewce ne bikin ku hûn têkevin Graylog ev e ku GELFTCPHandler ji pakêtê zêde bikin gewr ji yên mayî hilgirên root logger ên mîkroxizmeta meya python re.

Wekî kesek ku berê tenê bi stacka ELK-ê re xebitîbû, dema ku bi Graylog re dixebitî min bi tevahî ezmûnek erênî hebû. Tiştê ku dilşikestî ye serweriya taybetmendiyên Kibana li ser navbeynkariya tevna Graylog e.

Rabbit MQ

Rabbit MQ brokerek peyamê ye ku li ser bingeha protokola AMQP-ê ye.

Di vê projeyê de wekî ku hate bikar anîn ya herî bi îstîqrar û dem-ceribandin broker ji bo Celery û di moda domdar de xebitî.

Redis

Redis DBMSek NoSQL ye ku bi strukturên daneya key-nirxê re dixebite

Carinan hewce ye ku tiştên hevpar ên ku di mîkroxizmetên cihêreng ên Python de hin strukturên daneyê bicîh dikin bikar bînin.

Mînakî, Redis nexşeyek bi forma "telegram_user_id => hejmara peywirên çalak di rêzê de" hilîne, ku destûrê dide te ku hejmara daxwazên ji yek bikarhêner bi nirxek diyarkirî sînordar bike û, bi vî rengî, pêşî li êrîşên DoS bigire.

Werin em prosesa hilanîna wêneya serketî fermî bikin

  1. Bikarhêner wêneyek ji bot Telegram re dişîne
  2. "attrai-telegram-bot" ji Telegram API-ê peyamek distîne û wê pars dike
  3. Karê bi wêneyê re li rêza asynchronous "to_estimate" tê zêdekirin
  4. Bikarhêner bi dema nirxandina plankirî re peyamek distîne
  5. "attrai-estimator" peywirek ji rêza "to_estimate" digire, texmînan di nav boriyê de dimeşîne û peywirê di rêza "after_estimate" de hildiberîne.
  6. "attrai-telegram-bot" li rêza "after_estimate" guhdarî dike, encamê ji bikarhênerê re dişîne.

DevOps

Di dawiyê de, piştî nirxandina mîmariyê, hûn dikarin biçin beşa heman balkêş - DevOps

Docker swarm

 

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Docker swarm  - Pergalek komkirinê, fonksiyona ku di hundurê Docker Engine de tête bicîh kirin û ji qutiyê ve tête peyda kirin.

Bi karanîna "swarm", hemî girêkên di koma me de dikarin li 2 celeb - karker û rêveber werin dabeş kirin. Li ser makîneyên celebê yekem, komên konteyneran (stacks) têne bicîh kirin, makîneyên celebê duyemîn berpirsiyar in ji pîvandin, hevsengkirin û taybetmendiyên din ên xweş. Rêvebir jî bi xweber karker in.

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Bi yek rêveberê serok û sê karkeran re kom bibin

Mezinahiya komê ya herî hindik 1 nodek e; makîneyek yekane dê di heman demê de wekî rêveberek serok û xebatkar tevbigere. Li ser bingeha mezinahiya projeyê û hewcedariyên hindiktirîn ên ji bo tolerasyona xeletiyê, biryar hat girtin ku ev nêzîkatî were bikar anîn.

Li pêş çavan, ez ê bibêjim ku ji radestkirina yekem a hilberînê, ku di nîvê hezîranê de bû, bi vê rêxistina komê re ti pirsgirêk çênebûne (lê ev nayê vê wateyê ku rêxistinek weha bi tu awayî di her navîn-mezin de tê pejirandin. projeyên, ku di bin daxwazên tolerasyona xeletiyê de ne).

Docker Stack

Di moda swarm de, ew berpirsiyar e ku stûnan bicîh bike (komên karûbarên docker) docker stack

Ew mîhengên docker-compose piştgirî dike, ku dihêle hûn wekî din parametreyên bicîhkirinê bikar bînin.  

Mînakî, bi karanîna van parameteran, çavkaniyên ji bo her yek ji mînakên mîkroxizmeta nirxandinê sînordar bûn (em N core ji bo N mînakan vediqetînin, di mîkroxizmetê bixwe de em hejmara navikên ku ji hêla PyTorch ve têne bikar anîn bi yek sînordar dikin)

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

Girîng e ku were zanîn ku Redis, RabbitMQ û Graylog karûbarên dewletparêz in û ew bi hêsanî wekî "attrai-estimator" nayên pîvandin.

Pêşniyara pirsê - çima Kubernetes ne?

Wusa dixuye ku karanîna Kubernetes di projeyên piçûk û navîn de serjimarek e; Hemî fonksiyonên pêwîst dikarin ji Docker Swarm, ku ji bo orkestratorek konteynerê pir bikarhêner-heval e û di têketinê de jî astengiyek kêm e, were wergirtin.

Binesaziya

Hemî ev bi taybetmendiyên jêrîn li ser VDS-ê hate bicîh kirin:

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

Piştî ceribandina barkirina herêmî, wusa dixuye ku bi ketina ciddî ya bikarhêneran re, ev makîne dê bes be.

Lê, tavilê piştî bicîhkirinê, min girêdanek ji yek ji wêneyên herî populer ên CIS re şand (erê, ew heman yek), piştî ku mirov eleqedar bûn û di çend demjimêran de karûbar bi deh hezaran wêne bi serfirazî pêvajo kir. Di heman demê de, di demên pezê de, çavkaniyên CPU û RAM-ê nîvî jî nehatin bikar anîn.

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî
Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Hinek grafîkên din

Hejmara bikarhênerên bêhempa û daxwazên nirxandinê ji dema bicîhkirinê ve, li gorî rojê ve girêdayî ye

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

Dabeşkirina dema encamdana boriyê ya nirxandinê

Nêrîna giştî ya mîmariya karûbarê ji bo nirxandina xuyangê li ser bingeha torên neuralî

vebiguherin

Bi kurtasî, ez dikarim bibêjim ku mîmarî û nêzîkatiya orkestrasyona konteyneran bi tevahî xwe rastdar kir - tewra di demên pez de di dema pêvajoyê de ti daketin û şînbûn çênebû. 

Ez difikirim ku projeyên piçûk û navîn ên ku di pêvajoya xwe de encamên rastîn ên torên neuralî li ser CPU-yê bikar tînin dikarin bi serfirazî pratîkên ku di vê gotarê de hatine destnîşan kirin bipejirînin.

Ez ê lê zêde bikim ku di destpêkê de gotar dirêjtir bû, lê ji bo ku ez demek dirêj neşînim, min biryar da ku di vê gotarê de hin xalan derxim - em ê di weşanên pêşerojê de vegerin.

Hûn dikarin botê li Telegram - @AttraiBot bişkînin, ew ê herî kêm heya dawiya payîza 2020-an bixebite. Bihêle ez ji we re bi bîr bînim ku tu daneyên bikarhêner nayê hilanîn - ne wêneyên orîjînal, ne jî encamên lûleya nirxandinê - her tişt piştî pêvajoyê tê hilweşandin.

Source: www.habr.com

Add a comment