Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

entry

Hello!

Niini nga artikulo akong ipaambit ang akong kasinatian sa pagtukod og microservice nga arkitektura para sa usa ka proyekto gamit ang mga neural network.

Maghisgot kita bahin sa mga kinahanglanon sa arkitektura, tan-awa ang lainlaing mga diagram sa istruktura, analisa ang matag usa sa mga sangkap sa natapos nga arkitektura, ug susihon usab ang mga teknikal nga sukatan sa solusyon.

Malingaw sa pagbasa!

Pipila ka mga pulong mahitungod sa problema ug sa solusyon niini

Ang nag-unang ideya mao ang pagtimbang-timbang sa pagkamadanihon sa usa ka tawo sa napulo ka punto nga sukdanan base sa usa ka litrato.

Niini nga artikulo magpalayo kami gikan sa paghulagway sa mga neural network nga gigamit ug ang proseso sa pag-andam ug pagbansay sa datos. Bisan pa, sa usa sa mosunod nga mga publikasyon, siguradong mobalik kami sa pag-analisar sa pipeline sa pagtasa sa lawom nga lebel.

Karon moagi kami sa evaluation pipeline sa taas nga lebel, ug mag-focus sa interaksyon sa mga microservice sa konteksto sa kinatibuk-ang arkitektura sa proyekto. 

Kung nagtrabaho sa pipeline sa pagtasa sa pagkamadanihon, ang buluhaton gibahin sa mga musunud nga sangkap:

  1. Pagpili sa mga nawong sa mga litrato
  2. Rating sa matag tawo
  3. Ihatag ang resulta

Ang una masulbad sa mga pwersa sa pre-trained MTCNN. Alang sa ikaduha, usa ka convolutional neural network ang gibansay sa PyTorch, gamit ResNet34 - gikan sa balanse nga "kalidad / katulin sa inference sa CPU"

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Functional nga diagram sa evaluation pipeline

Pag-analisar sa mga kinahanglanon sa arkitektura sa proyekto

Sa siklo sa kinabuhi ML Ang mga yugto sa proyekto sa pagtrabaho sa arkitektura ug pag-automate sa pag-deploy sa modelo kasagaran usa sa labing makagasto sa oras ug makahurot sa kapanguhaan.

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Siklo sa kinabuhi sa usa ka proyekto sa ML

Kini nga proyekto wala’y eksepsiyon - ang desisyon gihimo aron iputos ang pipeline sa pagtasa sa usa ka serbisyo sa online, nga nanginahanglan pagpaunlod sa among kaugalingon sa arkitektura. Ang mosunod nga mga batakang kinahanglanon giila:

  1. Nahiusa nga pagtipig sa troso - ang tanan nga mga serbisyo kinahanglan nga magsulat sa mga troso sa usa ka lugar, kinahanglan nga sayon ​​​​ang pag-analisar
  2. Posibilidad sa pinahigda nga pag-scale sa serbisyo sa pagtasa - ingon nga labing lagmit nga Bottleneck
  3. Ang parehas nga kantidad sa mga kapanguhaan sa processor kinahanglan nga igahin sa pagtimbang-timbang sa matag imahe aron malikayan ang mga outlier sa pag-apod-apod sa oras alang sa inference
  4. Paspas (pag-usab) pag-deploy sa mga piho nga serbisyo ug sa stack sa kinatibuk-an
  5. Ang abilidad, kon gikinahanglan, sa paggamit sa komon nga mga butang sa lain-laing mga serbisyo

arkitektura

Pagkahuman sa pag-analisar sa mga kinahanglanon, nahimo’g klaro nga ang arkitektura sa microservice hapit hingpit.

Aron mawagtang ang wala kinahanglana nga mga labad sa ulo, gipili ang Telegram API isip frontend.

Una, atong tan-awon ang structural diagram sa nahuman nga arkitektura, dayon ipadayon ang usa ka paghulagway sa matag usa sa mga sangkap, ug usab pormal ang proseso sa malampuson nga pagproseso sa imahe.

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Structural diagram sa nahuman nga arkitektura

