Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

даромад

Салом!

Дар ин мақола ман таҷрибаи худро дар бораи сохтани меъмории микросервис барои лоиҳа бо истифода аз шабакаҳои нейрон нақл мекунам.

Биёед дар бораи талаботҳои меъморӣ сӯҳбат кунем, диаграммаҳои гуногуни сохториро бубинем, ҳар як ҷузъи меъмории тайёрро таҳлил кунем ва инчунин метрикаи техникии ҳалли онро арзёбӣ кунем.

Аз хондан лаззат баред!

Чанд сухан дар бораи мушкилот ва ҳалли он

Идеяи асосӣ ин аст, ки баҳодиҳии ҷолибияти шахс аз рӯи ҷадвали даҳ бал дар асоси акс.

Дар ин мақола мо аз тавсифи ҳам шабакаҳои нейронии истифодашуда ва ҳам раванди омодасозӣ ва омӯзиши додаҳо дур мешавем. Аммо, дар яке аз нашрияҳои зерин, мо ҳатман ба таҳлили лӯлаи арзёбӣ дар сатҳи амиқ бармегардем.

Ҳоло мо аз лӯлаи арзёбӣ дар сатҳи боло мегузарем ва ба ҳамкории микросервисҳо дар заминаи меъмории умумии лоиҳа тамаркуз хоҳем кард. 

Ҳангоми кор дар лӯлаи арзёбии ҷолибият, вазифа ба ҷузъҳои зерин тақсим карда шуд:

  1. Интихоби чеҳраҳо дар аксҳо
  2. Баҳои ҳар як шахс
  3. Натиҷаро нишон диҳед

Аввалин бо қувваҳои пешакӣ омодашуда ҳал карда мешавад MTCNN. Барои дуюм, бо истифода аз PyTorch як шабакаи нейронҳои конволютсионӣ омӯзонида шуд ResNet34 - аз тавозуни "сифат / суръати хулосабарорӣ дар CPU"

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Диаграммаи функсионалии лӯлаи арзёбӣ

Таҳлили талаботи меъмории лоиҳа

Дар давраи ҳаёт ML марҳилаҳои лоиҳаи кор оид ба меъморӣ ва автоматикунонии ҷобаҷогузории моделҳо аксар вақт аз ҳама вақт ва захираҳо мебошанд.

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Давраи ҳаёти лоиҳаи ML

Ин лоиҳа истисно нест - тасмим гирифта шуд, ки лӯлаи арзёбӣ ба хидмати онлайн ворид карда шавад, ки мо ба меъморӣ ғарқ шуданро талаб мекардем. Талаботи асосии зерин муайян карда шуданд:

  1. Нигоҳдории ягонаи сабт - ҳама хидматҳо бояд гузоришҳоро дар як ҷо нависанд, онҳо бояд барои таҳлил қулай бошанд
  2. Имконияти миқёси уфуқии хидматрасонии арзёбӣ - ҳамчун мушкилоти эҳтимолӣ
  3. Барои баҳодиҳии ҳар як тасвир ҳамон миқдор захираҳои протсессор бояд ҷудо карда шаванд, то ки дар тақсимоти вақт барои хулосабарорӣ пешгирӣ карда шаванд.
  4. Ҷойгиркунии зуд (аз нав) ҳам хидматҳои мушаххас ва ҳам дар маҷмӯъ стек
  5. Қобилияти дар ҳолати зарурӣ истифода бурдани объектҳои умумӣ дар хидматҳои гуногун

меъморӣ

Пас аз таҳлили талабот маълум шуд, ки меъмории микросервис қариб комилан мувофиқ аст.

Барои халос шудан аз дарди сари нолозим, API Telegram ҳамчун фронт интихоб карда шуд.

Аввалан, биёед диаграммаи сохтории меъмории тайёрро дида бароем, сипас ба тавсифи ҳар як ҷузъҳо мегузарем ва инчунин раванди коркарди бомуваффақияти тасвирро ба расмият меорем.

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Диаграммаи сохтории меъмории тайёр

