{"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\/et\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","title":{"rendered":"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/f624e995fbee3496f1f7890b98106df4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Sissejuhatus<\/h2>\n<p><\/p>\n<p>Tere!<\/p>\n<p><\/p>\n<p>Selles artiklis jagan kogemusi mikroteenuste arhitektuuri loomisel projektile, mis kasutab n\u00e4rviv\u00f5rke.<\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gime arhitektuuri n\u00f5uetest, vaatame erinevaid struktuuri diagramme, anal\u00fc\u00fcsime iga valmis arhitektuuri komponenti ning hindame lahenduse tehnilisi n\u00e4itajaid.<\/p>\n<p><\/p>\n<p>Head lugemist!<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>M\u00f5ned s\u00f5nad \u00fclesandest ja selle lahendusest<\/h2>\n<p><\/p>\n<p>Peamine m\u00f5te on hinnata inimese atraktiivsust k\u00fcmnepallisel skaalal fotode p\u00f5hjal.<\/p>\n<p><\/p>\n<p>Selles artiklis k\u00f5rvale j\u00e4tame kirjeldused nii kasutatavatest n\u00e4rviv\u00f5rkudest kui ka andmete ettevalmistamise ja \u00f5petamise protsessist. Siiski, \u00fches j\u00e4rgmises publikatsioonis, naaseme kindlasti s\u00fcvaprobleemide anal\u00fc\u00fcsi juurde.<\/p>\n<p><\/p>\n<p>Praegu vaatleme \u00fclemise taseme l\u00f5ikes hindamispipeline'i, keskendudes mikroteenuste koostoimele projekti \u00fcldises arhitektuuris.\u00a0<\/p>\n<p><\/p>\n<p>Atraktiivsuse hindamisprotsessis jagunes \u00fclesanne j\u00e4rgmisteks osadeks:<\/p>\n<p><\/p>\n<ol>\n<li>N\u00e4olist tuvastamist piltidel<\/li>\n<li>Iga n\u00e4o hindamine<\/li>\n<li>Tulemuse renderdamine<\/li>\n<\/ol>\n<p><\/p>\n<p>Esimene probleem lahendatakse eelnevalt treenitud <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1604.02878\">MTCNN<\/a><\/noindex>. Teise jaoks treeniti konvolutsiooniline n\u00e4rviv\u00f5rk PyTorch'is, kus backbone'ina kasutati <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.03385\">ResNet34<\/a><\/noindex> \u2013 kaalu tasakaalu \u201ekvaliteet \/ CPU infereerimise kiirus\"<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/181cc89a2cf5295bdcd4b838216f96d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Hindamispipeline'i funktsionaalne diagramm<\/i><\/p>\n<p><\/p>\n<h2>Projekti arhitektuurin\u00f5uete anal\u00fc\u00fcs<\/h2>\n<p><\/p>\n<p>Elu ts\u00fcklis <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Machine_learning\">ML<\/a><\/noindex> projekti arhitektuuri ja mudeli juurutamise automatiseerimise etapid on sageli ajaliselt ja ressursiliselt k\u00f5ige kulukamad.<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/4949f217d31c863176122ed87b43a88c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>ML projekti elu ts\u00fckkel<\/i><\/p>\n<p><\/p>\n<p>See projekt ei ole erand - otsustati m\u00e4hkida hindamispipeline veebiteenusesse, milleks tuli s\u00fcveneda arhitektuuri. M\u00e4\u00e4rati j\u00e4rgmised p\u00f5hin\u00f5uded:<\/p>\n<p><\/p>\n<ol>\n<li>\u00dcksne logide salvestamine - k\u00f5ik teenused peavad kirjutama logid \u00fchte kohta, et neid oleks mugav anal\u00fc\u00fcsida<\/li>\n<li>Hindamisteenuse horisontaalne skaleerimise v\u00f5imalus - kuna see on t\u00f5en\u00e4oliselt pudelikael<\/li>\n<li>Iga pildi hindamiseks tuleb eraldada sama palju protsessori ressursse - v\u00e4ltimaks ajakulu jaotuses erandeid<\/li>\n<li>Kiire (taas)juurutamine nii konkreetsete teenuste kui ka kogu stack'i jaoks<\/li>\n<li>V\u00f5imalus, vajadusel, kasutada erinevates teenustes \u00fchiseid objekte<\/li>\n<\/ol>\n<p><\/p>\n<h2>Arhitektuur<\/h2>\n<p><\/p>\n<p>P\u00e4rast n\u00f5uete anal\u00fc\u00fcsi sai selgeks, et mikroteenuste arhitektuur sobib praktiliselt ideaalselt.<\/p>\n<p><\/p>\n<p>Liigne peavalu v\u00e4ltimiseks valiti front-endina Telegram API.<\/p>\n<p><\/p>\n<p>Alustame valmis arhitektuuri struktuuridiagrammi vaatamisega, seej\u00e4rel liikumme iga komponendi kirjeldamise juurde ning formaliseerime eduka pildi t\u00f6\u00f6tlemise protsessi.<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/163ec019341e9d71a1e0854c6026bd01.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Valmis arhitektuuri struktuuridiagramm<\/i><\/p>\n<p><\/p>\n<p>Arutame iga diagrammi komponendi \u00fcle, tuvastame nende \u00fche vastutuse pildi hindamise protsessis.<\/p>\n<p><\/p>\n<h3>Mikroteenus \u201eattrai-telegram-bot\u201c<\/h3>\n<p><\/p>\n<p>See mikroteenus kapseldab k\u00f5ik interaktsioonid Telegram API-ga. V\u00f5ime eristada kahte peamist stsenaariumi: t\u00f6\u00f6tamine kasutaja pildiga ja t\u00f6\u00f6tamine hindamise t\u00f6\u00f6tluse tulemusega. Vaatame m\u00f5lemat stsenaariumi \u00fcldiselt.<\/p>\n<p><\/p>\n<p>Kasutaja s\u00f5numi pildi saamisel:<\/p>\n<p><\/p>\n<ol>\n<li>Toimub filtreerimine, mis koosneb j\u00e4rgmistest kontrollidest:\n<ul>\n<li>Pildi optimaalse suuruse olemasolu<\/li>\n<li>Kasutaja piltide arv, mis juba j\u00e4rjekorras on<\/li>\n<\/ul>\n<\/li>\n<li>Kui esialgne filtreerimine on l\u00e4bitud, salvestatakse pilt docker vol\u00fc\u00fcmisse<\/li>\n<li>J\u00e4rjekorda \u201cto_estimate\u201d produtseeritakse \u00fclesanne, milles muu hulgas sisaldub tee pildini, mis asub meie vol\u00fc\u00fcmis<\/li>\n<li>Kui \u00fclaltoodud etapid on edukalt l\u00e4bitud, saab kasutaja s\u00f5numi pildi t\u00f6\u00f6tlemise umbkaudse aja kohta, mis arvutatakse j\u00e4rjekorras olevate \u00fclesannete arvu alusel. Vea korral teavitatakse kasutajat selgelt - saadetakse s\u00f5num, kus on teave selle kohta, mis oleks v\u00f5inud valesti minna. <\/li>\n<\/ol>\n<p><\/p>\n<p>Samuti kuulab see mikroteenus, nagu celery worker, j\u00e4rjekorda \u201eafter_estimate\u201c, mis on m\u00f5eldud hindamise t\u00f6\u00f6tluse l\u00e4binud \u00fclesannetele.<\/p>\n<p><\/p>\n<p>Uue \u00fclesande saamisel j\u00e4rjekorrast \u201cafter_estimate\u201d:<\/p>\n<p><\/p>\n<ol>\n<li>Kui pilt on edukalt t\u00f6\u00f6deldud, saadame tulemuse kasutajale, kui ei - teavitame veast<\/li>\n<li>Kustutame pildi, mis on hindamise t\u00f6\u00f6tluse tulemus<\/li>\n<\/ol>\n<p><\/p>\n<h3>Hindamisteenus \u201eattrai-estimator\u201c<\/h3>\n<p><\/p>\n<p>See mikroteenus on celery worker ja kapseldab k\u00f5ik, mis on seotud pildihindamise t\u00f6\u00f6tlusega. Siin on t\u00f6\u00f6protsess \u00fcks - vaatame seda.<\/p>\n<p><\/p>\n<p>Uue \u00fclesande saamisel j\u00e4rjekorrast \u201cto_estimate\u201d:<\/p>\n<p><\/p>\n<ol>\n<li>Lastakse pilt l\u00e4bi hindamisprotsessi:\n<ol>\n<li>Laadime pildi m\u00e4lu<\/li>\n<li>Kohandame pildi soovitud suurusele<\/li>\n<li>Leiame k\u00f5ik n\u00e4od (MTCNN)<\/li>\n<li>Hindame k\u00f5iki n\u00e4gusid (\u00fcmbritseme eelnevalt leitud n\u00e4od partii formaadis ja teeme inferentsi ResNet34 abil)<\/li>\n<li>Renderdame l\u00f5pppildi\n<ol>\n<li>Joonistame v\u00e4lja piirjooned<\/li>\n<li>Joonistame v\u00e4lja hinnangud<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Kustutame kasutaja (algse) pildi<\/li>\n<li>Salvestame hindamise v\u00e4ljundi<\/li>\n<li>Paneme \u00fclesande j\u00e4rjekorda \u201eafter_estimate\u201c, mida kuulab \u00fclalmainitud mikroteenus \u201eattrai-telegram-bot\u201c<\/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 on lahendus logide tsentraalseks haldamiseks. Selles projektis kasutati seda oma otstarbele vastavalt.<\/p>\n<p><\/p>\n<p>Valiku p\u00f5hjuseks oli just see, mitte tuntud <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/what-is\/elk-stack\">ELK<\/a><\/noindex> stack, kuna sellega t\u00f6\u00f6tamine Pythonis on mugav. K\u00f5ik, mis on vajalik Graylogi logimiseks, on lisada GELFTCPHandler pakist <noindex><a rel=\"nofollow\" href=\"https:\/\/pypi.org\/project\/graypy\/\">graypy<\/a><\/noindex> muude meie python-mikros\u00fcsteemi juurlogeri haldurite hulka.<\/p>\n<p><\/p>\n<p>Mina, inimesena, kes on varem t\u00f6\u00f6tanud ainult ELK stackiga, sain Graylogiga t\u00f6\u00f6tamisest kokkuv\u00f5ttes positiivse kogemuse. Ainus, mis h\u00e4irib, on Kibana funktsioonide \u00fclekaal Graylogi veebiliidese ees.<\/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 on AMQP protokollil p\u00f5hinev s\u00f5numite vahetus s\u00fcsteem.<\/p>\n<p><\/p>\n<p>Selles projektis kasutati seda kui <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.celeryproject.org\/en\/latest\/getting-started\/brokers\/#broker-overview\">k\u00f5ige stabiilsemat ja aja jooksul testitud<\/a><\/noindex> vahetuss\u00fcsteemi Celery jaoks ja see t\u00f6\u00f6tas durable re\u017eiimis.<\/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 on NoSQL andmebaas, mis t\u00f6\u00f6tab \u201ev\u00f5ti \u2014 v\u00e4\u00e4rtus\u201c andmestruktuuridega.<\/p>\n<p><\/p>\n<p>Tuleb kohati kasutada erinevates python-mikros\u00fcsteemides \u00fchiseid objekte, mis rakendavad m\u00f5ningaid andmestruktuure.<\/p>\n<p><\/p>\n<p>N\u00e4iteks, Redis sisaldab hashmapi kujul \u201etelegram_user_id =&gt; aktiivsete \u00fclesannete arv j\u00e4rjekorras\u201c, mis v\u00f5imaldab piirata teatud v\u00e4\u00e4rtusega \u00fche kasutaja p\u00e4ringute arvu, v\u00e4ltides seel\u00e4bi DoS-r\u00fcnnakuid.<\/p>\n<p><\/p>\n<h3>Formuleerime \u00e4ra t\u00f6\u00f6tava pildi t\u00f6\u00f6tlemise protsessi<\/h3>\n<p><\/p>\n<ol>\n<li>Kasutaja saadab pildi Telegrami botile<\/li>\n<li>\u201eattrai-telegram-bot\u201c saab s\u00f5numi Telegrami API-lt ja t\u00f5lgendab selle<\/li>\n<li>\u00dclesanne pildiga lisatakse as\u00fcnkroonsesse j\u00e4rjekorda \u201eto_estimate\u201c<\/li>\n<li>Kasutaja saab s\u00f5numi planeeritud hindamise ajaga<\/li>\n<li>\u201eattrai-estimator\u201c v\u00f5tab \u00fclesande j\u00e4rjekorrast \u201eto_estimate\u201c, edastab selle hindamisprotsessi l\u00e4bi ja toodab \u00fclesande j\u00e4rjekorda \u201eafter_estimate\u201c<\/li>\n<li>\u201eattrai-telegram-bot\u201c, mis kuulab j\u00e4rjekorda \u201eafter_estimate\u201c, saadab tulemuse kasutajale<\/li>\n<\/ol>\n<p><\/p>\n<h2>DevOps<\/h2>\n<p><\/p>\n<p>L\u00f5puks, p\u00e4rast arhitektuuri \u00fclevaatamist, v\u00f5ime minna mitte v\u00e4hem huvitavasse ossa \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=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" 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 klasterdamise s\u00fcsteem, mille funktsionaalsus on rakendatud Docker Engine'i sisse ja on kohe kasutamiseks valmis.<\/p>\n<p><\/p>\n<p>Roya abil saab meie klastris k\u00f5ik s\u00f5lmed jagada kahe t\u00fc\u00fcbi vahel \u2013 worker ja manager. Esimese t\u00fc\u00fcbi masinatel k\u00e4ivitatakse konteinerigruppide (stekid) komplekte, teise t\u00fc\u00fcbi masinad vastutavad skaleerimise, tasakaalustamise ja <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/#feature-highlights\">teiste \u00e4gedate funktsioonide eest.<\/a><\/noindex>M\u00e4ngijad on vaikimisi ka t\u00f6\u00f6tajad.<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/d195e2aab6d3552652102c2b5246abfc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Klaster, kus on \u00fcks juhtiv manager ja kolm t\u00f6\u00f6tajat.<\/i><\/p>\n<p><\/p>\n<p>Minimaalne klasteri suurus on 1 s\u00f5lm, ainus masin t\u00f6\u00f6tab samal ajal juhtiva manageri ja t\u00f6\u00f6tajana. Projekti suurusest ja minimaalsetest n\u00f5udmistest talitlush\u00e4irete osas l\u00e4htuvalt on otsustatud kasutada just seda l\u00e4henemist.<\/p>\n<p><\/p>\n<p>Eelnevalt \u00f6eldes, alates esimesest tootmispaigaldusest, mis toimus juuni keskel, ei ole olnud selle klasteri korraldusega seotud probleeme (kuid see ei t\u00e4henda, et selline korraldus oleks lubatav igasugustes keskmise ja suurte projektide puhul, millega kaasnevad talitlush\u00e4irete n\u00f5uded).<\/p>\n<p><\/p>\n<h3>Docker Stack<\/h3>\n<p><\/p>\n<p>Roya re\u017eiimis vastutab stekide (docker teenuste komplektide) k\u00e4ivitamise eest <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/stack\/\">docker stack<\/a><\/noindex><\/p>\n<p><\/p>\n<p>See toetab docker-compose konfigureeringuid, v\u00f5imaldades lisaks kasutada deploy parameetreid.\u00a0\u00a0<\/p>\n<p><\/p>\n<p>N\u00e4iteks nende parameetrite abil piirati ressursside jagamist iga \u00fcksiku mikroteenuse hindamiseks (jagame N instantsile N tuuma, mikroteenuses piirame PyTorchi kasutatavate tuumade arvu \u00fchega).<\/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>Oluline on m\u00e4rkida, et Redis, RabbitMQ ja Graylog on stateful teenused ning nende skaleerimine ei ole nii lihtne nagu 'attrai-estimator'.<\/p>\n<p><\/p>\n<h3>Eelnevalt k\u00fcsimusele \u2013 miks mitte Kubernetes?<\/h3>\n<p><\/p>\n<p>Tundub, et Kubernetes'e kasutamine v\u00e4ikeste ja keskmise suurusega projektide puhul on \u00fcleliigne, kogu vajalik funktsionaalsus on saadaval Docker Swarmis, mis on \u00fcsna kasutajas\u00f5bralik konteinerite koordineerija ja mille sisenemisl\u00e4vi on madal.<\/p>\n<p><\/p>\n<h3>Infrastruktuur<\/h3>\n<p><\/p>\n<p>K\u00f5ik see paigaldati VDS-ile, millel on j\u00e4rgmised omadused:<\/p>\n<p><\/p>\n<ul>\n<li>CPU: 4 tuuma 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>P\u00e4rast kohalikku koormustestimist tundus, et t\u00f5sise k\u00fclastajate voolu korral on sellist masinat napilt piisavalt.<\/p>\n<p><\/p>\n<p>Kuid kohe p\u00e4rast kasutuselev\u00f5ttu postitasin lingi \u00fchele Venemaa ja naaberriikide populaarseimale pildifoorumile (jah, sellele samale), p\u00e4rast mida hakkasid inimesed huvi tundma ja m\u00f5ne tunni jooksul t\u00f6\u00f6tas teenus edukalt l\u00e4bi k\u00fcmneid tuhandeid pilte. Samal ajal ei kasutanud CPU ja RAM ressursid isegi pooli oma v\u00f5imetest tipptundidel.<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/458d74dae00d455fbce1ca6a197325d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/e9383c47369c606d26e89a69f4d22b5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Veidi graafikat<\/h3>\n<p><\/p>\n<p>Unikaalsete kasutajate ja hindamisp\u00e4ringute arv kasutuselev\u00f5tu hetkest alates, s\u00f5ltuvalt p\u00e4evast<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/7112c78c8400d2ac73562243b16a015b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hindamisprotsessi infereerimise ajajaotus<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dclevaade teenuse arhitektuurist v\u00e4limuse hindamiseks n\u00e4rviv\u00f5rkude p\u00f5hjal\" src=\"\/wp-content\/uploads\/2020\/07\/4c892ce607c3ff3db466459729dd0876.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>J\u00e4reldused<\/h2>\n<p><\/p>\n<p>Kokkuv\u00f5tlikult v\u00f5in \u00f6elda, et arhitektuur ja konteinerite orkestreerimise l\u00e4henemine on end t\u00e4ielikult \u00f5igustanud \u2014 isegi tipptundidel ei olnud viivitusi ega aeglustumist t\u00f6\u00f6tlemise ajas.\u00a0<\/p>\n<p><\/p>\n<p>Arvan, et v\u00e4ikeste ja keskmise suurusega projektid, mis kasutavad oma protsessis reaalajas n\u00e4rviv\u00f5rkude infereerimist CPU-l, v\u00f5ivad edukalt \u00fcle v\u00f5tta artiklis kirjeldatud tavasid.<\/p>\n<p><\/p>\n<p>Lisaks lisan, et algselt oli artikkel pikem, kuid et mitte postitada liiga mahukat sisu, otsustasin m\u00f5ned punktid siin artiklis vahele j\u00e4tta \u2014 tuleme nende juurde tagasi j\u00e4rgmistes v\u00e4ljaannetes.<\/p>\n<p><\/p>\n<p>Boti saab katsetada Telegramis \u2014 @AttraiBot, see t\u00f6\u00f6tab v\u00e4hemalt kuni 2020. aasta s\u00fcgise l\u00f5puni. Tuletan meelde \u2014 mingeid kasutajaandmeid ei salvestata \u2014 ei algseid pilte ega hindamisprotsessi tulemusi \u2014 k\u00f5ik kustutatakse p\u00e4rast t\u00f6\u00f6tlemist.<\/p>\n<p>Allikas: <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.1.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\/et\/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.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47\u00dclevaade teenuse arhitektuurist, mis hindab v\u00e4limust p\u00f5hinedes n\u00e4rviv\u00f5rkudel | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/89110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=89110"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/89110\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/89111"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=89110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=89110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=89110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}