Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Dħul

Hi!

F'dan l-artikolu ser naqsam l-esperjenza tiegħi tal-bini ta 'arkitettura ta' mikroservizz għal proġett li juża netwerks newrali.

Ejja nitkellmu dwar ir-rekwiżiti tal-arkitettura, tħares lejn diversi dijagrammi strutturali, tanalizza kull wieħed mill-komponenti tal-arkitettura lesta, u tevalwa wkoll il-metriċi tekniċi tas-soluzzjoni.

Ħu pjaċir taqra!

Ftit kelmiet dwar il-problema u s-soluzzjoni tagħha

L-idea ewlenija hija li tevalwa l-attrazzjoni ta 'persuna fuq skala ta' għaxar punti bbażata fuq ritratt.

F'dan l-artikolu ser nimxu 'l bogħod milli niddeskrivu kemm in-netwerks newrali użati kif ukoll il-proċess ta' preparazzjoni u taħriġ tad-dejta. Madankollu, f'waħda mill-pubblikazzjonijiet li ġejjin, definittivament se nerġgħu lura għall-analiżi tal-pipeline ta 'valutazzjoni f'livell fil-fond.

Issa se ngħaddu mill-pipeline tal-evalwazzjoni fl-ogħla livell, u se niffukaw fuq l-interazzjoni tal-mikroservizzi fil-kuntest tal-arkitettura ġenerali tal-proġett. 

Meta ħadmet fuq il-pipeline tal-valutazzjoni tal-attrazzjoni, il-kompitu ġie dekompost fil-komponenti li ġejjin:

  1. Għażla tal-uċuħ fir-ritratti
  2. Klassifikazzjoni ta' kull persuna
  3. Agħti r-riżultat

L-ewwel hija solvuta mill-forzi ta 'mħarrġa minn qabel MTCNN. Għat-tieni, netwerk newrali konvoluzzjonali ġie mħarreġ fuq PyTorch, bl-użu ResNet34 – mill-bilanċ "kwalità / veloċità ta 'inferenza fuq is-CPU"

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Dijagramma funzjonali tal-pipeline tal-evalwazzjoni

Analiżi tar-rekwiżiti tal-arkitettura tal-proġett

Fiċ-ċiklu tal-ħajja ML l-istadji tal-proġett tax-xogħol fuq l-arkitettura u l-awtomazzjoni tal-iskjerament tal-mudelli ħafna drabi huma fost l-aktar li jieħdu ħafna ħin u li jieħdu r-riżorsi.

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Ċiklu tal-ħajja ta' proġett ML

Dan il-proġett mhuwiex eċċezzjoni - ittieħdet id-deċiżjoni li l-pipeline tal-valutazzjoni jitgeżwer f'servizz online, li kien jeħtieġ li nidħlu fl-arkitettura. Ġew identifikati r-rekwiżiti bażiċi li ġejjin:

  1. Ħażna ta 'log unifikata - is-servizzi kollha għandhom jiktbu zkuk f'post wieħed, għandhom ikunu konvenjenti biex jiġu analizzati
  2. Possibbiltà ta 'skala orizzontali tas-servizz ta' valutazzjoni - bħala l-Konġestjoni l-aktar probabbli
  3. L-istess ammont ta’ riżorsi tal-proċessur għandu jiġi allokat biex tiġi evalwata kull immaġini sabiex jiġu evitati l-outliers fid-distribuzzjoni tal-ħin għall-inferenza.
  4. Skjerament mgħaġġel (ri) kemm ta' servizzi speċifiċi kif ukoll tal-munzell kollu kemm hu
  5. Il-ħila, jekk meħtieġ, li tuża oġġetti komuni f'servizzi differenti

arkitettura

Wara li analizzat ir-rekwiżiti, deher ovvju li l-arkitettura tal-mikroservizz taqbel kważi perfettament.

Sabiex teħles minn uġigħ ta 'ras bla bżonn, it-Telegram API intgħażlet bħala l-frontend.

