Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

nkag

Nyob zoo!

Hauv tsab xov xwm no kuv yuav qhia kuv qhov kev paub ntawm kev tsim lub microservice architecture rau ib qhov project siv neural networks.

Cia peb tham txog cov kev xav tau ntawm architecture, saib ntau yam duab kos duab, txheeb xyuas txhua yam ntawm cov khoom tiav, thiab tseem ntsuas cov kev ntsuas kev daws teeb meem.

Txaus siab nyeem!

Ob peb lo lus hais txog qhov teeb meem thiab nws txoj kev daws teeb meem

Lub tswv yim tseem ceeb yog ntsuas tus neeg qhov kev nyiam ntawm kaum-point ntsuas raws li daim duab.

Hauv tsab xov xwm no peb yuav txav deb ntawm kev piav qhia ob qho tib si neural networks siv thiab cov txheej txheem ntawm kev npaj cov ntaub ntawv thiab kev cob qhia. Txawm li cas los xij, hauv ib qho ntawm cov ntawv tshaj tawm hauv qab no, peb yuav twv yuav raug hu rov qab mus rau kev tshuaj xyuas cov kav dej ntsuas ntsuas ntawm qhov tob tob.

Tam sim no peb yuav mus dhau qhov kev ntsuam xyuas cov kav dej nyob rau theem sab saum toj, thiab yuav tsom mus rau kev sib cuam tshuam ntawm microservices hauv cov ntsiab lus ntawm tag nrho qhov project architecture. 

Thaum ua haujlwm ntawm cov kav dej ntsuas kev ntxim nyiam, kev ua haujlwm tau decomposed rau hauv cov khoom hauv qab no:

  1. Xaiv lub ntsej muag hauv cov duab
  2. Kev ntsuas ntawm txhua tus neeg
  3. Render qhov tshwm sim

Thawj yog daws los ntawm cov rog ntawm kev cob qhia ua ntej MTCNN. Rau qhov thib ob, kev sib txuas lus neural network tau kawm ntawm PyTorch, siv ResNet 34 - los ntawm qhov sib npaug "zoo / nrawm ntawm kev xav ntawm CPU"

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Daim duab ua haujlwm ntawm cov kav dej ntsuas ntsuas

Kev tsom xam ntawm qhov project architecture xav tau

Nyob rau hauv lub neej voj voog ML qhov project theem ntawm kev ua haujlwm ntawm architecture thiab automation ntawm cov qauv xa tawm feem ntau yog cov sij hawm siv ntau tshaj plaws thiab siv cov peev txheej.

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Lub neej voj voog ntawm ib qhov project ML

Qhov project no tsis muaj qhov tshwj xeeb - qhov kev txiav txim siab tau txiav txim siab los qhwv cov raj xa dej ntsuam xyuas rau hauv qhov kev pabcuam online, uas yuav tsum tau raus peb tus kheej hauv kev tsim qauv. Cov kev cai hauv qab no tau txheeb xyuas:

  1. Unified cav cia - tag nrho cov kev pab cuam yuav tsum sau cav nyob rau hauv ib qho chaw, lawv yuav tsum yooj yim los soj ntsuam
  2. Muaj peev xwm ntawm kab rov tav scaling ntawm qhov kev ntsuam xyuas kev pab cuam - raws li feem ntau yuav Bottleneck
  3. Tib tus nqi ntawm cov khoom siv processor yuav tsum tau muab faib los ntsuas txhua daim duab txhawm rau kom tsis txhob muaj qhov tsis sib xws hauv kev faib sijhawm rau kev xav.
  4. Fast (re) xa tawm ntawm ob qho kev pabcuam tshwj xeeb thiab cov pawg tag nrho
  5. Lub peev xwm, yog tias tsim nyog, siv cov khoom sib txawv hauv cov kev pabcuam sib txawv

architecture

Tom qab tshuaj xyuas cov cai, nws tau pom tseeb tias microservice architecture haum yuav luag zoo kawg nkaus.

Txhawm rau kom tshem tawm qhov mob taub hau tsis tsim nyog, Telegram API tau raug xaiv los ua tus thawj coj.