Биёед дар бораи ҳар як ҷузъҳои диаграмма муфассалтар сӯҳбат кунем ва онҳоро Масъулияти ягона дар раванди арзёбии тасвир нишон диҳем.

Микросервис "attrai-telegram-bot"

Ин микросервис ҳама муомилаҳоро бо API Telegram фаро мегирад. 2 сенарияи асосӣ вуҷуд дорад: кор бо тасвири фармоишӣ ва кор бо натиҷаи лӯлаи арзёбӣ. Биёед ба ҳарду сенарияи умумӣ назар кунем.

Ҳангоми гирифтани паёми фармоишӣ бо тасвир:

  1. Филтркунӣ анҷом дода мешавад, ки аз санҷишҳои зерин иборат аст:
    • Мавҷудияти андозаи оптималии тасвир
    • Шумораи тасвирҳои корбар аллакай дар навбат
  2. Ҳангоми гузаштани филтри аввал, тасвир дар ҳаҷми докер захира карда мешавад
  3. Дар навбати "to_estimate" супориш истеҳсол карда мешавад, ки дар байни чизҳои дигар, роҳи тасвири дар ҳаҷми мо ҷойгиршударо дар бар мегирад.
  4. Агар қадамҳои дар боло зикршуда бомуваффақият анҷом дода шаванд, корбар паёмеро бо вақти тақрибии коркарди тасвир мегирад, ки аз рӯи шумораи вазифаҳои навбатӣ ҳисоб карда мешавад. Агар хатогӣ рух диҳад, корбар ба таври возеҳ тавассути фиристодани паём бо маълумот дар бораи хатогиҳо огоҳ карда мешавад.

Инчунин, ин хидматрасонии хурд, ба монанди коргари карафс, ба навбати "after_estimate" гӯш медиҳад, ки барои вазифаҳое, ки аз лӯлаи арзёбӣ гузаштаанд, пешбинӣ шудааст.

Ҳангоми гирифтани вазифаи нав аз "after_estimate":

  1. Агар тасвир бомуваффақият коркард шавад, мо натиҷаро ба корбар мефиристем, агар не, мо дар бораи хато хабар медиҳем.
  2. Хориҷ кардани тасвире, ки натиҷаи лӯлаи арзёбӣ аст

Микросервиси арзёбии "attrai-estimator"

Ин хидматрасонии хурд як коргари карафс аст ва ҳама чизҳои марбут ба лӯлаи арзёбии тасвирро фаро мегирад. Дар ин ҷо танҳо як алгоритми корӣ мавҷуд аст - биёед онро таҳлил кунем.

Ҳангоми гирифтани вазифаи нав аз "to_estimate":

  1. Биёед тасвирро тавассути лӯлаи арзёбӣ иҷро кунем:
    1. Бор кардани тасвир ба хотира
    2. Мо тасвирро ба андозаи зарурӣ меорем
    3. Ҷустуҷӯи ҳама чеҳраҳо (MTCNN)
    4. Мо ҳама чеҳраҳоро арзёбӣ мекунем (мо чеҳраҳоеро, ки дар қадами охирин пайдо шудаанд, ба гурӯҳ мепӯшем ва ResNet34 хулоса мебарорем)
    5. Намоиши тасвири ниҳоӣ
      1. Биёед қуттиҳои маҳдудкунандаро кашем
      2. Тартиб додани рейтингҳо
  2. Нест кардани тасвири фармоишӣ (аслӣ).
  3. Нигоҳ доштани натиҷа аз лӯлаи арзёбӣ
  4. Мо вазифаро дар навбати "after_estimate" гузоштем, ки онро микросервиси "attrai-telegram-bot" дар боло баррасӣ мекунад.

Graylog (+ mongoDB + Elasticsearch)

Грейлог як роҳи ҳалли идоракунии марказонидашудаи гузоришҳо мебошад. Дар ин лоида он мувофики максад истифода шудааст.

Интихоб ба ӯ афтод, на ба интихоби муқаррарӣ ELK стек, аз сабаби роҳати кор бо он аз Python. Барои ворид шудан ба Graylog танҳо ба шумо лозим аст, ки GELFTCPHandler-ро аз баста илова кунед хокистарранг ба боқимондаи коркардкунандагони решавӣ аз микросервиси python мо.

