{"id":89110,"date":"2020-07-18T19:42:10","date_gmt":"2020-07-18T17:42:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej"},"modified":"2020-07-18T19:42:10","modified_gmt":"2020-07-18T17:42:10","slug":"obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","title":{"rendered":"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/f624e995fbee3496f1f7890b98106df4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>\u00davod<\/h2>\n<p><\/p>\n<p>Ahoj!<\/p>\n<p><\/p>\n<p>V tomto \u010dl\u00e1nku sa podel\u00edm o sk\u00fasenosti s vytv\u00e1ran\u00edm mikroservisnej architekt\u00fary pre projekt vyu\u017e\u00edvaj\u00faci neur\u00f3nov\u00e9 siete.<\/p>\n<p><\/p>\n<p>Porozpr\u00e1vame sa o po\u017eiadavk\u00e1ch na architekt\u00faru, pozrieme sa na r\u00f4zne \u0161truktur\u00e1lne diagramy, rozoberieme ka\u017ed\u00fa zlo\u017eku hotovej architekt\u00fary a tie\u017e zhodnot\u00edme technick\u00e9 metriky rie\u0161enia.<\/p>\n<p><\/p>\n<p>Pr\u00edjemn\u00e9 \u010d\u00edtanie!<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>P\u00e1r slov o \u00falohe a jej rie\u0161en\u00ed<\/h2>\n<p><\/p>\n<p>Hlavn\u00e1 my\u0161lienka \u2013 na z\u00e1klade fotografie pos\u00fadi\u0165 atraktivitu osoby na desiatichbodu \u0161k\u00e1le.<\/p>\n<p><\/p>\n<p>V tomto \u010dl\u00e1nku sa odklonieme od opisu ako pou\u017e\u00edvan\u00fdch neur\u00f3nov\u00fdch siet\u00ed, tak aj procesu pr\u00edpravy d\u00e1t a u\u010denia. V jednej z nasleduj\u00facich publik\u00e1ci\u00ed sa v\u0161ak ur\u010dite vr\u00e1time k rozboru pipeline hodnotenia na hlb\u0161ej \u00farovni.<\/p>\n<p><\/p>\n<p>Teraz sa na vysokej \u00farovni prejdeme cez pipeline hodnotenia, pri\u010dom sa zameriame na interakciu mikroservisov v kontexte celkovej architekt\u00fary projektu.\u00a0<\/p>\n<p><\/p>\n<p>Pri pr\u00e1ci na pipeline hodnotenia atraktivity bola \u00faloha rozlo\u017een\u00e1 na nasleduj\u00face zlo\u017eky:<\/p>\n<p><\/p>\n<ol>\n<li>Detekcia tv\u00e1r\u00ed na fotografi\u00e1ch<\/li>\n<li>Hodnotenie ka\u017ed\u00e9ho z tv\u00e1r\u00ed<\/li>\n<li>Renderovanie v\u00fdsledku<\/li>\n<\/ol>\n<p><\/p>\n<p>Prv\u00fd probl\u00e9m sa rie\u0161i pomocou predtr\u00e9ovan\u00e9ho <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1604.02878\">MTCNN<\/a><\/noindex>. Pre druh\u00fd bol tr\u00e9novan\u00fd konvolu\u010dn\u00fd neur\u00f3nov\u00fd sie\u0165 na PyTorch, pri\u010dom ako backbone bol pou\u017eit\u00fd <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.03385\">ResNet34<\/a><\/noindex> \u2013 z poh\u013eadu \"kvalita \/ r\u00fdchlos\u0165 inferencie na CPU\".<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/181cc89a2cf5295bdcd4b838216f96d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Funk\u010dn\u00fd diagram pipeline hodnotenia<\/i><\/p>\n<p><\/p>\n<h2>Anal\u00fdza po\u017eiadaviek na architekt\u00faru projektu<\/h2>\n<p><\/p>\n<p>V \u017eivotnom cykle <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Machine_learning\">ML<\/a><\/noindex> projektu s\u00fa f\u00e1zy pr\u00e1ce na architekt\u00fare a automatiz\u00e1cii nasadenia modelu \u010dasto jedn\u00fdmi z najn\u00e1kladnej\u0161\u00edch na \u010das a zdroje.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/4949f217d31c863176122ed87b43a88c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>\u017divotn\u00fd cyklus ML projektu<\/i><\/p>\n<p><\/p>\n<p>Tento projekt nie je v\u00fdnimka \u2013 bolo prijat\u00e9 rozhodnutie obali\u0165 pipeline hodnotenia do online slu\u017eby, preto bolo potrebn\u00e9 prenikn\u00fa\u0165 do architekt\u00fary. Boli stanoven\u00e9 nasleduj\u00face z\u00e1kladn\u00e9 po\u017eiadavky:<\/p>\n<p><\/p>\n<ol>\n<li>Jednotn\u00e9 \u00falo\u017eisko logov \u2013 v\u0161etky slu\u017eby by mali zapisova\u0165 logy na jedno miesto, malo by sa da\u0165 pohodlne analyzova\u0165.<\/li>\n<li>Mo\u017enos\u0165 horizont\u00e1lneho \u0161k\u00e1lovania slu\u017eby hodnotenia \u2014 ako najpravdepodobnej\u0161\u00ed bottleneck.<\/li>\n<li>Na hodnotenie ka\u017ed\u00e9ho obr\u00e1zka by malo by\u0165 vyhraden\u00e9 rovnak\u00e9 mno\u017estvo procesorov\u00fdch zdrojov \u2014 aby sa predi\u0161lo odch\u00fdlkam v distrib\u00facii \u010dasu na inferenciu.<\/li>\n<li>R\u00fdchle (pre)nasadenie ako konkr\u00e9tnych slu\u017eieb, tak aj stacku ako celku.<\/li>\n<li>Mo\u017enos\u0165, ak je to potrebn\u00e9, vyu\u017e\u00edva\u0165 v r\u00f4znych slu\u017eb\u00e1ch spolo\u010dn\u00e9 objekty.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Architekt\u00fara<\/h2>\n<p><\/p>\n<p>Po anal\u00fdze po\u017eiadaviek sa uk\u00e1zalo, \u017ee mikroservisn\u00e1 architekt\u00fara sa takmer dokonale hod\u00ed.<\/p>\n<p><\/p>\n<p>Aby sme sa zbavili zbyto\u010dn\u00fdch probl\u00e9mov, bol vybran\u00fd Telegram API ako front-end.<\/p>\n<p><\/p>\n<p>Na za\u010diatku si pozrieme \u0161truktur\u00e1lny diagram hotovej architekt\u00fary, potom prejdeme k popisu ka\u017ed\u00e9ho z komponentov, a taktie\u017e formalizujeme proces \u00faspe\u0161n\u00e9ho spracovania obr\u00e1zku.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/163ec019341e9d71a1e0854c6026bd01.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>\u0160truktur\u00e1lny diagram hotovej architekt\u00fary<\/i><\/p>\n<p><\/p>\n<p>Podrobnej\u0161ie sa porozpr\u00e1vame o ka\u017edom z komponentov diagramu, ozna\u010d\u00edme ich Single Responsibility v procese hodnotenia obr\u00e1zku.<\/p>\n<p><\/p>\n<h3>Mikroslu\u017eba \u201eattrai-telegram-bot\u201c<\/h3>\n<p><\/p>\n<p>T\u00e1to mikroslu\u017eba inkapsuluje v\u0161etky interakcie s Telegram API. M\u00f4\u017eeme vy\u010dleni\u0165 2 hlavn\u00e9 scen\u00e1re \u2013 pr\u00e1ca s u\u017e\u00edvate\u013esk\u00fdm obr\u00e1zkom a pr\u00e1ca s v\u00fdsledkom pipeline hodnotenia. Rozoberieme oba scen\u00e1re vo v\u0161eobecnosti.<\/p>\n<p><\/p>\n<p>Pri prijat\u00ed u\u017e\u00edvate\u013eskej spr\u00e1vy s obr\u00e1zkom:<\/p>\n<p><\/p>\n<ol>\n<li>Prebieha filtrovanie, ktor\u00e9 sa sklad\u00e1 z nasleduj\u00facich kontrol:\n<ul>\n<li>Existencie optim\u00e1lnej ve\u013ekosti obr\u00e1zku<\/li>\n<li>Po\u010dtu obr\u00e1zkov u\u017e\u00edvate\u013ea, ktor\u00e9 sa u\u017e nach\u00e1dzaj\u00fa v \u010dakacej l\u00ednii<\/li>\n<\/ul>\n<\/li>\n<li>Pri prechode prim\u00e1rnym filtrovan\u00edm sa obr\u00e1zok ulo\u017e\u00ed do docker volume<\/li>\n<li>Do fronty \u201eto_estimate\u201c sa vytvor\u00ed \u00faloha, v ktorej, okrem in\u00e9ho, figuruje cesta k obr\u00e1zku, ktor\u00fd le\u017e\u00ed v na\u0161om volume<\/li>\n<li>Ak uveden\u00e9 kroky prebehn\u00fa \u00faspe\u0161ne \u2013 u\u017e\u00edvate\u013e dostane spr\u00e1vu s pribli\u017en\u00fdm \u010dasom spracovania obr\u00e1zku, ktor\u00fd sa vypo\u010d\u00edta na z\u00e1klade po\u010dtu \u00faloh v \u010dakacej l\u00ednii. V pr\u00edpade chyby bude u\u017e\u00edvate\u013e v\u00fdslovne informovan\u00fd \u2013 zaslan\u00edm spr\u00e1vy s inform\u00e1ciou o tom, \u010do mohlo \u00eds\u0165 zle. <\/li>\n<\/ol>\n<p><\/p>\n<p>Rovnako t\u00e1to mikroslu\u017eba, ako celery worker, po\u010d\u00fava frontu \u201eafter_estimate\u201c, ktor\u00e1 je ur\u010den\u00e1 pre \u00falohy, ktor\u00e9 pre\u0161li pipeline hodnoten\u00edm.<\/p>\n<p><\/p>\n<p>Pri prijat\u00ed novej \u00falohy z \u201eafter_estimate\u201c:<\/p>\n<p><\/p>\n<ol>\n<li>Ak bol obr\u00e1zok spracovan\u00fd \u00faspe\u0161ne \u2013 po\u0161leme v\u00fdsledok u\u017e\u00edvate\u013eovi, ak nie \u2013 informujeme o chybe<\/li>\n<li>Odstr\u00e1nime obr\u00e1zok, ktor\u00fd je v\u00fdsledkom pipeline hodnotenia<\/li>\n<\/ol>\n<p><\/p>\n<h3>Mikroslu\u017eba hodnotenia \u201eattrai-estimator\u201c<\/h3>\n<p><\/p>\n<p>T\u00e1to mikroslu\u017eba je celery worker a inkapsuluje v\u0161etko, \u010do s\u00favis\u00ed s pipeline hodnoten\u00edm obr\u00e1zku. Algoritmus tu je jeden \u2013 rozoberieme ho.<\/p>\n<p><\/p>\n<p>Pri prijat\u00ed novej \u00falohy z \u201eto_estimate\u201c:<\/p>\n<p><\/p>\n<ol>\n<li>Prebieha hodnotenie obr\u00e1zka cez pipeline:\n<ol>\n<li>Na\u010d\u00edtame obr\u00e1zok do pam\u00e4te<\/li>\n<li>Prisp\u00f4sobujeme obr\u00e1zok na po\u017eadovan\u00fa ve\u013ekos\u0165<\/li>\n<li>N\u00e1jdeme v\u0161etky tv\u00e1re (MTCNN)<\/li>\n<li>Hodnot\u00edme v\u0161etky tv\u00e1re (obklop\u00edme n\u00e1jden\u00e9 v predch\u00e1dzaj\u00facom bode tv\u00e1re do d\u00e1vky a inf\u00e9rime ResNet34)<\/li>\n<li>Rendrujeme kone\u010dn\u00fd obr\u00e1zok\n<ol>\n<li>Kresl\u00edme ohrani\u010duj\u00face boxy<\/li>\n<li>Kresl\u00edme hodnotenia<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Odstra\u0148ujeme pou\u017e\u00edvate\u013esk\u00fd (p\u00f4vodn\u00fd) obr\u00e1zok<\/li>\n<li>Uklad\u00e1me v\u00fdstup z hodnotiaceho pipeline<\/li>\n<li>Vklad\u00e1me \u00falohu do fronty \"after_estimate\", ktor\u00fa po\u010d\u00fava vy\u0161\u0161ie analyzovan\u00fd mikroslu\u017eba \"attrai-telegram-bot\"<\/li>\n<\/ol>\n<p><\/p>\n<h3>Graylog (+ mongoDB + Elasticsearch)<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.graylog.org\/\">Graylog<\/a><\/noindex> \u2013 je to rie\u0161enie pre centralizovan\u00fa spr\u00e1vu logov. V tomto projekte bol pou\u017eit\u00fd na svoj \u00fa\u010del.<\/p>\n<p><\/p>\n<p>Vo\u013eba padla pr\u00e1ve na neho, a nie na v\u0161etk\u00fdm zn\u00e1my <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/what-is\/elk-stack\">ELK<\/a><\/noindex> stack, kv\u00f4li pohodlnosti pr\u00e1ce s n\u00edm z Pythonu. V\u0161etko, \u010do je potrebn\u00e9 urobi\u0165 pre logovanie v Graylog, je prida\u0165 GELFTCPHandler z bal\u00edka <noindex><a rel=\"nofollow\" href=\"https:\/\/pypi.org\/project\/graypy\/\">graypy<\/a><\/noindex> k ostatn\u00fdm root logger handlerom n\u00e1\u0161ho python mikroslu\u017eby.<\/p>\n<p><\/p>\n<p>Ja, ako osoba, ktor\u00e1 predt\u00fdm pracovala len s ELK stackom, som vo v\u0161eobecnosti z\u00edskal pozit\u00edvny sk\u00fasenos\u0165 pri pr\u00e1ci s Graylog. Jedin\u00e9, \u010do ma tr\u00e1pi, je nadmern\u00e1 funk\u010dnos\u0165 Kibany nad webov\u00fdm rozhran\u00edm Graylog.<\/p>\n<p><\/p>\n<h3>RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 je to spr\u00e1vca spr\u00e1v zalo\u017een\u00fd na protokole AMQP.<\/p>\n<p><\/p>\n<p>V tomto projekte bol pou\u017eit\u00fd ako <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.celeryproject.org\/en\/latest\/getting-started\/brokers\/#broker-overview\">najstabilnej\u0161\u00ed a \u010dasom overen\u00fd<\/a><\/noindex> broker pre Celery a fungoval v trvanlivom re\u017eime.<\/p>\n<p><\/p>\n<h3>K\u013eu\u010d-hodnota<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/\">K\u013eu\u010d-hodnota<\/a><\/noindex> \u2013 je to NoSQL DBMS, ktor\u00fd pracuje so \u0161trukt\u00farami \u00fadajov typu \"k\u013e\u00fa\u010d - hodnota\"<\/p>\n<p><\/p>\n<p>Niekedy sa objav\u00ed potreba pou\u017e\u00edva\u0165 v r\u00f4znych python mikroslu\u017eb\u00e1ch spolo\u010dn\u00e9 objekty implementuj\u00face ur\u010dit\u00e9 d\u00e1tov\u00e9 \u0161trukt\u00fary.<\/p>\n<p><\/p>\n<p>Napr\u00edklad, v Redis sa uchov\u00e1va hashmapa typu \"telegram_user_id =&gt; po\u010det akt\u00edvnych \u00faloh v fronte\", \u010do umo\u017e\u0148uje obmedzi\u0165 po\u010det po\u017eiadaviek od jedn\u00e9ho pou\u017e\u00edvate\u013ea na ur\u010dit\u00fa hodnotu a t\u00fdm zabr\u00e1ni\u0165 DoS \u00fatokom.<\/p>\n<p><\/p>\n<h3>Formalizujeme proces \u00faspe\u0161n\u00e9ho spracovania obr\u00e1zku<\/h3>\n<p><\/p>\n<ol>\n<li>Pou\u017e\u00edvate\u013e posiela obr\u00e1zok telegram bota<\/li>\n<li>\"attrai-telegram-bot\" prij\u00edma spr\u00e1vu od Telegram API a analyzuje ju<\/li>\n<li>\u00daloha s obr\u00e1zkom sa prid\u00e1va do asynchr\u00f3nneho frontu \"to_estimate\"<\/li>\n<li>Pou\u017e\u00edvate\u013e dost\u00e1va spr\u00e1vu s pl\u00e1novan\u00fdm \u010dasom hodnotenia<\/li>\n<li>\"attrai-estimator\" berie \u00falohu z frontu \"to_estimate\", prech\u00e1dza cez hodnotiaci pipeline a produkuje \u00falohu do frontu \"after_estimate\"<\/li>\n<li>\"attrai-telegram-bot\", po\u010d\u00favaj\u00faci frontu \"after_estimate\", posiela v\u00fdsledok pou\u017e\u00edvate\u013eovi<\/li>\n<\/ol>\n<p><\/p>\n<h2>DevOps<\/h2>\n<p><\/p>\n<p>Nakoniec, po preh\u013eade architekt\u00fary, m\u00f4\u017eeme prejs\u0165 k nemenej zauj\u00edmavej \u010dasti \u2014 DevOps<\/p>\n<p><\/p>\n<h3>Docker Swarm<\/h3>\n<p><\/p>\n<p>\u00a0<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/ba539d1c8197c7961d6e5e6a5c7e83c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Docker Swarm <\/a><\/noindex>\u00a0\u2014 syst\u00e9m klasteriz\u00e1cie, ktor\u00e9ho funk\u010dnos\u0165 je implementovan\u00e1 v r\u00e1mci Docker Engine a je dostupn\u00e1 priamo z krabice.<\/p>\n<p><\/p>\n<p>S pomocou \u201ezhluku\u201c m\u00f4\u017eeme rozdeli\u0165 v\u0161etky uzly n\u00e1\u0161ho klastru na 2 typy \u2013 worker a manager. Na strojoch prv\u00e9ho typu sa rozv\u00edjaj\u00fa skupiny kontajnerov (stacky), stroje druh\u00e9ho typu s\u00fa zodpovedn\u00e9 za \u0161k\u00e1lovanie, vyv\u00e1\u017eenie a <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/#feature-highlights\">in\u00fdch skvel\u00fdch funkci\u00ed<\/a><\/noindex>. Mana\u017e\u00e9ri s\u00fa umiestnen\u00ed ako defaultne aj ako workeri.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/d195e2aab6d3552652102c2b5246abfc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Klastr s jedn\u00fdm leader managerom a tromi workermi<\/i><\/p>\n<p><\/p>\n<p>Minim\u00e1lna mo\u017en\u00e1 ve\u013ekos\u0165 klastru \u2013 1 uzol, jedin\u00fd stroj bude s\u00fa\u010dasne fungova\u0165 ako leader manager aj worker. Na z\u00e1klade ve\u013ekosti projektu a minim\u00e1lnych po\u017eiadaviek na odolnos\u0165 vo\u010di poruch\u00e1m sa rozhodlo pou\u017ei\u0165 presne tento pr\u00edstup.<\/p>\n<p><\/p>\n<p>Predbe\u017ene poviem, \u017ee od prvej produk\u010dnej dod\u00e1vky, ktor\u00e1 bola v polovici j\u00fana, neboli \u017eiadne probl\u00e9my spojen\u00e9 s touto organiz\u00e1ciou klastru (ale to neznamen\u00e1, \u017ee tak\u00e1to organiz\u00e1cia je ak\u00fdmko\u013evek sp\u00f4sobom akceptovate\u013en\u00e1 v ak\u00fdchko\u013evek stredne ve\u013ek\u00fdch projektoch, na ktor\u00e9 p\u00f4sobia po\u017eiadavky na odolnos\u0165 vo\u010di poruch\u00e1m).<\/p>\n<p><\/p>\n<h3>Docker Stack<\/h3>\n<p><\/p>\n<p>V re\u017eime \u201ezhluku\u201c za nasadenie stackov (s\u00faborov docker slu\u017eieb) zodpoved\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/stack\/\">docker stack<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Podporuje docker-compose konfigur\u00e1cie, \u010do umo\u017e\u0148uje dodato\u010dne vyu\u017e\u00edva\u0165 parametre nasadenia.\u00a0\u00a0<\/p>\n<p><\/p>\n<p>Napr\u00edklad, pomocou t\u00fdchto parametrov boli obmedzen\u00e9 zdroje na ka\u017ed\u00fd z in\u0161tanci\u00ed mikroslu\u017eby hodnotenia (pridelili sme na N in\u0161tanci\u00ed N jadier, v samotnej mikroslu\u017ebe obmedzujeme po\u010det jadier, ktor\u00e9 pou\u017e\u00edvame s PyTorchom, na jedno)<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">attrai_estimator:\n\u00a0\u00a0image: 'erqups\/attrai_estimator:1.2'\n\u00a0\u00a0deploy:\n\u00a0\u00a0\u00a0\u00a0replicas: 4\n\u00a0\u00a0\u00a0\u00a0resources:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0limits:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0cpus: '4'\n\u00a0\u00a0\u00a0\u00a0restart_policy:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0condition: on-failure\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2026<\/code><\/pre>\n<p><\/p>\n<p>Je d\u00f4le\u017eit\u00e9 poznamena\u0165, \u017ee Redis, RabbitMQ a Graylog s\u00fa stateful slu\u017eby a \u0161k\u00e1lovanie ich tak jednoducho, ako \u201eattrai-estimator\u201c, nebude mo\u017en\u00e9<\/p>\n<p><\/p>\n<h3>Vyd\u00e1vam sa na ot\u00e1zku \u2014 pre\u010do nie Kubernetes?<\/h3>\n<p><\/p>\n<p>Zd\u00e1 sa, \u017ee pou\u017eitie Kubernetes v mal\u00fdch a stredn\u00fdch projektoch je nadmern\u00e9, v\u0161etky potrebn\u00e9 funkcie m\u00f4\u017eeme z\u00edska\u0165 z Docker Swarm, ktor\u00fd je dos\u0165 pou\u017e\u00edvate\u013esky pr\u00edvetiv\u00fd pre orchestr\u00e1ciu kontajnerov a m\u00e1 tie\u017e n\u00edzky prah vstupu.<\/p>\n<p><\/p>\n<h3>Infrastrukt\u00fara<\/h3>\n<p><\/p>\n<p>Toto v\u0161etko sa nasadzovalo na VDS s nasleduj\u00facimi charakteristikami:<\/p>\n<p><\/p>\n<ul>\n<li>CPU: 4 jadr\u00e1 Intel&reg; Xeon&reg; Gold 5120 CPU @ 2.20GHz<\/li>\n<li>RAM: 8 GB<\/li>\n<li>SSD: 160 GB<\/li>\n<\/ul>\n<p><\/p>\n<p>Po miestnom z\u00e1\u0165a\u017eovom testovan\u00ed sa zdalo, \u017ee pri v\u00e1\u017enom n\u00e1raste pou\u017e\u00edvate\u013eov bude tento stroj tak akur\u00e1t sta\u010di\u0165.<\/p>\n<p><\/p>\n<p>Ale hne\u010f po nasaden\u00ed som zdie\u013eal odkaz na jeden z najpopul\u00e1rnej\u0161\u00edch obr\u00e1zkov\u00fdch boardov v SN\u0160 (\u00e1no, ten zn\u00e1my), po \u010dom sa \u013eudia zaujali a za nieko\u013eko hod\u00edn slu\u017eba \u00faspe\u0161ne spracovala desiatky tis\u00edc obr\u00e1zkov. V medzi\u010dase neboli v najru\u0161nej\u0161\u00edch momentoch vyu\u017eit\u00e9 ani z polovice zdroje CPU a RAM.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/458d74dae00d455fbce1ca6a197325d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/e9383c47369c606d26e89a69f4d22b5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>E\u0161te trochu grafiky<\/h3>\n<p><\/p>\n<p>Po\u010det jedine\u010dn\u00fdch pou\u017e\u00edvate\u013eov a dopytov na hodnotenie od momentu nasadenia v z\u00e1vislosti od d\u0148a<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/7112c78c8400d2ac73562243b16a015b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Rozdelenie \u010dasu infere\u010dnej pipeline na hodnotenie<\/p>\n<p>\n<img decoding=\"async\" alt=\"Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00f3nov\u00fdch siet\u00ed\" src=\"\/wp-content\/uploads\/2020\/07\/4c892ce607c3ff3db466459729dd0876.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Zhrnutie<\/h2>\n<p><\/p>\n<p>Na z\u00e1ver m\u00f4\u017eem poveda\u0165, \u017ee architekt\u00fara a pr\u00edstup k orchestr\u00e1cii kontajnerov sa \u00faplne ospravedlnili \u2014 ani v najru\u0161nej\u0161\u00edch momentoch nedo\u0161lo k poklesom a \u010das spracovania bol stabiln\u00fd.\u00a0<\/p>\n<p><\/p>\n<p>Mysl\u00edm, \u017ee projekty malej a strednej ve\u013ekosti, ktor\u00e9 vo svojom procese pou\u017e\u00edvaj\u00fa real-time inferenciu neur\u00e1lnych siet\u00ed na CPU, m\u00f4\u017eu \u00faspe\u0161ne prevzia\u0165 praktiky pop\u00edsan\u00e9 v tomto \u010dl\u00e1nku.<\/p>\n<p><\/p>\n<p>Prid\u00e1m, \u017ee p\u00f4vodne bol \u010dl\u00e1nok v\u00e4\u010d\u0161\u00ed, ale aby som nezverejnil dlh\u00fd text, rozhodol som sa niektor\u00e9 body v tomto \u010dl\u00e1nku vynecha\u0165 \u2014 k nim sa vr\u00e1time v bud\u00facich publik\u00e1ci\u00e1ch.<\/p>\n<p><\/p>\n<p>S botom si m\u00f4\u017eete pokeca\u0165 na Telegrame \u2014 @AttraiBot, fungova\u0165 bude minim\u00e1lne do konca jesene 2020. Pripom\u00ednam \u2014 \u017eiadne pou\u017e\u00edvate\u013esk\u00e9 \u00fadaje sa neuchov\u00e1vaj\u00fa \u2014 ani p\u00f4vodn\u00e9 obr\u00e1zky, ani v\u00fdsledky hodnotenia \u2014 v\u0161etko sa po spracovan\u00ed vyma\u017ee.<\/p>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/511332\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0446\u0435\u043d\u0438\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! \u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0438 \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u0442\u043e \u0434\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89111,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89110","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\".\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-18T17:42:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-18T17:42:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Celkov\u00fd preh\u013ead architekt\u00fary slu\u017eby na hodnotenie vzh\u013eadu na z\u00e1klade neur\u00e1lnych siet\u00ed | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-18T17:42:10+00:00","article:modified_time":"2020-07-18T17:42:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89110","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:16:27","updated":"2022-09-29 06:10:39","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/89110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=89110"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/89110\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/89111"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=89110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=89110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=89110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}