Ua ntej, cia peb saib cov duab kos duab ntawm cov qauv ua tiav, tom qab ntawd txav mus rau qhov kev piav qhia ntawm txhua yam ntawm cov khoom, thiab tseem ua kom tiav cov txheej txheem ntawm kev ua tiav cov duab.

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Daim duab kos duab ntawm lub tiav lawm architecture

Cia peb tham kom ntxaws ntxiv txog txhua yam ntawm daim duab kos duab, qhia lawv Ib Leeg Lub Luag Haujlwm hauv cov txheej txheem ntawm kev ntsuas duab.

Microservice "attrai-telegram-bot"

Qhov microservice no encapsulates tag nrho cov kev cuam tshuam nrog Telegram API. Muaj 2 qhov xwm txheej tseem ceeb: ua haujlwm nrog cov duab kev cai thiab ua haujlwm nrog cov txiaj ntsig ntawm kev ntsuas cov kav dej. Cia saib ob qho xwm txheej hauv cov ntsiab lus dav dav.

Thaum tau txais cov lus kev cai nrog ib daim duab:

  1. Kev lim dej tau ua, suav nrog cov kev kuaj hauv qab no:
    • Muaj cov duab zoo tshaj plaws
    • Tus naj npawb ntawm cov neeg siv dluab twb nyob rau hauv queue
  2. Thaum dhau qhov kev lim dej thawj zaug, cov duab tau txais kev cawmdim hauv qhov ntim docker
  3. Ib txoj haujlwm yog tsim nyob rau hauv "to_estimate" kab, uas suav nrog, ntawm lwm yam, txoj hauv kev rau cov duab nyob hauv peb lub ntim
  4. Yog tias cov kauj ruam saum toj no ua tiav tiav, tus neeg siv yuav tau txais cov lus nrog lub sijhawm ua haujlwm ntawm cov duab kwv yees, uas yog xam raws li cov haujlwm hauv cov kab. Yog tias muaj teeb meem tshwm sim, tus neeg siv yuav raug ceeb toom meej los ntawm kev xa cov lus nrog cov ntaub ntawv hais txog dab tsi yuav ploj mus.

Tsis tas li, qhov kev pabcuam micro no, zoo li tus neeg ua haujlwm celery, mloog cov kab "tom qab_estimate", uas yog npaj rau cov haujlwm uas tau dhau los ntawm kev ntsuas cov kav dej.

Thaum tau txais txoj haujlwm tshiab los ntawm "after_estimate":

  1. Yog tias daim duab ua tiav tiav, peb xa cov txiaj ntsig mus rau tus neeg siv; yog tias tsis yog, peb ceeb toom txog qhov yuam kev.
  2. Tshem tawm cov duab uas yog qhov tshwm sim ntawm kev ntsuas cov kav dej

Kev ntsuam xyuas microservice "attrai-estimator"

Qhov kev pabcuam microservice no yog tus neeg ua haujlwm celery thiab encapsulates txhua yam ntsig txog cov duab ntsuas cov kav dej. Muaj tsuas yog ib qho kev ua haujlwm algorithm ntawm no - cia peb txheeb xyuas nws.

Thaum tau txais txoj haujlwm tshiab los ntawm "to_estimate":

  1. Cia peb khiav daim duab los ntawm qhov kev ntsuam xyuas pipeline:
    1. Loading cov duab rau hauv nco
    2. Peb nqa daim duab mus rau qhov loj me
    3. Nrhiav txhua lub ntsej muag (MTCNN)
    4. Peb ntsuas txhua lub ntsej muag (peb qhwv lub ntsej muag pom nyob rau hauv cov kauj ruam kawg rau hauv ib pawg thiab inference ResNet34)
    5. Render daim duab kawg
      1. Cia peb kos lub thawv khi
      2. Kos qhov kev ntaus nqi
  2. Rho tawm ib qho kev cai (original) duab
  3. Txuag cov zis los ntawm cov kav dej ntsuas ntsuas
  4. Peb muab txoj haujlwm tso rau hauv "tom qab_estimate" kab, uas tau mloog los ntawm "attrai-telegram-bot" microservice tau tham saum toj no.

Greylog (+ mongoDB + Elasticsearch)

Nkaujnooghawj yog ib qho kev daws teeb meem rau kev tswj xyuas qhov nruab nrab. Hauv qhov project no, nws tau siv rau nws lub hom phiaj.

