Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Mynediad

Hi!

Yn yr erthygl hon byddaf yn rhannu fy mhrofiad o adeiladu pensaernïaeth microwasanaeth ar gyfer prosiect sy'n defnyddio rhwydweithiau niwral.

Gadewch i ni siarad am y gofynion pensaernïaeth, edrychwch ar ddiagramau strwythurol amrywiol, dadansoddi pob un o gydrannau'r bensaernïaeth orffenedig, a hefyd gwerthuso metrigau technegol yr ateb.

Mwynhewch ddarllen!

Ychydig eiriau am y broblem a'i datrysiad

Y prif syniad yw gwerthuso pa mor ddeniadol yw person ar raddfa ddeg pwynt yn seiliedig ar lun.

Yn yr erthygl hon byddwn yn symud i ffwrdd o ddisgrifio'r rhwydweithiau niwral a ddefnyddir a'r broses o baratoi data a hyfforddiant. Fodd bynnag, yn un o’r cyhoeddiadau a ganlyn, byddwn yn bendant yn dychwelyd at ddadansoddi’r arfaeth asesu ar lefel fanwl.

Nawr byddwn yn mynd trwy'r biblinell werthuso ar y lefel uchaf, a byddwn yn canolbwyntio ar ryngweithio microwasanaethau yng nghyd-destun pensaernïaeth gyffredinol y prosiect. 

Wrth weithio ar y biblinell asesu atyniad, cafodd y dasg ei dadelfennu i'r cydrannau canlynol:

  1. Dewis wynebau mewn lluniau
  2. Sgôr pob person
  3. Rendro'r canlyniad

Mae'r cyntaf yn cael ei ddatrys gan rymoedd hyfforddedig ymlaen llaw MTCNN. Ar gyfer yr ail, hyfforddwyd rhwydwaith niwral convolutional ar PyTorch, gan ddefnyddio ResNet34 - o'r cydbwysedd “ansawdd / cyflymder y casgliad ar y CPU”

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Diagram swyddogaethol o'r biblinell werthuso

Dadansoddiad o ofynion pensaernïaeth prosiect

Yn y cylch bywyd ML yn aml mae camau prosiect gwaith ar bensaernïaeth ac awtomeiddio defnyddio modelau ymhlith y rhai sy'n cymryd mwyaf o amser ac sy'n cymryd mwyaf o adnoddau.

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Cylch bywyd prosiect ML

Nid yw’r prosiect hwn yn eithriad – gwnaed y penderfyniad i lapio’r biblinell asesu mewn gwasanaeth ar-lein, a oedd yn gofyn am ymdrochi yn y bensaernïaeth. Nodwyd y gofynion sylfaenol canlynol:

  1. Storfa boncyffion unedig - dylai pob gwasanaeth ysgrifennu logiau mewn un lle, dylent fod yn gyfleus i'w dadansoddi
  2. Posibilrwydd graddio'r gwasanaeth asesu yn llorweddol - fel y dagfa fwyaf tebygol
  3. Dylid dyrannu'r un faint o adnoddau prosesydd i werthuso pob delwedd er mwyn osgoi allgleifion yn nosbarthiad yr amser ar gyfer casgliad.
  4. (ail)leoli gwasanaethau penodol a'r pentwr yn ei gyfanrwydd yn gyflym
  5. Y gallu, os oes angen, i ddefnyddio gwrthrychau cyffredin mewn gwahanol wasanaethau

pensaernïaeth

Ar ôl dadansoddi'r gofynion, daeth yn amlwg bod y bensaernïaeth microservice yn cyd-fynd bron yn berffaith.

Er mwyn cael gwared ar gur pen diangen, dewiswyd API Telegram fel y blaen.

Yn gyntaf, gadewch i ni edrych ar y diagram strwythurol o'r bensaernïaeth orffenedig, yna symud ymlaen i ddisgrifiad o bob un o'r cydrannau, a hefyd ffurfioli'r broses o brosesu delweddau llwyddiannus.

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Diagram strwythurol o'r bensaernïaeth orffenedig

