Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Ifihan

Hi!

Ninu nkan yii Emi yoo pin iriri mi ti kikọ faaji microservice fun iṣẹ akanṣe nipa lilo awọn nẹtiwọọki nkankikan.

Jẹ ki a sọrọ nipa awọn ibeere faaji, wo ọpọlọpọ awọn aworan apẹrẹ, ṣe itupalẹ ọkọọkan awọn paati ti faaji ti o pari, ati tun ṣe iṣiro awọn metiriki imọ-ẹrọ ti ojutu naa.

Gbadun kika!

Awọn ọrọ diẹ nipa iṣoro naa ati ojutu rẹ

Ero akọkọ ni lati ṣe iṣiro ifamọra eniyan lori iwọn-ojuami mẹwa ti o da lori fọto kan.

Ninu nkan yii a yoo lọ kuro lati ṣapejuwe mejeeji awọn nẹtiwọọki nkankikan ti a lo ati ilana igbaradi data ati ikẹkọ. Sibẹsibẹ, ninu ọkan ninu awọn atẹjade atẹle, dajudaju a yoo pada si itupalẹ opo gigun ti epo ni ipele ijinle.

Bayi a yoo lọ nipasẹ opo gigun ti epo ni ipele oke, ati pe yoo dojukọ ibaraenisepo ti awọn iṣẹ microservices ni aaye ti faaji iṣẹ akanṣe gbogbogbo. 

Nigbati o ba n ṣiṣẹ lori opo gigun ti epo igbelewọn iwunilori, iṣẹ naa ti bajẹ si awọn paati wọnyi:

  1. Yiyan awọn oju ni awọn fọto
  2. Rating ti kọọkan eniyan
  3. Fi abajade naa han

Ni igba akọkọ ti wa ni ojutu nipasẹ awọn ipa ti kọkọ-oṣiṣẹ MTCNN. Fun awọn keji, a convolutional nkankikan nẹtiwọki ti a oṣiṣẹ lori PyTorch, lilo ResNet34 - lati iwọntunwọnsi “didara / iyara ti itọkasi lori Sipiyu”

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Aworan iṣẹ ṣiṣe ti opo gigun ti epo igbelewọn

Onínọmbà ti awọn ibeere faaji ise agbese

Ninu igbe aye ML awọn ipele ise agbese ti iṣẹ lori faaji ati adaṣe ti imuṣiṣẹ awoṣe jẹ igbagbogbo laarin awọn akoko ti n gba ati gbigba awọn orisun.

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Aye ọmọ ti ohun ML ise agbese

Ise agbese yii kii ṣe iyatọ - ipinnu naa ni lati fi ipari si opo gigun ti epo sinu iṣẹ ori ayelujara, eyiti o nilo ibọmi ara wa ni faaji. Awọn ibeere ipilẹ wọnyi ni a ṣe idanimọ:

  1. Ibi ipamọ iwe iṣọkan - gbogbo awọn iṣẹ yẹ ki o kọ awọn akọọlẹ ni aaye kan, wọn yẹ ki o rọrun lati ṣe itupalẹ
  2. O ṣeeṣe ti iwọn petele ti iṣẹ igbelewọn - bi Bottleneck ti o ṣeeṣe julọ
  3. Iye kanna ti awọn orisun ero isise yẹ ki o pin lati ṣe iṣiro aworan kọọkan lati yago fun awọn atako ni pinpin akoko fun itọkasi
  4. Yara (tun) imuṣiṣẹ ti awọn iṣẹ kan pato mejeeji ati akopọ lapapọ
  5. Agbara, ti o ba jẹ dandan, lati lo awọn nkan ti o wọpọ ni awọn iṣẹ oriṣiriṣi

faaji

Lẹhin itupalẹ awọn ibeere naa, o han gbangba pe faaji microservice baamu ni pipe.

Lati le yọ awọn efori ti ko wulo, API Telegram ti yan bi iwaju iwaju.

Ni akọkọ, jẹ ki a wo aworan igbekale ti faaji ti o pari, lẹhinna tẹsiwaju si apejuwe ti ọkọọkan awọn paati, ati tun ṣe ilana ilana ti sisẹ aworan aṣeyọri.

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Awọn aworan atọka igbekale ti awọn ti pari faaji