Atong hisgotan ang mas detalyado bahin sa matag usa sa mga sangkap sa diagram, nga nagpaila kanila nga Usa ka Responsibilidad sa proseso sa pagtimbang-timbang sa imahe.

Microservice "attrai-telegram-bot"

Kini nga microservice naglangkob sa tanan nga mga interaksyon sa Telegram API. Adunay 2 nga nag-unang mga senaryo: pagtrabaho sa usa ka naandan nga imahe ug pagtrabaho sa resulta sa usa ka pipeline sa pagtasa. Atong tan-awon ang duha ka mga senaryo sa kinatibuk-ang termino.

Sa dihang nakadawat ug custom nga mensahe nga adunay hulagway:

  1. Gihimo ang pagsala, nga gilangkuban sa mga musunud nga pagsusi:
    • Anaa sa labing maayo nga gidak-on sa imahe
    • Gidaghanon sa mga hulagway sa tiggamit naa na sa pila
  2. Kung gipasa ang inisyal nga pagsala, ang imahe gitipig sa gidaghanon sa docker
  3. Usa ka buluhaton ang gihimo sa "sa_pagbanabana" nga pila, nga naglakip, taliwala sa ubang mga butang, ang agianan padulong sa imahe nga nahimutang sa among volume
  4. Kung ang mga lakang sa ibabaw malampuson nga nahuman, ang tiggamit makadawat usa ka mensahe nga adunay gibanabana nga oras sa pagproseso sa imahe, nga gikalkula base sa gidaghanon sa mga buluhaton sa pila. Kung adunay usa ka sayup nga mahitabo, ang tiggamit klaro nga ipahibalo pinaagi sa pagpadala sa usa ka mensahe nga adunay kasayuran bahin sa kung unsa ang mahimo’g sayup.

Usab, kini nga microservice, sama sa usa ka celery worker, naminaw sa "human_estimate" nga pila, nga gituyo alang sa mga buluhaton nga miagi sa evaluation pipeline.

Kung nakadawat ug bag-ong buluhaton gikan sa "human_estimate":

  1. Kung malampuson nga naproseso ang imahe, ipadala namon ang resulta sa tiggamit; kung dili, gipahibalo namon ang usa ka sayup.
  2. Pagtangtang sa hulagway nga resulta sa evaluation pipeline

Evaluation microservice "attrai-estimator"

Kini nga microservice usa ka celery worker ug gilakip ang tanan nga may kalabutan sa pipeline sa pagsusi sa imahe. Adunay usa ra nga nagtrabaho nga algorithm dinhi - analisahon naton kini.

Kung nakadawat ug bag-ong buluhaton gikan sa "to_estimate":

  1. Atong daganon ang hulagway pinaagi sa evaluation pipeline:
    1. Pag-load sa imahe sa memorya
    2. Gidala namon ang imahe sa gikinahanglan nga gidak-on
    3. Pagpangita sa tanang nawong (MTCNN)
    4. Among gisusi ang tanang mga nawong (among giputos ang mga nawong nga makita sa katapusang lakang ngadto sa usa ka batch ug inference ResNet34)
    5. Ihatag ang katapusan nga imahe
      1. Atong idrowing ang mga kahon nga nagbugkos
      2. Pag-drawing sa mga rating
  2. Pagtangtang sa usa ka naandan (orihinal) nga imahe
  3. Pagtipig sa output gikan sa evaluation pipeline
  4. Gibutang namon ang buluhaton sa pila nga "pagkahuman_estimate", nga gipamati sa microservice nga "attrai-telegram-bot" nga gihisgutan sa ibabaw.

Graylog (+ mongoDB + Elasticsearch)

graylog usa ka solusyon alang sa sentralisadong pagdumala sa log. Sa kini nga proyekto, gigamit kini alang sa katuyoan niini.

