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:
- Għażla tal-uċuħ fir-ritratti
- Klassifikazzjoni ta' kull persuna
- Agħti r-riżultat
L-ewwel hija solvuta mill-forzi ta 'mħarrġa minn qabel
Dijagramma funzjonali tal-pipeline tal-evalwazzjoni
Analiżi tar-rekwiżiti tal-arkitettura tal-proġett
Fiċ-ċiklu tal-ħajja
Ċ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:
- Ħażna ta 'log unifikata - is-servizzi kollha għandhom jiktbu zkuk f'post wieħed, għandhom ikunu konvenjenti biex jiġu analizzati
- Possibbiltà ta 'skala orizzontali tas-servizz ta' valutazzjoni - bħala l-Konġestjoni l-aktar probabbli
- 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.
- Skjerament mgħaġġel (ri) kemm ta' servizzi speċifiċi kif ukoll tal-munzell kollu kemm hu
- 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.
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:
- 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
- Meta tgħaddi l-iffiltrar inizjali, l-immaġni tiġi ssejvjata fil-volum tad-docker
- 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
- 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”:
- 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.
- 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”:
- Ejja ngħaddu l-immaġni permezz tal-pipeline tal-evalwazzjoni:
- Tagħbija tal-immaġni fil-memorja
- Aħna nġibu l-immaġni għad-daqs meħtieġ
- Insib l-uċuħ kollha (MTCNN)
- Aħna nevalwaw l-uċuħ kollha (aħna nagħżlu l-uċuħ misjuba fl-aħħar pass f'lott u inferenza ResNet34)
- Agħti l-immaġni finali
- Ejja niġbed il-kaxxi tal-konfini
- Tpinġija tal-klassifikazzjonijiet
- Tħassir ta' immaġini tad-dwana (oriġinali).
- Iffrankar tal-output mill-pipeline tal-evalwazzjoni
- Aħna npoġġu l-kompitu fil-kju "after_estimate", li huwa mismugħ mill-mikroservizz "attrai-telegram-bot" diskuss hawn fuq.
Graylog (+ mongoDB + Elasticsearch)
L-għażla waqgħet fuqu, u mhux fuq dik tas-soltu
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
F'dan il-proġett intuża bħala
Ddistribwit mill-
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
- L-utent jibgħat immaġni lill-bot Telegram
- "attrai-telegram-bot" jirċievi messaġġ mit-Telegram API u janalizzah
- Il-kompitu bl-immaġni huwa miżjud mal-kju asinkronu "to_estimate"
- L-utent jirċievi messaġġ bil-ħin ta' evalwazzjoni ppjanat
- "attrai-estimator" jieħu kompitu mill-kju "to_estimate", imexxi l-estimi permezz tal-pipeline u jipproduċi l-kompitu fil-kju "after_estimate"
- "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
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
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)
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.
Ftit aktar grafika
Numru ta' utenti uniċi u talbiet ta' evalwazzjoni mill-iskjerament, skont il-ġurnata
Id-distribuzzjoni tal-ħin tal-inferenza tal-pipeline tal-valutazzjoni
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