Gadewch i ni siarad yn fwy manwl am bob un o gydrannau'r diagram, gan eu dynodi Cyfrifoldeb Sengl yn y broses o werthuso delwedd.

Microwasanaeth “attrai-telegram-bot”

Mae'r microwasanaeth hwn yn crynhoi'r holl ryngweithio â'r API Telegram. Mae yna 2 brif senario: gweithio gyda delwedd wedi'i haddasu a gweithio gyda chanlyniad piblinell asesu. Gadewch i ni edrych ar y ddau senario yn gyffredinol.

Wrth dderbyn neges bersonol gyda delwedd:

  1. Mae hidlo'n cael ei berfformio, sy'n cynnwys y gwiriadau canlynol:
    • Argaeledd y maint delwedd gorau posibl
    • Nifer y delweddau defnyddwyr sydd eisoes yn y ciw
  2. Wrth basio'r hidlo cychwynnol, caiff y ddelwedd ei chadw yng nghyfaint y docwr
  3. Cynhyrchir tasg yn y ciw “i_amcangyfrif”, sy'n cynnwys, ymhlith pethau eraill, y llwybr i'r ddelwedd a leolir yn ein cyfrol
  4. Os cwblheir y camau uchod yn llwyddiannus, bydd y defnyddiwr yn derbyn neges gyda'r amser prosesu delwedd bras, a gyfrifir yn seiliedig ar nifer y tasgau yn y ciw. Os bydd gwall, bydd y defnyddiwr yn cael ei hysbysu'n benodol trwy anfon neges gyda gwybodaeth am yr hyn a allai fod wedi mynd o'i le.

Hefyd, mae'r microwasanaeth hwn, fel gweithiwr seleri, yn gwrando ar y ciw “ôl-amcangyfrif”, sydd wedi'i fwriadu ar gyfer tasgau sydd wedi mynd trwy'r biblinell werthuso.

Wrth dderbyn tasg newydd o “after_estimate”:

  1. Os caiff y ddelwedd ei phrosesu'n llwyddiannus, byddwn yn anfon y canlyniad at y defnyddiwr; os na, rydym yn hysbysu am wall.
  2. Cael gwared ar y ddelwedd sy'n ganlyniad y biblinell werthuso

Microwasanaeth gwerthuso “attrai-estimator”

Mae'r microwasanaeth hwn yn weithiwr seleri ac mae'n crynhoi popeth sy'n ymwneud â'r biblinell gwerthuso delwedd. Dim ond un algorithm gweithio sydd yma - gadewch i ni ei ddadansoddi.