Qhov kev xaiv poob rau nws, thiab tsis yog nyob rau ib txwm ib txwm ELK pawg, vim qhov yooj yim ntawm kev ua haujlwm nrog nws los ntawm Python. Txhua yam koj yuav tsum tau ua kom nkag mus rau Graylog yog ntxiv GELFTCPHandler los ntawm pob greypy rau tus so ntawm lub hauv paus logger handlers ntawm peb cov python microservice.

Raws li ib tug neeg uas yav dhau los tsuas yog ua haujlwm nrog ELK pawg, kuv muaj kev paub zoo tag nrho thaum ua haujlwm nrog Graylog. Qhov tsuas yog qhov nyuaj siab yog qhov superiority hauv Kibana nta dhau ntawm Graylog web interface.

RabbitMQ

RabbitMQ yog tus xa xov tooj raws li AMQP raws tu qauv.

Hauv qhov project no nws tau siv los ua qhov ruaj khov tshaj plaws thiab lub sijhawm kuaj broker rau Celery thiab ua haujlwm nyob rau hauv hom ruaj khov.

Redis

Redis yog NoSQL DBMS uas ua haujlwm nrog cov ntaub ntawv tseem ceeb

Qee lub sij hawm yuav tsum tau siv cov khoom siv uas siv qee cov ntaub ntawv qauv hauv Python microservices sib txawv.

Piv txwv li, Redis khaws cov hashmap ntawm daim ntawv "telegram_user_id => tus naj npawb ntawm cov haujlwm ua haujlwm hauv kab," uas tso cai rau koj txwv tus naj npawb ntawm kev thov los ntawm ib tus neeg siv rau qee tus nqi thiab, yog li, tiv thaiv DoS tawm tsam.

Cia tus txheej txheem ntawm kev ua tiav cov duab ua tiav

  1. Tus neeg siv xa duab mus rau Telegram bot
  2. "attrai-telegram-bot" tau txais cov lus los ntawm Telegram API thiab ntsuas nws
  3. Cov hauj lwm nrog cov duab yog ntxiv rau asynchronous queue "to_estimate"
  4. Tus neeg siv tau txais cov lus nrog lub sijhawm ntsuas ntsuas
  5. "attrai-estimator" siv lub luag haujlwm los ntawm "to_estimate" kab, sau cov kwv yees los ntawm cov raj xa dej thiab tsim cov haujlwm rau hauv kab "tom qab_estimate"
  6. "attrai-telegram-bot" mloog rau "after_estimate" kab, xa cov txiaj ntsig rau tus neeg siv

DevOps

Thaum kawg, tom qab tshuaj xyuas cov architecture, koj tuaj yeem txav mus rau qhov sib npaug txaus nyiam - DevOps

Docker swb

 

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Docker swb  - ib qho kev sib koom ua ke, kev ua haujlwm uas tau siv hauv Docker Cav thiab muaj nyob hauv lub thawv.

Siv "swarm", tag nrho cov nodes hauv peb pawg tuaj yeem muab faib ua 2 hom - tus neeg ua haujlwm thiab tus thawj coj. Ntawm cov tshuab ntawm thawj hom, pab pawg ntim khoom (stacks) raug xa mus, cov tshuab ntawm hom thib ob yog lub luag haujlwm rau kev ntsuas, ntsuas thiab lwm yam txias nta. Cov thawj coj kuj yog cov neeg ua haujlwm los ntawm lub neej ntawd.

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Pawg nrog ib tus thawj coj saib xyuas thiab peb tus neeg ua haujlwm

Qhov tsawg kawg nkaus tau pawg loj yog 1 node; ib lub tshuab ib txhij yuav ua tus thawj coj saib xyuas thiab tus neeg ua haujlwm. Raws li qhov loj ntawm qhov project thiab qhov tsawg kawg nkaus yuav tsum tau ua txhaum cai, nws tau txiav txim siab los siv txoj hauv kev no.

Saib ua ntej, kuv yuav hais tias txij li thawj cov khoom xa tuaj, uas yog nyob rau hauv nruab nrab Lub Rau Hli, tsis muaj teeb meem cuam tshuam nrog lub koom haum pawg no (tab sis qhov no tsis tau txhais hais tias lub koom haum zoo li no yog nyob rau hauv txhua txoj kev tau txais nyob rau hauv nruab nrab-loj loj. tej yaam num, uas yuav tsum tau ua txhaum cai).

