Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Sarrera

Hi!

Artikulu honetan sare neuronalak erabiliz proiektu baterako mikrozerbitzuen arkitektura eraikitzeko esperientzia partekatuko dut.

Hitz egin diezaiogun arkitektura-baldintzei buruz, azter ditzagun egitura-diagrama desberdinak, aztertu amaitutako arkitekturaren osagai bakoitza eta, gainera, ebaluatu ditzagun irtenbidearen metrika teknikoak.

Gozatu irakurketa!

Arazoari eta bere konponbideari buruzko hitz batzuk

Ideia nagusia pertsona baten erakargarritasuna argazki batean oinarrituta hamar puntuko eskalan ebaluatzea da.

Artikulu honetan erabilitako sare neuronalak zein datuak prestatzeko eta entrenatzeko prozesua deskribatzetik aldenduko gara. Dena den, hurrengo argitalpenetako batean, behin betiko itzuliko gara ebaluazioaren kanalizazioa maila sakonean aztertzera.

Orain maila goreneko ebaluazio-bidetik pasatuko gara, eta proiektuaren arkitektura orokorraren testuinguruan mikrozerbitzuen elkarrekintzan zentratuko gara. 

Erakargarritasuna ebaluatzeko kanalizazioa lantzean, zeregina osagai hauetan deskonposatu zen:

  1. Argazkietan aurpegiak hautatzea
  2. Pertsona bakoitzaren balorazioa
  3. Errendatu emaitza

Lehenengoa aurrez prestatutako indarrek konpontzen dute MTCNN. Bigarrenerako, sare neuronal konboluzional bat landu zen PyTorch-en, erabiliz ResNet34 - "PUZaren inferentziaren kalitatea / abiadura" balantzetik

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Ebaluazio kanalaren diagrama funtzionala

Proiektuen arkitektura-eskakizunen analisia

Bizi-zikloan ML Ereduen hedapenaren arkitekturari eta automatizazioari buruzko proiektuen lan-faseak sarritan denbora eta baliabide gehien kontsumitzen dituztenen artean daude.

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

ML proiektu baten bizi-zikloa

Proiektu hau ez da salbuespena: ebaluazio kanala lineako zerbitzu batean biltzea erabaki zen, eta horrek arkitekturan murgiltzea eskatzen zuen. Oinarrizko betekizun hauek zehaztu ziren:

  1. Erregistroen biltegiratze bateratua: zerbitzu guztiek erregistroak leku bakarrean idatzi behar dituzte, aztertzeko erosoak izan behar dute
  2. Ebaluazio-zerbitzuaren eskala horizontala egiteko aukera - Botilen leporik litekeena da
  3. Irudi bakoitza ebaluatzeko prozesadore-baliabide kopuru bera esleitu behar da, ondorioztatzeko denboraren banaketan kanpo-egoerak saihesteko.
  4. Zerbitzu espezifikoen eta pila osoaren (berre)zabaltzea azkarra
  5. Zerbitzu ezberdinetan ohiko objektuak erabiltzeko gaitasuna, beharrezkoa bada

arkitektura

Eskakizunak aztertu ondoren, begi-bistakoa zen mikrozerbitzuen arkitektura ia ezin hobeto egokitzen dela.

Alferrikako buruko minak kentzeko, Telegram APIa aukeratu zen frontend gisa.

Lehenik eta behin, ikus dezagun amaitutako arkitekturaren egitura-diagrama, ondoren osagai bakoitzaren deskribapenera pasatzeko eta irudien prozesamendu arrakastatsuaren prozesua ere formalizatu.

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Amaitutako arkitekturaren egitura-diagrama

Hitz egin dezagun zehatzago diagramaren osagai bakoitzari buruz, irudien ebaluazio prozesuan Erantzukizun Bakarra adieraziz.

Mikrozerbitzua "attrai-telegram-bot"

Mikrozerbitzu honek Telegram APIarekin interakzio guztiak biltzen ditu. 2 eszenatoki nagusi daude: pertsonalizatutako irudi batekin lan egitea eta ebaluazio kanal baten emaitzarekin lan egitea. Ikus ditzagun bi eszenatokiak termino orokorrean.

Irudi batekin mezu pertsonalizatu bat jasotzean:

  1. Iragazkia egiten da, honako egiaztapen hauek osatuta:
    • Irudiaren tamaina optimoaren erabilgarritasuna
    • Dagoeneko ilaran dauden erabiltzaileen irudi kopurua
  2. Hasierako iragazkia pasatzean, irudia docker bolumenean gordetzen da
  3. Zeregin bat sortzen da "to_estimate" ilaran, besteak beste, gure bolumenean kokatutako irudirako bidea barne hartzen duena.
  4. Aurreko urratsak behar bezala betetzen badira, erabiltzaileak mezu bat jasoko du irudiak prozesatzeko gutxi gorabeherako denborarekin, eta ilaran dauden ataza kopuruaren arabera kalkulatzen da. Erroreren bat gertatzen bada, erabiltzaileari berariaz jakinaraziko zaio oker egon zitekeenari buruzko informazioarekin mezu bat bidaliz.