L-ewwel, ejja nħarsu lejn id-dijagramma strutturali ta 'l-arkitettura lesta, imbagħad imxi fuq deskrizzjoni ta' kull wieħed mill-komponenti, u wkoll tifformalizza l-proċess ta 'proċessar ta' immaġni b'suċċess.

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Dijagramma strutturali tal-arkitettura lesta

Ejja nitkellmu f'aktar dettall dwar kull wieħed mill-komponenti tad-dijagramma, li jindikahom Responsabbiltà Unika fil-proċess ta 'evalwazzjoni tal-immaġni.

Mikroservizz “attrai-telegram-bot”

Dan il-mikroservizz jiġbor fih l-interazzjonijiet kollha mal-API Telegram. Hemm 2 xenarji ewlenin: taħdem b'immaġni personalizzata u taħdem mar-riżultat ta 'pipeline ta' valutazzjoni. Ejja nħarsu lejn iż-żewġ xenarji f'termini ġenerali.

Meta tirċievi messaġġ personalizzat b'immaġni:

  1. Il-filtrazzjoni titwettaq, li tikkonsisti mill-kontrolli li ġejjin:
    • Disponibbiltà tad-daqs ottimali tal-immaġni
    • Numru ta' immaġini tal-utent diġà fil-kju
  2. Meta tgħaddi l-iffiltrar inizjali, l-immaġni tiġi ssejvjata fil-volum tad-docker
  3. Kompitu jiġi prodott fil-kju "to_estimate", li jinkludi, fost affarijiet oħra, it-triq għall-immaġni li tinsab fil-volum tagħna
  4. Jekk il-passi ta 'hawn fuq jitlestew b'suċċess, l-utent jirċievi messaġġ bil-ħin approssimattiv tal-ipproċessar tal-immaġni, li huwa kkalkulat abbażi tan-numru ta' kompiti fil-kju. Jekk iseħħ żball, l-utent jiġi nnotifikat b'mod espliċitu billi jibgħat messaġġ b'informazzjoni dwar x'seta' mar ħażin.

Ukoll, dan il-mikroservizz, bħal ħaddiem tal-karfus, jisma 'l-kju "after_estimate", li huwa maħsub għal kompiti li jkunu għaddew mill-pipeline ta' evalwazzjoni.

Meta tirċievi kompitu ġdid minn “after_estimate”:

  1. Jekk l-immaġni tiġi pproċessata b'suċċess, aħna nibagħtu r-riżultat lill-utent; jekk le, aħna ninnotifikaw dwar żball.
  2. It-tneħħija tal-immaġni li hija r-riżultat tal-pipeline tal-evalwazzjoni

Mikroservizz ta' valutazzjoni "attrai-estimator"

Dan il-mikroservizz huwa ħaddiem tal-karfus u jiġbor dak kollu relatat mal-pipeline tal-evalwazzjoni tal-immaġni. Hemm algoritmu wieħed biss li jaħdem hawn - ejja janalizzawh.

