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:
- Dewis wynebau mewn lluniau
- Sgôr pob person
- Rendro'r canlyniad
Mae'r cyntaf yn cael ei ddatrys gan rymoedd hyfforddedig ymlaen llaw
Diagram swyddogaethol o'r biblinell werthuso
Dadansoddiad o ofynion pensaernïaeth prosiect
Yn y cylch bywyd
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:
- Storfa boncyffion unedig - dylai pob gwasanaeth ysgrifennu logiau mewn un lle, dylent fod yn gyfleus i'w dadansoddi
- Posibilrwydd graddio'r gwasanaeth asesu yn llorweddol - fel y dagfa fwyaf tebygol
- Dylid dyrannu'r un faint o adnoddau prosesydd i werthuso pob delwedd er mwyn osgoi allgleifion yn nosbarthiad yr amser ar gyfer casgliad.
- (ail)leoli gwasanaethau penodol a'r pentwr yn ei gyfanrwydd yn gyflym
- 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.
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:
- 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
- Wrth basio'r hidlo cychwynnol, caiff y ddelwedd ei chadw yng nghyfaint y docwr
- Cynhyrchir tasg yn y ciw “i_amcangyfrif”, sy'n cynnwys, ymhlith pethau eraill, y llwybr i'r ddelwedd a leolir yn ein cyfrol
- 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”:
- Os caiff y ddelwedd ei phrosesu'n llwyddiannus, byddwn yn anfon y canlyniad at y defnyddiwr; os na, rydym yn hysbysu am wall.
- 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”:
- Gadewch i ni redeg y ddelwedd trwy'r biblinell werthuso:
- Llwytho'r ddelwedd i'r cof
- Rydyn ni'n dod â'r ddelwedd i'r maint gofynnol
- Dod o hyd i bob wyneb (MTCNN)
- 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)
- Rendro'r ddelwedd olaf
- Gadewch i ni dynnu'r blychau terfyn
- Lluniadu'r graddfeydd
- Dileu delwedd arferiad (gwreiddiol).
- Arbed yr allbwn o'r biblinell werthuso
- Rhoesom y dasg yn y ciw “after_estimate”, y gwrandewir arno gan y meicrowasanaeth “attrai-telegram-bot” a drafodwyd uchod.
Llwydlog (+ mongoDB + Elasticsearch)
Syrthiodd y dewis arno ef, ac nid ar yr un arferol
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
Yn y prosiect hwn fe'i defnyddiwyd fel
Redis
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
- Mae'r defnyddiwr yn anfon delwedd i'r bot Telegram
- Mae "attrai-telegram-bot" yn derbyn neges gan API Telegram ac yn ei dosrannu
- Mae'r dasg gyda'r ddelwedd yn cael ei hychwanegu at y ciw asyncronaidd "i_amcangyfrif"
- Mae'r defnyddiwr yn derbyn neges gyda'r amser asesu arfaethedig
- 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”
- "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
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
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)
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.
Mwy o graffeg
Nifer y defnyddwyr unigryw a cheisiadau gwerthuso ers eu defnyddio, yn dibynnu ar y diwrnod
Gwerthusiad biblinell casgliad amser dosbarthu
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