Gainera, mikrozerbitzu honek, apio-langile batek bezala, "ater_estimate" ilara entzuten du, hau da, ebaluazio kanaletik igaro diren zereginetarako pentsatua.

"after_estimate"-ren zeregin berri bat jasotzen duzunean:

  1. Irudia behar bezala prozesatzen bada, emaitza bidaliko diogu erabiltzaileari; hala ez bada, errore baten berri emango diogu.
  2. Ebaluazio kanalizazioaren emaitza den irudia kentzea

Ebaluazio mikrozerbitzua "attrai-estimator"

Mikrozerbitzu hau apioaren langilea da eta irudiak ebaluatzeko kanalizazioarekin lotutako guztia biltzen du. Hemen funtzionatzen duen algoritmo bakarra dago: azter dezagun.

"to_estimate"-ren zeregin berri bat jasotzen duzunean:

  1. Exekutatu dezagun irudia ebaluazio kanalaren bidez:
    1. Irudia memorian kargatzea
    2. Irudia behar den neurrira eramaten dugu
    3. Aurpegi guztiak aurkitzea (MTCNN)
    4. Aurpegi guztiak ebaluatzen ditugu (azken urratsean aurkitutako aurpegiak lote batean biltzen ditugu eta ResNet34 inferentzia egiten dugu)
    5. Errendatu azken irudia
      1. Marraz ditzagun muga-koadroak
      2. Balorazioak marraztea
  2. Irudi pertsonalizatua (jatorrizkoa) ezabatzea
  3. Ebaluazio kanaletik ateratakoa gordetzea
  4. Zeregin hori "after_estimate" ilaran jartzen dugu, goian aipatu dugun "attrai-telegram-bot" mikrozerbitzuak entzuten duena.

Graylog (+ mongoDB + Elasticsearch)

greylog Erregistroen kudeaketa zentralizaturako irtenbide bat da. Proiektu honetan, bere xederako erabili zen.

Haren gain hartu zuen aukera, eta ez ohikoaren gain ELK pila, Python-etik lan egiteko erosotasuna dela eta. Graylog-en saioa hasteko egin behar duzun guztia paketetik GELFTCPHandler gehitzea da grisa Gure python mikrozerbitzuaren root logger kudeatzaileei.

Aurretik ELK pilarekin bakarrik lan egin zuen norbait bezala, esperientzia positiboa izan nuen Graylog-ekin lan egiten nuen bitartean. Etsigarria den gauza bakarra Kibana ezaugarriek Graylog web-interfazearen gainean duten nagusitasuna da.

RabbitMQ

RabbitMQ AMQP protokoloan oinarritutako mezu-artekaria da.

Proiektu honetan gisa erabili zen egonkorrena eta denbora probatua Apioaren artekaria eta modu iraunkorrean lan egin zuen.

Birbanaketa

Birbanaketa gako-balioen datu-egiturekin lan egiten duen NoSQL DBMS bat da

Batzuetan, Python mikrozerbitzu desberdinetan datu-egitura batzuk ezartzen dituzten objektu komunak erabili beharra dago.

Esaterako, Redis-ek "telegram_user_id => ilaran dauden zeregin aktibo kopurua" formako hashmap gordetzen du, eta horri esker, erabiltzaile baten eskaera kopurua balio jakin batera muga dezakezu eta, ondorioz, DoS erasoak ekiditeko.

Formaliza dezagun irudien prozesamendu arrakastatsuaren prozesua

  1. Erabiltzaileak irudi bat bidaltzen du Telegram bot-era
  2. "attrai-telegram-bot"-ek Telegram APItik mezu bat jasotzen du eta analizatzen du
  3. Irudia duen zeregina "to_estimate" ilara asinkronoan gehitzen da
  4. Erabiltzaileak mezu bat jasotzen du aurreikusitako ebaluazio-denborarekin
  5. "attrai-estimator"-ek zeregin bat hartzen du "to_estimate" ilaratik, estimazioak kanalizaziotik exekutatzen ditu eta zeregina "after_estimate" ilaran sortzen du.
  6. "attrai-telegram-bot" "after_estimate" ilara entzuten, emaitza bidaltzen dio erabiltzaileari

DevOps

