{"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\/ro\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","title":{"rendered":"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/f624e995fbee3496f1f7890b98106df4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Introducere<\/h2>\n<p><\/p>\n<p>Bun\u0103!<\/p>\n<p><\/p>\n<p>\u00cen acest articol, voi \u00eemp\u0103rt\u0103\u0219i experien\u021ba de construire a unei arhitecturi microservicii pentru un proiect care utilizeaz\u0103 re\u021bele neuronale.<\/p>\n<p><\/p>\n<p>Vom discuta despre cerin\u021bele arhitecturii, vom analiza diferite diagrame structurale, vom examina fiecare component\u0103 a arhitecturii gata realizate \u0219i vom evalua metricile tehnice ale solu\u021biei.<\/p>\n<p><\/p>\n<p>Lectur\u0103 pl\u0103cut\u0103!<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>C\u00e2teva cuvinte despre problem\u0103 \u0219i solu\u021bia acesteia<\/h2>\n<p><\/p>\n<p>Ideea de baz\u0103 este de a evalua atractivitatea unei persoane pe o scar\u0103 de la 1 la 10, pe baza unei fotografii.<\/p>\n<p><\/p>\n<p>\u00cen acest articol, ne vom abate de la descrierea re\u021belelor neuronale utilizate \u0219i a procesului de preg\u0103tire a datelor \u0219i a \u00eenv\u0103\u021b\u0103rii. Cu toate acestea, \u00eentr-una dintre publica\u021biile viitoare, ne vom \u00eentoarce cu siguran\u021b\u0103 la analiza pipeline-ului de evaluare la un nivel mai profund.<\/p>\n<p><\/p>\n<p>Acum, vom trece prin pipeline-ul de evaluare la un nivel \u00eenalt, pun\u00e2nd accent pe interac\u021biunea microserviciilor \u00een contextul arhitecturii generale a proiectului.\u00a0<\/p>\n<p><\/p>\n<p>\u00cen lucrul la pipeline-ul de evaluare a atractivit\u0103\u021bii, sarcina a fost descompus\u0103 \u00een urm\u0103toarele componente:<\/p>\n<p><\/p>\n<ol>\n<li>Detectarea fe\u021belor din fotografii<\/li>\n<li>Evaluarea fiec\u0103rei fe\u021be<\/li>\n<li>Redarea rezultatelor<\/li>\n<\/ol>\n<p><\/p>\n<p>Prima sarcin\u0103 este rezolvat\u0103 cu ajutorul <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1604.02878\">MTCNN<\/a><\/noindex>. Pentru a doua, a fost antrenat\u0103 o re\u021bea neuronal\u0103 convolu\u021bional\u0103 pe PyTorch, ca backbone a fost folosit <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.03385\">ResNet34<\/a><\/noindex> - av\u00e2nd \u00een vedere balan\u021ba 'calitate \/ vitez\u0103 de inferen\u021b\u0103 pe CPU'<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/181cc89a2cf5295bdcd4b838216f96d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Diagrama func\u021bional\u0103 a pipeline-ului de evaluare<\/i><\/p>\n<p><\/p>\n<h2>Analiza cerin\u021belor arhitecturii proiectului<\/h2>\n<p><\/p>\n<p>\u00cen ciclu de via\u021b\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Machine_learning\">ML<\/a><\/noindex> etapele de lucru asupra arhitecturii \u0219i automatizarea desf\u0103\u0219ur\u0103rii modelului sunt adesea unele dintre cele mai costisitoare \u00een timp \u0219i resurse.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/4949f217d31c863176122ed87b43a88c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Ciclul de via\u021b\u0103 al unui proiect ML<\/i><\/p>\n<p><\/p>\n<p>Acest proiect nu face excep\u021bie - a fost luat\u0103 decizia de a \u00eenv\u00e2rti pipeline-ul de evaluare \u00eentr-un serviciu online, pentru aceasta a fost necesar\u0103 \u00een\u021belegerea arhitecturii. Au fost stabilite urm\u0103toarele cerin\u021be de baz\u0103:<\/p>\n<p><\/p>\n<ol>\n<li>Un depozit unic de loguri - toate serviciile ar trebui s\u0103 scrie log-urile \u00eentr-un singur loc, care s\u0103 fie u\u0219or de analizat<\/li>\n<li>Capacitatea de scalare orizontal\u0103 a serviciului de evaluare - ca fiind cel mai probabil Bottleneck<\/li>\n<li>Fiecare imagine ar trebui s\u0103 aib\u0103 un num\u0103r egal de resurse ale procesorului alocate - pentru a evita anomalii \u00een distribu\u021bia timpului de inferen\u021b\u0103<\/li>\n<li>Desf\u0103\u0219urare rapid\u0103 (re) a serviciilor individuale, precum \u0219i a stivei \u00een ansamblu<\/li>\n<li>Posibilitatea de a utiliza, dac\u0103 este necesar, obiecte comune \u00een diferite servicii<\/li>\n<\/ol>\n<p><\/p>\n<h2>Arhitectur\u0103<\/h2>\n<p><\/p>\n<p>Dup\u0103 analiza cerin\u021belor, a devenit evident c\u0103 arhitectura bazat\u0103 pe microservicii se potrive\u0219te aproape perfect.<\/p>\n<p><\/p>\n<p>Pentru a sc\u0103pa de durerea de cap suplimentar\u0103, a fost ales API-ul Telegram ca frontend.<\/p>\n<p><\/p>\n<p>Mai \u00eent\u00e2i, s\u0103 examin\u0103m diagrama structural\u0103 a arhitecturii finale, apoi vom trece la descrierea fiec\u0103rui component \u0219i vom formaliza procesul de prelucrare reu\u0219it\u0103 a imaginii.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/163ec019341e9d71a1e0854c6026bd01.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Diagrama structural\u0103 a arhitecturii finale<\/i><\/p>\n<p><\/p>\n<p>S\u0103 discut\u0103m mai \u00een detaliu despre fiecare dintre componentele diagramei, s\u0103 le subliniem responsabilitatea unic\u0103 \u00een procesul de evaluare a imaginii.<\/p>\n<p><\/p>\n<h3>Microserviciul \u201eattrai-telegram-bot\u201d<\/h3>\n<p><\/p>\n<p>Acest microserviciu \u00eencaseaz\u0103 toate interac\u021biunile cu API-ul Telegram. Putem identifica dou\u0103 scenarii principale \u2013 lucrul cu imaginea utilizatorului \u0219i lucrul cu rezultatul pipeline-ului de evaluare. Vom analiza ambele scenarii \u00een mod general.<\/p>\n<p><\/p>\n<p>Atunci c\u00e2nd primim un mesaj de la utilizator cu o imagine:<\/p>\n<p><\/p>\n<ol>\n<li>Se efectueaz\u0103 o filtrare, care const\u0103 din urm\u0103toarele verific\u0103ri:\n<ul>\n<li>Prezen\u021ba dimensiunii optime a imaginii<\/li>\n<li>Num\u0103rul de imagini ale utilizatorului, deja aflate \u00een a\u0219teptare<\/li>\n<\/ul>\n<\/li>\n<li>Dup\u0103 ce imaginea trece prin filtrul ini\u021bial, aceasta este salvat\u0103 \u00een volum Docker.<\/li>\n<li>\u00cen coada \u201eto_estimate\u201d se produce o sarcin\u0103, care include, printre altele, calea c\u0103tre imaginea aflat\u0103 \u00een volumul nostru.<\/li>\n<li>Dac\u0103 etapele men\u021bionate mai sus sunt parcurse cu succes \u2013 utilizatorul va primi un mesaj cu un timp estimat pentru prelucrarea imaginii, care este calculat pe baza num\u0103rului de sarcini din coad\u0103. \u00cen caz de eroare, utilizatorul va fi informat explicit despre aceasta \u2013 printr-un mesaj care con\u021bine informa\u021bii despre ce ar fi putut merge prost. <\/li>\n<\/ol>\n<p><\/p>\n<p>De asemenea, acest microserviciu, ca worker Celery, ascult\u0103 coada \u201eafter_estimate\u201d, care este destinat\u0103 sarcinilor care au trecut prin pipeline-ul de evaluare.<\/p>\n<p><\/p>\n<p>C\u00e2nd primim o nou\u0103 sarcin\u0103 din \u201eafter_estimate\u201d:<\/p>\n<p><\/p>\n<ol>\n<li>Dac\u0103 imaginea a fost procesat\u0103 cu succes \u2013 trimitem rezultatul utilizatorului, altfel \u2013 inform\u0103m despre eroare.<\/li>\n<li>\u0218tergem imaginea care este rezultatul pipeline-ului de evaluare.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Microserviciul de evaluare \u201eattrai-estimator\u201d<\/h3>\n<p><\/p>\n<p>Acest microserviciu este un worker Celery \u0219i \u00eencaseaz\u0103 tot ce \u021bine de pipeline-ul de evaluare a imaginii. Algoritmul de func\u021bionare aici este unul \u2013 s\u0103-l analiz\u0103m.<\/p>\n<p><\/p>\n<p>C\u00e2nd primim o nou\u0103 sarcin\u0103 din \u201eto_estimate\u201d:<\/p>\n<p><\/p>\n<ol>\n<li>Proces\u0103m imaginea prin pipeline-ul de evaluare:\n<ol>\n<li>\u00cenc\u0103rc\u0103m imaginea \u00een memorie<\/li>\n<li>Redimension\u0103m imaginea la dimensiunea necesar\u0103<\/li>\n<li>Detect\u0103m toate fe\u021bele (MTCNN)<\/li>\n<li>Evalu\u0103m toate fe\u021bele (\u00eempachet\u0103m fe\u021bele g\u0103site \u00een punctul anterior \u00eentr-un batch \u0219i aplic\u0103m inferen\u021ba ResNet34)<\/li>\n<li>Red\u0103m imaginea final\u0103\n<ol>\n<li>Desen\u0103m bounding boxes<\/li>\n<li>Desen\u0103m evalu\u0103rile<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>\u0218tergem imaginea original\u0103 (de utilizator)<\/li>\n<li>Salv\u0103m ie\u0219irea din pipeline-ul de evaluare<\/li>\n<li>Ad\u0103ug\u0103m task-ul \u00een coada \u201eafter_estimate\u201d, pe care o ascult\u0103 microserviciul analizat mai sus \u201eattrai-telegram-bot\u201d<\/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> \u2014 este o solu\u021bie pentru gestionarea centralizat\u0103 a logurilor. \u00cen acest proiect, a fost folosit\u0103 conform destina\u021biei sale.<\/p>\n<p><\/p>\n<p>Am ales-o pe ea, \u0219i nu stiva familiar\u0103 tuturor <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/what-is\/elk-stack\">ELK<\/a><\/noindex> din motive de confort \u00een utilizare din Python. Tot ce trebuie s\u0103 facem pentru a face logging \u00een Graylog este s\u0103 ad\u0103ug\u0103m GELFTCPHandler din pachetul <noindex><a rel=\"nofollow\" href=\"https:\/\/pypi.org\/project\/graypy\/\">graypy<\/a><\/noindex> la ceilal\u021bi root logger handlers ai microserviciului nostru Python.<\/p>\n<p><\/p>\n<p>Eu, ca persoan\u0103 care a lucrat anterior doar cu stiva ELK, am avut \u00een general o experien\u021b\u0103 pozitiv\u0103 \u00een timpul lucrului cu Graylog. Singurul lucru care \u00eengrijoreaz\u0103 este superioritatea func\u021bionalit\u0103\u021bilor Kibana fa\u021b\u0103 de interfa\u021ba web a 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> \u2014 este un broker de mesaje bazat pe protocolul AMQP.<\/p>\n<p><\/p>\n<p>\u00cen acest proiect, a fost utilizat ca <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.celeryproject.org\/en\/latest\/getting-started\/brokers\/#broker-overview\">cel mai stabil \u0219i testat \u00een timp<\/a><\/noindex> broker pentru Celery \u0219i a func\u021bionat \u00een modul durable.<\/p>\n<p><\/p>\n<h3>Redis<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/\">Redis<\/a><\/noindex> \u2014 este o baz\u0103 de date NoSQL care lucreaz\u0103 cu structuri de date de tip \u201echeie - valoare\u201d<\/p>\n<p><\/p>\n<p>Uneori, apare necesitatea de a folosi \u00een diferite microservicii Python obiecte comune care realizeaz\u0103 anumite structuri de date.<\/p>\n<p><\/p>\n<p>De exemplu, \u00een Redis se p\u0103streaz\u0103 un hashmap de tipul \u201etelegram_user_id =&gt; num\u0103rul de task-uri active \u00een coad\u0103\u201d, ceea ce permite limitarea num\u0103rului de cereri din partea unui utilizator la o valoare specific\u0103 \u0219i, astfel, prevenirea atacurilor DoS.<\/p>\n<p><\/p>\n<h3>Formaliz\u0103m procesul de procesare de succes a imaginii<\/h3>\n<p><\/p>\n<ol>\n<li>Utilizatorul trimite o imagine \u00een botul Telegram<\/li>\n<li>\u201eattrai-telegram-bot\u201d prime\u0219te mesajul de la API-ul Telegram \u0219i \u00eel analizeaz\u0103<\/li>\n<li>Task-ul cu imaginea este ad\u0103ugat \u00een coada asincron\u0103 \u201eto_estimate\u201d<\/li>\n<li>Utilizatorul prime\u0219te un mesaj cu timpul estimat pentru evaluare<\/li>\n<li>\u201eattrai-estimator\u201d ia task-ul din coada \u201eto_estimate\u201d, \u00eel proceseaz\u0103 prin pipeline-ul de evaluare \u0219i produce task-ul \u00een coada \u201eafter_estimate\u201d<\/li>\n<li>\u201eattrai-telegram-bot\u201d, care ascult\u0103 coada \u201eafter_estimate\u201d, trimite rezultatul utilizatorului<\/li>\n<\/ol>\n<p><\/p>\n<h2>DevOps<\/h2>\n<p><\/p>\n<p>\u00cen cele din urm\u0103, dup\u0103 revizuirea arhitecturii, putem trece la o parte la fel de interesant\u0103 \u2014 DevOps<\/p>\n<p><\/p>\n<h3>Dar \u00eenseamn\u0103 asta c\u0103 pute\u021bi folosi acela\u0219i fi\u0219ier docker-compose \u00een<\/h3>\n<p><\/p>\n<p>\u00a0<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" 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\/\">Dar \u00eenseamn\u0103 asta c\u0103 pute\u021bi folosi acela\u0219i fi\u0219ier docker-compose \u00een <\/a><\/noindex>\u00a0\u2014 sistem\u0103 de clusterizare, a c\u0103rei func\u021bionalitate este realizat\u0103 \u00een interiorul Docker Engine \u0219i este disponibil\u0103 din cutie.<\/p>\n<p><\/p>\n<p>Cu ajutorul \u201eroiului\u201d, toate nodurile clusterului nostru pot fi \u00eemp\u0103r\u021bite \u00een 2 tipuri \u2013 worker \u0219i manager. Pe ma\u0219inile de tip worker se desf\u0103\u0219oar\u0103 grupuri de containere (stacks), iar ma\u0219inile de tip manager r\u0103spund pentru scalare, balansare \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/#feature-highlights\">alte caracteristici excelente<\/a><\/noindex>. Managerii sunt \u00een mod implicit \u0219i workers.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/d195e2aab6d3552652102c2b5246abfc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Un cluster cu un leader manager \u0219i trei workers<\/i><\/p>\n<p><\/p>\n<p>Dimensiunea minim\u0103 posibil\u0103 a clusterului este de 1 nod, o singur\u0103 ma\u0219in\u0103 va func\u021biona simultan ca leader manager \u0219i worker. Av\u00e2nd \u00een vedere dimensiunea proiectului \u0219i cerin\u021bele minime pentru toleran\u021ba la erori, s-a decis s\u0103 se foloseasc\u0103 aceast\u0103 abordare.<\/p>\n<p><\/p>\n<p>Spun\u00e2nd pe scurt, de la prima livrare \u00een produc\u021bie, care a avut loc \u00een mijlocul lui iunie, nu au existat probleme legate de organizarea acestui cluster (dar asta nu \u00eenseamn\u0103 c\u0103 o astfel de organizare este acceptabil\u0103 \u00een orice proiecte medii-mari la care se impun cerin\u021be de toleran\u021b\u0103 la erori).<\/p>\n<p><\/p>\n<h3>Docker Stack<\/h3>\n<p><\/p>\n<p>\u00cen modul \u201eroi\u201d, desf\u0103\u0219urarea stacks-urilor (seturi de servicii docker) este responsabilitatea <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/stack\/\">docker stack<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Acesta suport\u0103 configura\u021bii docker-compose, permi\u021b\u00e2nd utilizarea suplimentar\u0103 a parametrilor de desf\u0103\u0219urare.\u00a0\u00a0<\/p>\n<p><\/p>\n<p>De exemplu, cu ajutorul acestor parametri, au fost limitate resursele pentru fiecare dintre instan\u021bele microserviciului de evaluare (aloc\u0103m N core pentru N instan\u021be, \u00een microserviciu limit\u0103m num\u0103rul de core-uri utilizate de PyTorch la unul singur)<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">attrai_estimator:\n\u00a0\u00a0imagine: 'erqups\/attrai_estimator:1.2'\n\u00a0\u00a0desf\u0103\u0219urare:\n\u00a0\u00a0\u00a0\u00a0replici: 4\n\u00a0\u00a0\u00a0\u00a0resurse:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0limite:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0cpu-uri: '4'\n\u00a0\u00a0\u00a0\u00a0politica_de_restart:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0condi\u021bie: \u00een caz de e\u0219ec\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2026<\/code><\/pre>\n<p><\/p>\n<p>Este important de men\u021bionat c\u0103 Redis, RabbitMQ \u0219i Graylog sunt servicii stateful \u0219i nu se pot scala la fel de simplu ca \u201eattrai-estimator\u201d<\/p>\n<p><\/p>\n<h3>Anticip\u00e2nd \u00eentrebarea \u2013 de ce nu Kubernetes?<\/h3>\n<p><\/p>\n<p>Pare c\u0103 utilizarea Kubernetes \u00een proiecte mici \u0219i medii este un cost suplimentar, \u00eentreaga func\u021bionalitate necesar\u0103 poate fi ob\u021binut\u0103 de la Docker Swarm, care este destul de prietenos pentru orchestrarea containerelor \u0219i are un prag de intrare sc\u0103zut.<\/p>\n<p><\/p>\n<h3>Infrastructur\u0103<\/h3>\n<p><\/p>\n<p>Toate acestea au fost desf\u0103\u0219urate pe un VDS cu urm\u0103toarele caracteristici:<\/p>\n<p><\/p>\n<ul>\n<li>CPU: 4 nuclee Intel\u00ae Xeon\u00ae 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>Dup\u0103 testarea de \u00eenc\u0103rcare local\u0103, p\u0103rea c\u0103 \u00een cazul unui aflux serios de utilizatori, aceast\u0103 ma\u0219in\u0103 va fi abia suficient\u0103.<\/p>\n<p><\/p>\n<p>\u00cens\u0103, imediat dup\u0103 desf\u0103\u0219urare, am postat un link pe unul dintre cele mai populare imageboard-uri din CSI (da, acel imageboard), dup\u0103 care oamenii s-au ar\u0103tat interesa\u021bi \u0219i, \u00een c\u00e2teva ore, serviciul a procesat cu succes zeci de mii de imagini. \u00cen plus, \u00een momentele de v\u00e2rf, resursele CPU \u0219i RAM nu au fost folosite nici m\u0103car la jum\u0103tate.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/458d74dae00d455fbce1ca6a197325d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/e9383c47369c606d26e89a69f4d22b5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>\u00cenc\u0103 pu\u021bin\u0103 grafic\u0103<\/h3>\n<p><\/p>\n<p>Num\u0103rul utilizatorilor unici \u0219i al cererilor de evaluare, de la desf\u0103\u0219urare, \u00een func\u021bie de zi<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/7112c78c8400d2ac73562243b16a015b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Distribu\u021bia timpului de inferen\u021b\u0103 a pipeline-ului de evaluare<\/p>\n<p>\n<img decoding=\"async\" alt=\"Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului bazat\u0103 pe re\u021bele neuronale\" src=\"\/wp-content\/uploads\/2020\/07\/4c892ce607c3ff3db466459729dd0876.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Conclusions<\/h2>\n<p><\/p>\n<p>Rezum\u00e2nd, pot spune c\u0103 arhitectura \u0219i abordarea orchestratului containerelor s-au dovedit a fi pe deplin justificate \u2014 chiar \u0219i \u00een momentele de v\u00e2rf nu au fost c\u0103deri sau sc\u0103deri ale timpului de procesare.\u00a0<\/p>\n<p><\/p>\n<p>Cred c\u0103 proiectele mici \u0219i medii care folosesc inferen\u021ba \u00een timp real a re\u021belelor neuronale pe CPU pot adopta cu succes practicile descrise \u00een acest articol.<\/p>\n<p><\/p>\n<p>Voi ad\u0103uga c\u0103 ini\u021bial articolul a fost mai lung, dar, pentru a evita un longread, am decis s\u0103 omitem unele puncte din acest articol \u2014 ne vom \u00eentoarce la ele \u00een viitoarele publica\u021bii.<\/p>\n<p><\/p>\n<p>Po\u021bi interac\u021biona cu botul pe Telegram \u2014 @AttraiBot, va func\u021biona, cel pu\u021bin, p\u00e2n\u0103 la sf\u00e2r\u0219itul toamnei anului 2020. V\u0103 reamintesc \u2014 nu sunt stocate datele utilizatorilor \u2014 nici imaginile originale, nici rezultatele pipeline-ului de evaluare \u2014 totul este \u0219ters dup\u0103 procesare.<\/p>\n<p>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Prezentare general\u0103 a arhitecturii serviciului pentru evaluarea aspectului pe baza re\u021belelor neuronale | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/ro\/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":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/89110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=89110"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/89110\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/89111"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=89110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=89110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=89110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}