Ҳамчун шахсе, ки қаблан танҳо бо стеки ELK кор мекард, ман ҳангоми кор бо Graylog таҷрибаи мусбат доштам. Ягона чизе, ки рӯҳафтода аст, бартарии хусусиятҳои Кибана нисбат ба веб-интерфейси Graylog мебошад.

Харгӯш

Харгӯш брокери паёмӣ дар асоси протоколи AMQP мебошад.

Дар ин лоиҳа он ҳамчун истифода бурда шуд устувортарин ва замон санҷида брокер барои Celery ва дар реҷаи устувор кор мекард.

Redis

Redis як DBMS NoSQL мебошад, ки бо сохторҳои додаҳои калидӣ кор мекунад

Баъзан зарурати истифодаи объектҳои умумӣ вуҷуд дорад, ки сохторҳои муайяни додаҳоро дар микросервисҳои гуногуни Python амалӣ мекунанд.

Масалан, Redis хэшмапи шакли "telegram_user_id => шумораи вазифаҳои фаъолро дар навбат" нигоҳ медорад, ки ба шумо имкон медиҳад, ки шумораи дархостҳои як корбарро то як арзиши муайян маҳдуд кунед ва ба ин васила аз ҳамлаҳои DoS пешгирӣ кунед.

Раванди коркарди бомуваффақияти тасвирҳоро ба расмият меорем

  1. Истифодабаранда тасвирро ба боти Telegram мефиристад
  2. "attrai-telegram-bot" аз API Telegram паём қабул мекунад ва онро таҳлил мекунад
  3. Вазифа бо тасвир ба навбати асинхронии "to_estimate" илова карда мешавад
  4. Истифодабаранда паёмро бо вақти баҳодиҳии ба нақша гирифташуда мегирад
  5. "attrai-estimator" супоришро аз навбати "to_estimate" мегирад, ҳисобҳоро тавассути қубур иҷро мекунад ва супоришро ба навбати "афтер_смета" медиҳад
  6. "attrai-telegram-bot" бо гӯш кардани навбати "after_estimate" натиҷаро ба корбар мефиристад

DevOps

Ниҳоят, пас аз баррасии меъморӣ, шумо метавонед ба қисми якхела ҷолиб - DevOps гузаред

Тӯдаи докер

 

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Тӯдаи докер  — системаи кластерӣ, ки функсияи он дар дохили Docker Engine амалӣ карда мешавад ва аз қуттӣ дастрас аст.

Бо истифода аз "тӯда" ҳама гиреҳҳои кластери мо ба 2 намуд тақсим мешаванд - коргар ва менеҷер. Дар мошинҳои навъи якум гурӯҳҳои контейнерҳо (стекҳо) ҷойгир карда мешаванд, мошинҳои навъи дуюм барои миқёс, мувозинат ва дигар хусусиятҳои ҷолиб. Менеҷерҳо низ ба таври муқаррарӣ коргаронанд.

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Кластер бо як роҳбар ва се коргар

Андозаи ҳадди ақали имконпазири кластер 1 гиреҳ аст; як мошини ягона ҳамзамон ҳамчун менеҷери пешбар ва коргар амал мекунад. Дар асоси андозаи лоиҳа ва талаботи ҳадди ақал барои таҳаммулпазирӣ ба хатогиҳо, тасмим гирифта шуд, ки ин равишро истифода барад.

Ба пеш нигоҳ карда, ман мегӯям, ки аз замони таҳвили аввалини истеҳсолот, ки дар нимаи моҳи июн буд, ҳеҷ мушкилие бо ин ташкилоти кластерӣ вуҷуд надошт (аммо ин маънои онро надорад, ки чунин созмон дар ҳама гуна муассисаҳои миёна ва калон қобили қабул аст. Лоиҳаҳое, ки ба талаботҳои таҳаммулпазирии хатогӣ мувофиқанд).

Docker Stack

Дар ҳолати тӯда, ӯ барои ҷойгиркунии стекҳо (маҷмӯи хидматҳои докер) масъул аст. стек докер