Jẹ ki a sọrọ ni awọn alaye diẹ sii nipa ọkọọkan awọn paati ti aworan atọka, n tọka si Ojuse Kanṣo ninu ilana igbelewọn aworan.

Microservice "attrai-telegram-bot"

Ohun elo microservice yii ṣe akojọpọ gbogbo awọn ibaraenisepo pẹlu API Telegram. Awọn oju iṣẹlẹ akọkọ 2 wa: ṣiṣẹ pẹlu aworan aṣa ati ṣiṣẹ pẹlu abajade ti opo gigun ti epo. Jẹ ki a wo awọn oju iṣẹlẹ mejeeji ni awọn ọrọ gbogbogbo.

Nigbati o ba ngba ifiranṣẹ aṣa kan pẹlu aworan kan:

  1. Asẹ ni a ṣe, ti o ni awọn sọwedowo wọnyi:
    • Wiwa ti iwọn aworan to dara julọ
    • Nọmba awọn aworan olumulo tẹlẹ ti isinyi
  2. Nigbati o ba n kọja sisẹ akọkọ, aworan naa ti wa ni fipamọ ni iwọn didun docker
  3. Iṣẹ-ṣiṣe kan ni a ṣe ni isinyi “lati_estimate”, eyiti o pẹlu, ninu awọn ohun miiran, ọna si aworan ti o wa ni iwọn didun wa.
  4. Ti awọn igbesẹ ti o wa loke ba ti pari ni aṣeyọri, olumulo yoo gba ifiranṣẹ kan pẹlu akoko ṣiṣe aworan isunmọ, eyiti o da lori nọmba awọn iṣẹ ṣiṣe ti isinyi. Ti aṣiṣe ba waye, olumulo yoo gba ifitonileti ni gbangba nipa fifiranṣẹ ifiranṣẹ kan pẹlu alaye nipa ohun ti o le jẹ aṣiṣe.

Paapaa, microservice yii, bii oṣiṣẹ seleri, tẹtisi isinyi “after_estimate”, eyiti a pinnu fun awọn iṣẹ ṣiṣe ti o ti kọja nipasẹ opo gigun ti epo.

Nigbati o ba ngba iṣẹ-ṣiṣe titun kan lati "after_estimate":

  1. Ti aworan naa ba ni ilọsiwaju, a fi esi ranṣẹ si olumulo; ti kii ba ṣe bẹ, a leti nipa aṣiṣe kan.
  2. Yiyọ aworan ti o jẹ abajade ti opo gigun ti epo

Iṣiro iṣẹ microservice “attrai-estimator”

Microservice yii jẹ oṣiṣẹ seleri kan ati pe o ṣafikun ohun gbogbo ti o ni ibatan si opo gigun ti igbelewọn aworan. Algoridimu iṣẹ kan nikan wa nibi - jẹ ki a ṣe itupalẹ rẹ.

Nigbati o ba ngba iṣẹ-ṣiṣe titun kan lati "lati_iyẹwo":

  1. Jẹ ki a ṣiṣẹ aworan naa nipasẹ opo gigun ti epo:
    1. Gbigbe aworan sinu iranti
    2. A mu aworan wa si iwọn ti a beere
    3. Wiwa gbogbo awọn oju (MTCNN)
    4. A ṣe iṣiro gbogbo awọn oju (a fi ipari si awọn oju ti a rii ni igbesẹ ti o kẹhin sinu ipele kan ati itọkasi ResNet34)
    5. Ṣe aworan ikẹhin
      1. Jẹ ki a fa awọn apoti ifunmọ
      2. Yiya awọn iwontun-wonsi
  2. Piparẹ aṣa (atilẹba) aworan
  3. Nfipamọ abajade lati opo gigun ti epo
  4. A fi iṣẹ naa sinu isinyi “after_estimate”, eyiti a tẹtisi nipasẹ “attrai-telegram-bot” microservice ti a sọrọ loke.

Graylog (+ mongoDB + Elasticsearch)

Grẹlogi jẹ ojutu kan fun iṣakoso log ti aarin. Ninu iṣẹ akanṣe yii, a lo fun idi ti a pinnu rẹ.

Yiyan ṣubu lori rẹ, kii ṣe lori ọkan ti o ṣe deede Elk akopọ, nitori irọrun ti ṣiṣẹ pẹlu rẹ lati Python. Gbogbo ohun ti o nilo lati ṣe lati wọle si Graylog ni ṣafikun GELFTCPHandler lati package grẹypy si awọn iyokù ti root logger handlers ti wa Python microservice.