Meta tirċievi kompitu ġdid minn “to_estimate”:

  1. Ejja ngħaddu l-immaġni permezz tal-pipeline tal-evalwazzjoni:
    1. Tagħbija tal-immaġni fil-memorja
    2. Aħna nġibu l-immaġni għad-daqs meħtieġ
    3. Insib l-uċuħ kollha (MTCNN)
    4. Aħna nevalwaw l-uċuħ kollha (aħna nagħżlu l-uċuħ misjuba fl-aħħar pass f'lott u inferenza ResNet34)
    5. Agħti l-immaġni finali
      1. Ejja niġbed il-kaxxi tal-konfini
      2. Tpinġija tal-klassifikazzjonijiet
  2. Tħassir ta' immaġini tad-dwana (oriġinali).
  3. Iffrankar tal-output mill-pipeline tal-evalwazzjoni
  4. Aħna npoġġu l-kompitu fil-kju "after_estimate", li huwa mismugħ mill-mikroservizz "attrai-telegram-bot" diskuss hawn fuq.

Graylog (+ mongoDB + Elasticsearch)

graylog hija soluzzjoni għall-ġestjoni ċentralizzata taz-zkuk. F'dan il-proġett, intuża għall-iskop maħsub tiegħu.

L-għażla waqgħet fuqu, u mhux fuq dik tas-soltu ELK munzell, minħabba l-konvenjenza li taħdem magħha minn Python. Kull ma trid tagħmel biex tilloggja ma' Graylog huwa li żżid il-GELFTCPHandler mill-pakkett griż lill-bqija tal-handlers tal-logger tal-għeruq tal-mikroservizz python tagħna.

Bħala xi ħadd li qabel kien ħadem biss mal-munzell ELK, kelli esperjenza ġenerali pożittiva waqt li naħdem ma 'Graylog. L-unika ħaġa li hija deprimenti hija s-superjorità fil-karatteristiċi ta 'Kibana fuq l-interface tal-web Graylog.

Fenek MQ

Fenek MQ huwa sensar messaġġ ibbażat fuq il-protokoll AMQP.

F'dan il-proġett intuża bħala l-aktar stabbli u ttestjat fil-ħin sensar għal Karfus u ħadem fil-mod durabbli.

Ddistribwit mill-

Ddistribwit mill- huwa DBMS NoSQL li jaħdem bi strutturi ta' data ta' valur ewlieni

Xi drabi jkun hemm bżonn li jintużaw oġġetti komuni li jimplimentaw ċerti strutturi tad-dejta f'mikroservizzi Python differenti.

Pereżempju, Redis jaħżen hashmap tal-forma "telegram_user_id => numru ta 'kompiti attivi fil-kju", li jippermettilek tillimita n-numru ta' talbiet minn utent wieħed għal ċertu valur u, b'hekk, tipprevjeni attakki DoS.

Ejja nifformalizzaw il-proċess ta 'proċessar ta' immaġni b'suċċess

  1. L-utent jibgħat immaġni lill-bot Telegram
  2. "attrai-telegram-bot" jirċievi messaġġ mit-Telegram API u janalizzah
  3. Il-kompitu bl-immaġni huwa miżjud mal-kju asinkronu "to_estimate"
  4. L-utent jirċievi messaġġ bil-ħin ta' evalwazzjoni ppjanat
  5. "attrai-estimator" jieħu kompitu mill-kju "to_estimate", imexxi l-estimi permezz tal-pipeline u jipproduċi l-kompitu fil-kju "after_estimate"
  6. "attrai-telegram-bot" jisma 'l-kju "after_estimate", jibgħat ir-riżultat lill-utent

DevOps

Fl-aħħarnett, wara li tirrevedi l-arkitettura, tista 'tgħaddi għall-parti ugwalment interessanti - DevOps

Docker swarm

 

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Docker swarm  — sistema ta’ raggruppament, li l-funzjonalità tagħha hija implimentata ġewwa l-Magna Docker u hija disponibbli barra mill-kaxxa.

Bl-użu ta '"swarm", in-nodi kollha fil-cluster tagħna jistgħu jinqasmu f'2 tipi - ħaddiem u maniġer. Fuq magni ta 'l-ewwel tip, gruppi ta' kontenituri (munzelli) huma skjerati, magni tat-tieni tip huma responsabbli għall-iskala, l-ibbilanċjar u karatteristiċi oħra jibred. Il-maniġers huma wkoll ħaddiema awtomatikament.

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Cluster b'maniġer mexxej wieħed u tliet ħaddiema

Id-daqs minimu possibbli tal-cluster huwa 1 node; magna waħda se taġixxi simultanjament bħala maniġer mexxej u ħaddiem. Abbażi tad-daqs tal-proġett u r-rekwiżiti minimi għat-tolleranza tal-ħsarat, ġie deċiż li jintuża dan l-approċċ.

Inħares 'il quddiem, se ngħid li mill-ewwel kunsinna tal-produzzjoni, li kienet f'nofs Ġunju, ma kien hemm l-ebda problemi assoċjati ma' din l-organizzazzjoni tal-cluster (iżda dan ma jfissirx li organizzazzjoni bħal din hija bl-ebda mod aċċettabbli fi kwalunkwe medja-kbar proġetti, li huma soġġetti għal rekwiżiti ta’ tolleranza ta’ ħsara).

Docker Munzell

Fil-modalità swarm, huwa responsabbli għall-iskjerament ta 'munzelli (settijiet ta' servizzi docker) docker munzell