Azkenik, arkitektura berrikusi ondoren, zati berdin interesgarrira pasa zaitezke - DevOps

Docker swarm

 

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Docker swarm  — Clustering-sistema bat, zeinaren funtzionaltasuna Docker Engine-ren barruan inplementatuta dagoena eta eskuragarri dagoena.

"Swarm" bat erabiliz, gure klusterreko nodo guztiak 2 motatan bana daitezke: langilea eta kudeatzailea. Lehenengo motako makinetan, ontzi-taldeak (pilak) zabaltzen dira, bigarren motako makinak eskalatzeaz, orekatzeaz eta arduratzen dira. beste ezaugarri politak. Zuzendariak ere langileak dira berez.

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Kudeatzaile lider bat eta hiru langile dituen klusterra

Klusterren tamaina posible minimoa nodo 1 da; makina bakar batek lider-kudeatzaile eta langile gisa jardungo du aldi berean. Proiektuaren tamainaren eta akatsen tolerantziarako gutxieneko eskakizunen arabera, ikuspegi hori erabiltzea erabaki zen.

Aurrera begira, esango dut lehenengo produkzio-entregatik, hau da, ekainaren erdialdera, ez dela arazorik egon kluster-erakunde honekin (baina horrek ez du esan nahi erakunde hori inola ere onargarria denik edozein ertain-handitan). proiektuak, akatsen tolerantzia-baldintzen menpe daudenak).

Docker pila

Swarm moduan, pilak (docker zerbitzuen multzoak) zabaltzeaz arduratzen da. docker pila

Docker-compose konfigurazioak onartzen ditu, inplementatzeko aukerak gehitzeko aukera emanez.  

Adibidez, parametro hauek erabiliz, ebaluazioko mikrozerbitzuen instantzia bakoitzeko baliabideak mugatuak ziren (N nukleo esleitzen ditugu N instantziarako, mikrozerbitzuan bertan PyTorch-ek erabiltzen dituen nukleo kopurua batera mugatzen dugu)

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

Garrantzitsua da Redis, RabbitMQ eta Graylog egoera-zerbitzuak direla eta ezin direla "attrai-estimator" bezain erraz eskalatu

Galdera iragarriz - zergatik ez Kubernetes?

Badirudi Kubernetes proiektu txiki eta ertainetan erabiltzea gainkostua dela; Docker Swarm-en beharrezko funtzionaltasun guztiak lor daitezke, edukiontzi-orkestratzaile batentzat nahiko erabilerraza dena eta sarrerarako oztopo txikia duena.

Azpiegitura

Hori guztia VDSn zabaldu zen ezaugarri hauekin:

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

Tokiko karga probaren ondoren, bazirudien erabiltzaileen ugaritasun larri batekin, makina hau nahikoa izango zela.

Baina, zabaldu eta berehala, CISeko irudi-taula ezagunenetako batera esteka bat argitaratu nuen (bai, hori bera), eta ondoren jendea interesatu zen eta ordu gutxitan zerbitzuak hamarka mila irudi arrakastaz prozesatu zituen. Aldi berean, momentu gorenetan, CPU eta RAM baliabideak ez ziren erdira erabiltzen.

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra
Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Grafiko batzuk gehiago

Erabiltzaile bakarrak eta ebaluazio-eskaerak zabaldu zirenetik, egunaren arabera

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Ebaluazio kanalizazioaren inferentzia denbora banaketa

Sare neuronaletan oinarritutako itxura ebaluatzeko zerbitzu-arkitekturaren ikuspegi orokorra

Findings

Laburbilduz, esan dezaket edukiontzien orkestrazioaren arkitekturak eta ikuspegiak guztiz justifikatzen zutela - momentu gorenetan ere ez zegoen prozesatzeko denboran jaitsierarik edo ahultzerik. 

Uste dut beren prozesuan CPUan sare neuronalen denbora errealean inferentzia erabiltzen duten proiektu txiki eta ertainek arrakastaz har ditzaketela artikulu honetan deskribatutako praktikak.

Hasieran artikulua luzeagoa zela gehituko dut, baina irakurketa luzerik ez argitaratzeko, artikulu honetan puntu batzuk baztertzea erabaki nuen; horietara itzuliko gara hurrengo argitalpenetan.

Bota Telegramen sartu dezakezu - @AttraiBot, gutxienez 2020ko udazken amaierara arte funtzionatuko du. Gogorarazten dizut ez dela erabiltzailearen daturik gordetzen -ez jatorrizko irudiak, ezta ebaluazio-hodiaren emaitzak ere- dena eraisten dela prozesatu ondoren.

Iturria: www.habr.com

Gehitu iruzkin berria