Ang pagpili nahulog kaniya, ug dili sa naandan osa stack, tungod sa kasayon ​​​​sa pagtrabaho uban niini gikan sa Python. Ang kinahanglan nimong buhaton aron maka-log sa Graylog mao ang pagdugang sa GELFTCPHandler gikan sa package graypy sa uban nga mga tigdumala sa root logger sa among microservice sa python.

Ingon usa ka tawo nga kaniadto nagtrabaho lamang sa ELK stack, ako adunay usa ka kinatibuk-ang positibo nga kasinatian samtang nagtrabaho kauban ang Graylog. Ang bugtong butang nga makapaguol mao ang pagkalabaw sa mga bahin sa Kibana sa Graylog web interface.

RabbitMQ

RabbitMQ mao ang usa ka mensahe broker base sa AMQP protocol.

Sa niini nga proyekto kini gigamit ingon nga ang labing lig-on ug gisulayan sa oras broker alang sa Celery ug nagtrabaho sa durable mode.

Redis

Redis mao ang usa ka NoSQL DBMS nga nagtrabaho uban sa yawe-bili data istruktura

Usahay adunay panginahanglan sa paggamit sa komon nga mga butang nga nagpatuman sa pipila ka mga istruktura sa datos sa lain-laing mga Python microservices.

Pananglitan, ang Redis nagtipig sa usa ka hashmap sa porma nga "telegram_user_id => gidaghanon sa mga aktibo nga buluhaton sa pila," nga nagtugot kanimo nga limitahan ang gidaghanon sa mga hangyo gikan sa usa ka tiggamit sa usa ka piho nga kantidad ug, sa ingon, mapugngan ang mga pag-atake sa DoS.

Atong himoong pormal ang proseso sa malampusong pagproseso sa imahe

  1. Ang tiggamit nagpadala usa ka imahe sa Telegram bot
  2. Ang "attrai-telegram-bot" nakadawat ug mensahe gikan sa Telegram API ug gi-parse kini
  3. Ang tahas sa imahe gidugang sa asynchronous nga pila nga "to_estimate"
  4. Ang user makadawat og mensahe nga adunay giplano nga oras sa pagtimbang-timbang
  5. Ang "attrai-estimator" nagkinahanglan og buluhaton gikan sa "to_estimate" nga pila, nagpadagan sa mga banabana pinaagi sa pipeline ug naghimo sa buluhaton ngadto sa "human_estimate" nga pila.
  6. Ang "attrai-telegram-bot" nga naminaw sa "after_estimate" nga pila, nagpadala sa resulta sa tiggamit

DevOps

Sa katapusan, pagkahuman sa pagrepaso sa arkitektura, mahimo ka magpadayon sa parehas nga makapaikag nga bahin - DevOps

Pagdugok sa Docker

 

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Pagdugok sa Docker  - usa ka clustering system, ang pagpaandar niini gipatuman sulod sa Docker Engine ug anaa sa gawas sa kahon.

Gamit ang usa ka "panon", ang tanan nga mga node sa among cluster mahimong bahinon sa 2 nga mga klase - trabahante ug manager. Sa mga makina sa una nga tipo, ang mga grupo sa mga sudlanan (stacks) gipakatap, ang mga makina sa ikaduha nga tipo ang responsable sa pag-scale, pagbalanse ug uban pang mga cool nga bahin. Ang mga manedyer kay mga trabahante usab pinaagi sa default.

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Cluster nga adunay usa ka leader manager ug tulo ka trabahante

Ang labing gamay nga posible nga gidak-on sa cluster mao ang 1 node; ang usa ka makina dungan nga molihok isip usa ka lider nga manedyer ug usa ka trabahante. Base sa gidak-on sa proyekto ug sa minimum nga mga kinahanglanon alang sa fault tolerance, nakahukom nga gamiton kini nga pamaagi.