Docker Stack

Hauv hom swarm, nws yog lub luag haujlwm rau kev xa cov pawg (cov kev pabcuam docker) docker pawg

Nws txhawb nqa docker-compose configs, tso cai rau koj ntxiv rau kev siv cov kev txwv.  

Piv txwv li, siv cov kev txwv no, cov peev txheej rau txhua qhov kev ntsuam xyuas microservice piv txwv tau txwv (peb faib N cores rau N piv txwv, hauv microservice nws tus kheej peb txwv tus naj npawb ntawm cov cores siv los ntawm PyTorch rau ib qho)

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

Nws yog ib qho tseem ceeb kom nco ntsoov tias Redis, RabbitMQ thiab Graylog yog cov kev pabcuam tseem ceeb thiab lawv tsis tuaj yeem ntsuas tau yooj yim li "attrai-estimator"

Foreshadowing cov lus nug - yog vim li cas tsis Kubernetes?

Nws zoo nkaus li tias kev siv Kubernetes hauv cov haujlwm me me thiab nruab nrab yog qhov nyiaj siv ua haujlwm; tag nrho cov haujlwm tsim nyog tuaj yeem tau txais los ntawm Docker Swarm, uas yog tus neeg siv zoo heev rau lub thawv orchestrator thiab tseem muaj qhov cuam tshuam tsawg rau kev nkag.

Infrastructure

Tag nrho cov no tau xa mus rau VDS nrog cov yam ntxwv hauv qab no:

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

Tom qab kuaj xyuas hauv zos, nws zoo li tias nrog cov neeg siv loj heev, lub tshuab no yuav txaus.

Tab sis, tam sim ntawd tom qab kev xa tawm, kuv tau tshaj tawm qhov txuas mus rau ib qho ntawm cov duab nrov tshaj plaws hauv CIS (yup, tib yam), tom qab uas tib neeg tau nyiam thiab ob peb teev cov kev pabcuam tau ua tiav ntau txhiab tus duab. Tib lub sijhawm, thaum lub sijhawm ncov, CPU thiab RAM cov peev txheej tseem tsis tau siv ib nrab.

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks
Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Ib co duab ntxiv

Tus naj npawb ntawm cov neeg siv tshwj xeeb thiab kev ntsuam xyuas thov txij li kev xa tawm, nyob ntawm hnub

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

Kev ntsuam xyuas pipeline inference lub sij hawm faib

Cov txheej txheem dav dav ntawm kev pabcuam architecture rau kev ntsuam xyuas pom raws li cov neural networks

tshawb pom

Txhawm rau kom ua tiav, Kuv tuaj yeem hais tias kev tsim vaj tsev thiab txoj hauv kev mus rau orchestration ntawm cov ntim tau ua tiav rau lawv tus kheej - txawm tias nyob rau lub sijhawm ncov tsis muaj te lossis sagging hauv lub sijhawm ua haujlwm. 

Kuv xav tias cov phiaj xwm me me thiab nruab nrab uas siv cov kev xav hauv lub sijhawm ntawm neural networks ntawm CPU hauv lawv cov txheej txheem tuaj yeem ua tiav cov kev coj ua tau piav qhia hauv tsab xov xwm no.

Kuv yuav ntxiv tias thaum xub thawj tsab xov xwm tau ntev dua, tab sis txhawm rau kom tsis txhob tshaj tawm cov ntawv nyeem ntev, kuv txiav txim siab tshem qee cov ntsiab lus hauv tsab xov xwm no - peb yuav rov qab mus rau lawv hauv kev tshaj tawm yav tom ntej.

Koj tuaj yeem poke tus bot ntawm Telegram - @AttraiBot, nws yuav ua haujlwm tsawg kawg txog thaum kawg ntawm lub caij nplooj zeeg 2020. Cia kuv ceeb toom rau koj tias tsis muaj cov ntaub ntawv neeg siv khaws cia - tsis yog cov duab qub, lossis cov txiaj ntsig ntawm cov kav dej ntsuas - txhua yam raug rhuav tshem tom qab ua tiav.

Tau qhov twg los: www.hab.com

Ntxiv ib saib