Gẹgẹbi ẹnikan ti o ti ṣiṣẹ tẹlẹ pẹlu akopọ ELK nikan, Mo ni iriri rere gbogbogbo lakoko ti n ṣiṣẹ pẹlu Graylog. Ohun kan ṣoṣo ti o ni irẹwẹsi ni didara julọ ni awọn ẹya Kibana lori wiwo wẹẹbu Graylog.

EhoroMQ

EhoroMQ jẹ alagbata ifiranṣẹ ti o da lori ilana AMQP.

Ni yi ise agbese ti o ti lo bi julọ ​​idurosinsin ati akoko-ni idanwo alagbata fun Seleri ati ṣiṣẹ ni ipo ti o tọ.

Redis

Redis jẹ NoSQL DBMS ti o ṣiṣẹ pẹlu awọn ẹya data iye bọtini

Nigba miiran iwulo wa lati lo awọn nkan ti o wọpọ ti o ṣe awọn ẹya data kan ni oriṣiriṣi awọn iṣẹ microservices Python.

Fún àpẹrẹ, Redis tọ́jú hashmap fọ́ọ̀mù “telegram_user_id => iye àwọn iṣẹ́ tí ń ṣiṣẹ́ nínú ìlà,” èyí tí ó jẹ́ kí o fi ìwọ̀n iye àwọn ìbéèrè láti ọ̀dọ̀ oníṣe kan sí iye kan àti, nípa bẹ́ẹ̀, dènà ìkọlù DoS.

Jẹ ki a formalize awọn ilana ti aseyori image processing

  1. Olumulo naa fi aworan ranṣẹ si bot Telegram
  2. "attrai-telegram-bot" gba ifiranṣẹ kan lati API Telegram o si ṣe itupalẹ rẹ
  3. Iṣẹ-ṣiṣe pẹlu aworan naa ni a ṣafikun si isinyi asynchronous “lati_iṣiro”
  4. Olumulo gba ifiranṣẹ pẹlu akoko igbelewọn ti a gbero
  5. "attrai-estimator" gba iṣẹ-ṣiṣe kan lati ori isinyi "lati_estimate", ṣiṣe awọn iṣiro nipasẹ opo gigun ti epo ati gbejade iṣẹ naa sinu isinyi "after_estimate"
  6. "attrai-telegram-bot" ti ngbọ ti isinyi "after_estimate", fi abajade ranṣẹ si olumulo

DevOps

Lakotan, lẹhin atunwo faaji, o le lọ si apakan ti o nifẹ si kanna - DevOps

Docker fọn

 

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Docker fọn  - eto iṣupọ kan, iṣẹ ṣiṣe eyiti o jẹ imuse inu Docker Engine ati pe o wa lati inu apoti.

Lilo “swarm”, gbogbo awọn apa inu iṣupọ wa le pin si awọn oriṣi 2 - oṣiṣẹ ati oluṣakoso. Lori awọn ẹrọ ti iru akọkọ, awọn ẹgbẹ ti awọn apoti (awọn akopọ) ti wa ni ransogun, awọn ẹrọ ti iru keji jẹ iduro fun iwọn, iwọntunwọnsi ati miiran itura awọn ẹya ara ẹrọ. Awọn alakoso tun jẹ oṣiṣẹ nipasẹ aiyipada.

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Ikọpọ pẹlu oludari oludari kan ati awọn oṣiṣẹ mẹta

Iwọn iṣupọ ti o kere julọ ti o ṣeeṣe jẹ ipade 1; ẹrọ ẹyọkan yoo ṣiṣẹ nigbakanna bi oluṣakoso adari ati oṣiṣẹ kan. Da lori iwọn ti ise agbese na ati awọn ibeere to kere julọ fun ifarada aṣiṣe, o pinnu lati lo ọna yii.

Ni wiwa niwaju, Emi yoo sọ pe lati igba ifijiṣẹ iṣelọpọ akọkọ, eyiti o wa ni aarin Oṣu Keje, ko si awọn iṣoro ti o ni nkan ṣe pẹlu agbari iṣupọ yii (ṣugbọn eyi ko tumọ si pe iru ajo bẹ ni eyikeyi ọna itẹwọgba ni eyikeyi alabọde-nla. awọn iṣẹ akanṣe, eyiti o jẹ koko ọrọ si awọn ibeere ifarada aṣiṣe).