Он конфигуратсияҳои docker-compose -ро дастгирӣ мекунад, ки ба шумо имкон медиҳад ба таври иловагӣ имконоти густаришро истифода баред.  

Масалан, бо истифода аз ин параметрҳо, захираҳо барои ҳар як мисолҳои микросервиси арзёбӣ маҳдуд буданд (мо N ядроро барои N мисолҳо ҷудо мекунем, дар худи микросервис мо шумораи ядроҳои аз ҷониби PyTorch истифодашавандаро ба як маҳдуд мекунем)

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

Қайд кардан муҳим аст, ки Redis, RabbitMQ ва Graylog хидматҳои давлатӣ мебошанд ва онҳоро ба осонӣ ҳамчун "attrai-estimator" миқёс кардан мумкин нест.

Пешгӯии савол - чаро Кубернетес нест?

Чунин ба назар мерасад, ки истифодаи Kubernetes дар лоиҳаҳои хурд ва миёна як сарбории изофӣ аст; тамоми функсияҳои заруриро аз Docker Swarm гирифтан мумкин аст, ки барои оркестри контейнер хеле қулай аст ва инчунин барои воридшавӣ монеаи кам дорад.

Инфраструктура

Ҳамаи ин дар VDS бо хусусиятҳои зерин ҷойгир карда шудааст:

  • CPU: 4 асосии Intel® Xeon® Gold 5120 CPU @ 2.20 ГГц
  • RAM: 8 GB
  • SSD: 160 ГБ

Пас аз санҷиши сарбории маҳаллӣ, чунин менамуд, ки бо воридшавии ҷиддии корбарон ин мошин кофӣ хоҳад буд.

Аммо, дарҳол пас аз ҷойгиркунӣ, ман истинодро ба яке аз маъмултарин панелҳои тасвирӣ дар ИДМ ҷойгир кардам (ҳа, ҳамон як), пас аз он одамон таваҷҷӯҳ пайдо карданд ва дар тӯли чанд соат хидмат даҳҳо ҳазор тасвирҳоро бомуваффақият коркард кард. Дар айни замон, дар лаҳзаҳои авҷ, захираҳои CPU ва RAM ҳатто нисфи истифода нашудаанд.

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон
Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Якчанд графикаи бештар

Шумораи корбарони беназир ва дархостҳои арзёбӣ аз замони ҷойгиркунӣ, вобаста ба рӯз

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

Тақсимоти вақти хулосабарории лӯлаи арзёбӣ

Шарҳи умумии меъмории хидмат барои арзёбии намуди зоҳирӣ дар асоси шабакаҳои нейрон

натиҷаҳои

Барои ҷамъбаст, ман метавонам бигӯям, ки меъморӣ ва равиши оркестрсозии контейнерҳо худро комилан асоснок карданд - ҳатто дар лаҳзаҳои авҷи кор ҳеҷ гуна қатраҳо ё кохишҳо дар вақти коркард ба назар намерасанд. 

Ман фикр мекунам, ки лоиҳаҳои хурд ва миёна, ки дар ҷараёни худ хулосаҳои шабакаҳои нейронро дар вақти воқеӣ истифода мебаранд, метавонанд таҷрибаҳои дар ин мақола тавсифшударо бомуваффақият қабул кунанд.

Ман илова мекунам, ки дар аввал мақола дарозтар буд, аммо барои интишори тӯлонӣ, ман тасмим гирифтам, ки баъзе нуктаҳоро дар ин мақола сарфи назар кунам - мо дар нашрияҳои оянда ба онҳо бармегардем.

Шумо метавонед ботро дар Telegram - @AttraiBot шиканед, он ҳадди аққал то охири тирамоҳи соли 2020 кор мекунад. Ёдовар мешавам, ки ягон маълумоти корбар нигоҳ дошта намешавад - на тасвирҳои аслӣ ва на натиҷаҳои лӯлаи арзёбӣ - ҳама чиз пас аз коркард хароб карда мешавад.

Манбаъ: will.com

Илова Эзоҳ