Sa pagtan-aw sa unahan, isulti ko nga sukad sa una nga paghatud sa produksiyon, nga sa tungatunga sa Hunyo, wala’y mga problema nga may kalabotan sa kini nga cluster nga organisasyon (apan wala kini magpasabut nga ang ingon nga organisasyon sa bisan unsang paagi madawat sa bisan unsang medium-dako. mga proyekto, nga gipailalom sa mga kinahanglanon sa pagtugot sa sayup).

Docker Stack

Sa swarm mode, siya ang responsable sa pag-deploy sa mga stack (mga set sa mga serbisyo sa docker) docker stack

Gisuportahan niini ang mga docker-compose configs, nga nagtugot kanimo sa dugang nga paggamit sa mga kapilian sa pag-deploy.  

Pananglitan, gamit kini nga mga parameter, ang mga kapanguhaan alang sa matag usa sa mga evaluation microservice nga mga higayon limitado (atong gigahin ang N nga mga cores alang sa N nga mga higayon, sa microservice mismo atong gilimitahan ang gidaghanon sa mga core nga gigamit sa PyTorch ngadto sa usa)

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

Mahinungdanon nga timan-an nga ang Redis, RabbitMQ ug Graylog mga stateful nga serbisyo ug dili kini masukod sa kadali sama sa "attrai-estimator"

Paglandong sa pangutana - nganong dili Kubernetes?

Ingon og ang paggamit sa Kubernetes sa gagmay ug medium-kadako nga mga proyekto usa ka overhead; ang tanan nga kinahanglan nga pag-andar mahimong makuha gikan sa Docker Swarm, nga medyo user-friendly alang sa usa ka container orchestrator ug adunay gamay nga babag sa pagsulod.

Infrastructure

Kining tanan gipakatap sa VDS nga adunay mga mosunod nga mga kinaiya:

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

Pagkahuman sa pagsulay sa lokal nga pagkarga, ingon og sa grabe nga pagdagsang sa mga tiggamit, kini nga makina igo na.

Apan, pagkahuman dayon sa pag-deploy, nag-post ako usa ka link sa usa sa labing inila nga mga imageboard sa CIS (yup, parehas nga usa), pagkahuman ang mga tawo nahimong interesado ug sa pila ka oras ang serbisyo malampuson nga nagproseso sa libu-libong mga imahe. Sa samang higayon, sa peak moments, CPU ug RAM resources wala gani katunga gigamit.

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network
Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Pipila pa nga mga graphic

Gidaghanon sa talagsaon nga mga tiggamit ug mga hangyo sa pagtimbang-timbang sukad sa pag-deploy, depende sa adlaw

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

Pag-evaluate sa pipeline inference time distribution

Kinatibuk-ang pagtan-aw sa arkitektura sa serbisyo alang sa pagtan-aw sa hitsura base sa mga neural network

kaplag

Sa pag-summarize, makaingon ako nga ang arkitektura ug pamaagi sa pag-orkestra sa mga sudlanan hingpit nga gipakamatarung ang ilang kaugalingon - bisan sa mga peak nga mga gutlo wala’y mga pagtulo o pagkalugway sa oras sa pagproseso. 

Sa akong hunahuna nga ang gagmay ug medium-kadako nga mga proyekto nga naggamit sa real-time nga inference sa mga neural network sa CPU sa ilang proseso mahimong malampuson nga mosagop sa mga gawi nga gihulagway sa kini nga artikulo.

Idugang nako nga sa sinugdan ang artikulo mas taas, apan aron dili ma-post ang usa ka taas nga pagbasa, nakahukom ako nga laktawan ang pipila ka mga punto sa kini nga artikulo - mobalik kami kanila sa umaabot nga mga publikasyon.

Mahimo nimong i-pondo ang bot sa Telegram - @AttraiBot, molihok kini bisan hangtod sa katapusan sa tingdagdag 2020. Tugoti ako nga pahinumdoman ka nga walay datos sa tiggamit ang gitipigan - ni ang orihinal nga mga hulagway, ni ang mga resulta sa evaluation pipeline - ang tanan giguba human sa pagproseso.

Source: www.habr.com

Idugang sa usa ka comment