Docker Stack

Ni ipo swarm, o ni iduro fun gbigbe awọn akopọ (awọn eto ti awọn iṣẹ docker) docker akopọ

O ṣe atilẹyin awọn atunto akojọpọ docker, gbigba ọ laaye lati lo awọn aṣayan imuṣiṣẹ ni afikun.  

Fun apẹẹrẹ, lilo awọn paramita wọnyi, awọn orisun fun ọkọọkan awọn iṣẹlẹ microservice igbelewọn ni opin (a pin awọn ohun kohun N fun awọn iṣẹlẹ N, ninu microservice funrararẹ a fi opin si nọmba awọn ohun kohun ti PyTorch lo si ọkan)

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

O ṣe pataki lati ṣe akiyesi pe Redis, RabbitMQ ati Graylog jẹ awọn iṣẹ ipinlẹ ati pe wọn ko le ṣe iwọn ni irọrun bi “attrai-estimator”

Iṣafihan ibeere naa - kilode ti kii ṣe Kubernetes?

O dabi pe lilo Kubernetes ni awọn iṣẹ akanṣe kekere ati alabọde jẹ oke; gbogbo iṣẹ ṣiṣe pataki ni a le gba lati Docker Swarm, eyiti o jẹ ore-ọfẹ pupọ fun oluṣeto eiyan ati tun ni idena kekere si titẹsi.

Amayederun

Gbogbo eyi ni a gbe sori VDS pẹlu awọn abuda wọnyi:

  • Sipiyu: 4 mojuto Intel® Xeon® Gold 5120 Sipiyu @ 2.20GHz
  • Ramu: 8 GB
  • SSD: 160GB

Lẹhin idanwo fifuye agbegbe, o dabi pe pẹlu ṣiṣan ti o ṣe pataki ti awọn olumulo, ẹrọ yii yoo to.

Ṣugbọn, lẹsẹkẹsẹ lẹhin imuṣiṣẹ, Mo fi ọna asopọ kan si ọkan ninu awọn aworan aworan ti o gbajumo julọ ni CIS (yup, ti o kan kanna), lẹhin eyi eniyan ni anfani ati ni awọn wakati diẹ iṣẹ naa ni aṣeyọri ti ṣe atunṣe awọn ẹgbẹẹgbẹrun awọn aworan. Ni akoko kanna, ni awọn akoko ti o ga julọ, Sipiyu ati awọn orisun Ramu ko paapaa lo idaji.

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan
Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Diẹ ninu awọn diẹ eya

Nọmba awọn olumulo alailẹgbẹ ati awọn ibeere igbelewọn lati igba imuṣiṣẹ, da lori ọjọ naa

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

Pinpin akoko itọkasi opo gigun ti epo

Akopọ gbogbogbo ti faaji iṣẹ fun igbelewọn irisi ti o da lori awọn nẹtiwọọki nkankikan

awari

Lati ṣe akopọ, Mo le sọ pe faaji ati isunmọ si orchestration ti awọn apoti jẹ idalare fun ara wọn ni kikun - paapaa ni awọn akoko ti o ga julọ ko si awọn silẹ tabi sagging ni akoko ṣiṣe. 

Mo ro pe awọn iṣẹ akanṣe kekere ati alabọde ti o lo itọkasi akoko gidi ti awọn nẹtiwọọki nkankikan lori Sipiyu ninu ilana wọn le ṣaṣeyọri gba awọn iṣe ti a ṣalaye ninu nkan yii.

Emi yoo ṣafikun pe lakoko nkan naa gun, ṣugbọn lati ma ṣe firanṣẹ kika gigun, Mo pinnu lati fi awọn aaye diẹ silẹ ninu nkan yii - a yoo pada si wọn ni awọn atẹjade ọjọ iwaju.

O le poke bot lori Telegram - @AttraiBot, yoo ṣiṣẹ o kere ju titi di opin Igba Irẹdanu Ewe 2020. Jẹ ki n leti pe ko si data olumulo ti o fipamọ - bẹni awọn aworan atilẹba, tabi awọn abajade ti opo gigun ti epo - ohun gbogbo ti bajẹ lẹhin sisẹ.

orisun: www.habr.com

Fi ọrọìwòye kun