Wrth dderbyn tasg newydd o “to_esttimate”:

  1. Gadewch i ni redeg y ddelwedd trwy'r biblinell werthuso:
    1. Llwytho'r ddelwedd i'r cof
    2. Rydyn ni'n dod â'r ddelwedd i'r maint gofynnol
    3. Dod o hyd i bob wyneb (MTCNN)
    4. Rydym yn gwerthuso pob wyneb (rydym yn lapio'r wynebau a ddarganfuwyd yn y cam olaf i mewn i swp ac yn dod i gasgliad ResNet34)
    5. Rendro'r ddelwedd olaf
      1. Gadewch i ni dynnu'r blychau terfyn
      2. Lluniadu'r graddfeydd
  2. Dileu delwedd arferiad (gwreiddiol).
  3. Arbed yr allbwn o'r biblinell werthuso
  4. Rhoesom y dasg yn y ciw “after_estimate”, y gwrandewir arno gan y meicrowasanaeth “attrai-telegram-bot” a drafodwyd uchod.

Llwydlog (+ mongoDB + Elasticsearch)

Llwydlog yn ateb ar gyfer rheoli log canolog. Yn y prosiect hwn, fe'i defnyddiwyd at y diben a fwriadwyd.

Syrthiodd y dewis arno ef, ac nid ar yr un arferol ELK stack, oherwydd hwylustod gweithio gydag ef o Python. Y cyfan sydd angen i chi ei wneud i fewngofnodi i Graylog yw ychwanegu'r GELFTCPHandler o'r pecyn llwydpi i weddill y cofnodwyr gwraidd sy'n trin ein microwasanaeth python.

Fel rhywun a oedd wedi gweithio gyda'r pentwr ELK yn unig o'r blaen, cefais brofiad cadarnhaol cyffredinol wrth weithio gyda Graylog. Yr unig beth sy'n ddigalon yw rhagoriaeth nodweddion Kibana dros ryngwyneb gwe Graylog.

RabbitMQ

RabbitMQ yn frocer negeseuon yn seiliedig ar y protocol AMQP.

Yn y prosiect hwn fe'i defnyddiwyd fel y mwyaf sefydlog a phrawf amser brocer ar gyfer Seleri a gweithiodd mewn modd gwydn.

Redis

Redis yn DBMS NoSQL sy'n gweithio gyda strwythurau data gwerth allweddol

Weithiau mae angen defnyddio gwrthrychau cyffredin sy'n gweithredu strwythurau data penodol mewn gwahanol ficrowasanaethau Python.

Er enghraifft, mae Redis yn storio hashmap o'r ffurflen “telegram_user_id => nifer y tasgau gweithredol yn y ciw,” sy'n eich galluogi i gyfyngu ar nifer y ceisiadau gan un defnyddiwr i werth penodol a, thrwy hynny, atal ymosodiadau DoS.

Gadewch i ni ffurfioli'r broses o brosesu delweddau llwyddiannus

  1. Mae'r defnyddiwr yn anfon delwedd i'r bot Telegram
  2. Mae "attrai-telegram-bot" yn derbyn neges gan API Telegram ac yn ei dosrannu
  3. Mae'r dasg gyda'r ddelwedd yn cael ei hychwanegu at y ciw asyncronaidd "i_amcangyfrif"
  4. Mae'r defnyddiwr yn derbyn neges gyda'r amser asesu arfaethedig
  5. mae “attrai-estimator” yn cymryd tasg o’r ciw “i_amcangyfrif”, yn rhedeg yr amcangyfrifon drwy’r biblinell ac yn cynhyrchu’r dasg i’r ciw “ôl_amcangyfrif”
  6. "attrai-telegram-bot" yn gwrando ar y ciw "after_estimate", yn anfon y canlyniad i'r defnyddiwr

DevOps

Yn olaf, ar ôl adolygu'r bensaernïaeth, gallwch symud ymlaen i'r rhan yr un mor ddiddorol - DevOps

Swarm Dociwr

 

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Swarm Dociwr  - system glystyru, y mae ei swyddogaeth yn cael ei gweithredu y tu mewn i'r Docker Engine ac sydd ar gael allan o'r bocs.

Gan ddefnyddio “haid”, gellir rhannu pob nod yn ein clwstwr yn ddau fath – gweithiwr a rheolwr. Ar beiriannau o'r math cyntaf, mae grwpiau o gynwysyddion (staciau) yn cael eu defnyddio, mae peiriannau o'r ail fath yn gyfrifol am raddio, cydbwyso a nodweddion oer eraill. Mae rheolwyr hefyd yn weithwyr yn ddiofyn.

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Clwstwr gydag un rheolwr arweinydd a thri gweithiwr

Y maint clwstwr lleiaf posibl yw 1 nod; bydd un peiriant yn gweithredu fel rheolwr arweinydd a gweithiwr ar yr un pryd. Yn seiliedig ar faint y prosiect a'r gofynion sylfaenol ar gyfer goddef diffygion, penderfynwyd defnyddio'r dull hwn.

Wrth edrych ymlaen, dywedaf ers cyflwyno’r cynhyrchiad cyntaf, a oedd yng nghanol mis Mehefin, na fu unrhyw broblemau’n gysylltiedig â’r sefydliad clwstwr hwn (ond nid yw hyn yn golygu bod sefydliad o’r fath yn dderbyniol mewn unrhyw ffordd mewn unrhyw fodd canolig-mawr. prosiectau, sy'n destun gofynion goddefgarwch bai).

Stack Docker

Yn y modd heidio, mae'n gyfrifol am ddefnyddio staciau (setiau o wasanaethau docwyr) pentwr docwr

Mae'n cefnogi cyfluniadau cyfansoddi docwr, sy'n eich galluogi i ddefnyddio paramedrau defnyddio hefyd.  

Er enghraifft, gan ddefnyddio'r paramedrau hyn, roedd yr adnoddau ar gyfer pob un o'r achosion microwasanaeth gwerthuso yn gyfyngedig (rydym yn dyrannu creiddiau N ar gyfer achosion N, yn y microwasanaeth ei hun rydym yn cyfyngu nifer y creiddiau a ddefnyddir gan PyTorch i un)

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

Mae’n bwysig nodi bod Redis, RabbitMQ a Graylog yn wasanaethau o bwys ac ni ellir eu graddio mor hawdd ag “attrai-estimator”

Rhagfynegi'r cwestiwn - pam lai Kubernetes?

Mae'n ymddangos bod defnyddio Kubernetes mewn prosiectau bach a chanolig yn orbenion; gellir cael yr holl ymarferoldeb angenrheidiol gan Docker Swarm, sy'n eithaf hawdd ei ddefnyddio ar gyfer cerddorfa cynhwysydd ac sydd hefyd â rhwystr isel i fynediad.

Isadeiledd

Rhoddwyd hyn i gyd ar VDS gyda'r nodweddion canlynol:

  • CPU: 4 craidd Intel® Xeon® Gold 5120 CPU @ 2.20GHz
  • RAM: 8 GB
  • SSD: 160GB

Ar ôl profi llwyth lleol, roedd yn ymddangos y byddai'r peiriant hwn yn ddigon gyda mewnlifiad difrifol o ddefnyddwyr.

Ond, yn syth ar ôl y defnydd, postiais ddolen i un o'r byrddau delwedd mwyaf poblogaidd yn y CIS (yup, yr un un), ac ar ôl hynny daeth pobl i ddiddordeb ac mewn ychydig oriau llwyddodd y gwasanaeth i brosesu degau o filoedd o ddelweddau. Ar yr un pryd, ar adegau brig, ni ddefnyddiwyd adnoddau CPU a RAM hyd yn oed hanner.

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral
Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Mwy o graffeg

Nifer y defnyddwyr unigryw a cheisiadau gwerthuso ers eu defnyddio, yn dibynnu ar y diwrnod

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Gwerthusiad biblinell casgliad amser dosbarthu

Trosolwg cyffredinol o saernïaeth y gwasanaeth ar gyfer asesu ymddangosiad yn seiliedig ar rwydweithiau niwral

Canfyddiadau

I grynhoi, gallaf ddweud bod y bensaernïaeth a'r ymagwedd at offeryniaeth cynwysyddion yn cyfiawnhau eu hunain yn llwyr - hyd yn oed ar yr adegau prysuraf nid oedd unrhyw ddiferion na sagio yn yr amser prosesu. 

Credaf y gall prosiectau bach a chanolig sy'n defnyddio casgliad amser real o rwydweithiau niwral ar y CPU yn eu proses fabwysiadu'r arferion a ddisgrifir yn yr erthygl hon yn llwyddiannus.

Ychwanegaf fod yr erthygl yn hirach i ddechrau, ond er mwyn peidio â phostio darlleniad hir, penderfynais hepgor rhai pwyntiau yn yr erthygl hon - byddwn yn dychwelyd atynt mewn cyhoeddiadau yn y dyfodol.

Gallwch chi brocio'r bot ar Telegram - @AttraiBot, bydd yn gweithio o leiaf tan ddiwedd hydref 2020. Gadewch imi eich atgoffa nad oes unrhyw ddata defnyddiwr yn cael ei storio - nid y delweddau gwreiddiol, na chanlyniadau'r biblinell werthuso - mae popeth yn cael ei ddymchwel ar ôl ei brosesu.

Ffynhonnell: hab.com

Ychwanegu sylw