Jappoġġja l-konfigurazzjonijiet ta 'docker-compose, li jippermettulek tuża wkoll għażliet ta' skjerament.  

Pereżempju, bl-użu ta 'dawn il-parametri, ir-riżorsi għal kull waħda mill-istanzi tal-mikroservizz ta' evalwazzjoni kienu limitati (nalokaw N qlub għal N istanzi, fil-mikroservizz innifsu nillimitaw in-numru ta 'qlub użati minn PyTorch għal wieħed)

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

Huwa importanti li wieħed jinnota li Redis, RabbitMQ u Graylog huma servizzi stateful u ma jistgħux jiġu skalati faċilment daqs "attrai-estimator"

Foreshadowing il-mistoqsija - għaliex le Kubernetes?

Jidher li l-użu ta 'Kubernetes fi proġetti żgħar u ta' daqs medju huwa overhead; il-funzjonalità kollha meħtieġa tista 'tinkiseb minn Docker Swarm, li huwa pjuttost faċli għall-utent għal orkestratur tal-kontejners u għandu wkoll ostaklu baxx għad-dħul.

Infrastruttura

Dan kollu ġie skjerat fuq VDS bil-karatteristiċi li ġejjin:

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

Wara l-ittestjar tat-tagħbija lokali, deher li b'influss serju ta 'utenti, din il-magna tkun biżżejjed.

Iżda, immedjatament wara l-iskjerament, ippubblikajt link għal wieħed mill-imageboards l-aktar popolari fis-CIS (yup, dak l-istess wieħed), wara li n-nies saru interessati u fi ftit sigħat is-servizz ipproċessa b'suċċess għexieren ta 'eluf ta' immaġini. Fl-istess ħin, fl-aqwa mumenti, ir-riżorsi tas-CPU u tar-RAM lanqas biss intużaw nofshom.

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali
Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Ftit aktar grafika

Numru ta' utenti uniċi u talbiet ta' evalwazzjoni mill-iskjerament, skont il-ġurnata

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Id-distribuzzjoni tal-ħin tal-inferenza tal-pipeline tal-valutazzjoni

Ħarsa ġenerali ġenerali tal-arkitettura tas-servizz għall-valutazzjoni tal-apparenza bbażata fuq netwerks newrali

Sejbiet

Biex niġbor fil-qosor, nista 'ngħid li l-arkitettura u l-approċċ għall-orkestrazzjoni tal-kontenituri ġġustifikaw lilhom infushom bis-sħiħ - anke fil-mumenti tal-quċċata ma kien hemm l-ebda qtar jew sagging fil-ħin tal-ipproċessar. 

Naħseb li proġetti żgħar u ta 'daqs medju li jużaw inferenza f'ħin reali ta' netwerks newrali fuq is-CPU fil-proċess tagħhom jistgħu jadottaw b'suċċess il-prattiki deskritti f'dan l-artikolu.

Inżid li inizjalment l-artiklu kien itwal, iżda sabiex ma nippubblikax qari fit-tul, iddeċidejt li nħalli barra xi punti f'dan l-artikolu - se nerġgħu lura għalihom f'pubblikazzjonijiet futuri.

Tista' tpoġġi l-bot fuq Telegram - @AttraiBot, se taħdem mill-inqas sal-aħħar tal-ħarifa tal-2020. Ħa nfakkarkom li l-ebda data tal-utent ma hija maħżuna - la l-immaġini oriġinali, u lanqas ir-riżultati tal-pipeline tal-evalwazzjoni - kollox jitwaqqa wara l-ipproċessar.

Sors: www.habr.com

Żid kumment