Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

кіру

Сәлем!

Бұл мақалада мен нейрондық желілерді қолданатын жоба үшін микросервис архитектурасын құру тәжірибеммен бөлісемін.

Сәулет талаптары туралы сөйлесейік, әртүрлі құрылымдық диаграммаларды қарастырайық, дайын архитектураның әрбір құрамдас бөлігін талдаймыз, сонымен қатар шешімнің техникалық көрсеткіштерін бағалайық.

Оқуға ләззат алыңыз!

Мәселе және оның шешімі туралы бірнеше сөз

Негізгі идея - фотосурет негізінде адамның тартымдылығын он балдық шкала бойынша бағалау.

Бұл мақалада біз пайдаланылатын нейрондық желілерді де, деректерді дайындау мен оқыту процесін де сипаттаудан бас тартамыз. Дегенмен, келесі басылымдардың бірінде біз бағалау құбырын терең деңгейде талдауға міндетті түрде ораламыз.

Енді біз жоғары деңгейде бағалау құбырынан өтеміз және жобаның жалпы архитектурасы контекстінде микросервистердің өзара әрекеттесуіне назар аударамыз. 

Тартымдылықты бағалау құбырында жұмыс істеу кезінде тапсырма келесі компоненттерге бөлінді:

  1. Фотосуреттердегі беттерді таңдау
  2. Әр адамның бағалауы
  3. Нәтижені көрсетіңіз

Біріншісі алдын ала дайындалған күштермен шешіледі MTCNN. Екіншісі үшін конволюционды нейрондық желі PyTorch арқылы оқытылды ResNet34 – «процессордағы нәтиженің сапасы / жылдамдығы» теңгерімінен

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

Бағалау құбырының функционалдық диаграммасы

Жоба архитектурасына қойылатын талаптарды талдау

Өмірлік циклде ML Модельді орналастырудың архитектурасы мен автоматтандыруы бойынша жұмыстың жобалық кезеңдері көбінесе ең көп уақытты қажет ететін және ресурстарды қажет ететін кезеңдердің бірі болып табылады.

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

ML жобасының өмірлік циклі

Бұл жоба ерекшелік емес - бағалау құбырын архитектураға енуді қажет ететін онлайн сервиске айналдыру туралы шешім қабылданды. Келесі негізгі талаптар анықталды:

  1. Бірыңғай журнал қоймасы – барлық қызметтер журналдарды бір жерде жазуы керек, олар талдауға ыңғайлы болуы керек
  2. Бағалау қызметінің көлденең масштабтау мүмкіндігі – ең ықтимал Төменге ретінде
  3. Қорытынды жасау уақытын бөлу кезінде шектен тыс мәндерді болдырмау үшін әрбір кескінді бағалау үшін процессор ресурстарының бірдей көлемін бөлу керек.
  4. Арнайы қызметтерді де, тұтастай стекті де жылдам (қайта) орналастыру
  5. Қажет болған жағдайда әртүрлі қызметтерде ортақ объектілерді пайдалану мүмкіндігі

сәулет

Талаптарды талдағаннан кейін микросервис архитектурасы дерлік тамаша сәйкес келетіні белгілі болды.

Қажетсіз бас ауруларынан құтылу үшін Telegram API интерфейсі таңдалды.

Алдымен, дайын архитектураның құрылымдық диаграммасын қарастырайық, содан кейін компоненттердің әрқайсысының сипаттамасына көшеміз, сонымен қатар кескінді сәтті өңдеу процесін ресімдейміз.

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

Дайын архитектураның құрылымдық схемасы

Суретті бағалау процесінде оларды Бірыңғай жауапкершілік деп белгілей отырып, диаграмманың әрбір құрамдас бөлігі туралы толығырақ сөйлесейік.

«attrai-telegram-bot» микросервис

Бұл микросервис Telegram API интерфейсімен барлық өзара әрекеттесуді қамтиды. 2 негізгі сценарий бар: теңшелетін кескінмен жұмыс және бағалау құбырының нәтижесімен жұмыс. Жалпы екі сценарийді де қарастырайық.

Суреті бар теңшелетін хабарды алған кезде:

  1. Сүзу келесі тексерулерден тұратын орындалады:
    • Оңтайлы кескін өлшемінің болуы
    • Кезекте тұрған пайдаланушы кескіндерінің саны
  2. Бастапқы сүзгіден өткен кезде сурет докер көлемінде сақталады
  3. Тапсырма «бағалау_бағалау» кезегінде жасалады, ол басқа нәрселермен қатар біздің томда орналасқан кескінге жолды қамтиды
  4. Жоғарыда аталған қадамдар сәтті орындалса, пайдаланушы кезектегі тапсырмалар санына қарай есептелетін кескінді өңдеудің шамамен уақыты бар хабарлама алады. Қате орын алса, пайдаланушы қате болуы мүмкін ақпараты бар хабарламаны жіберу арқылы анық хабарланады.

Сондай-ақ, бұл микросервис, балдыркөк жұмысшысы сияқты, бағалау құбыры арқылы өткен тапсырмаларға арналған «бағалаудан кейінгі» кезекті тыңдайды.

"Кейін_бағалаудан" жаңа тапсырма алған кезде:

  1. Егер сурет сәтті өңделсе, нәтижені пайдаланушыға жібереміз, егер олай болмаса, қате туралы хабарлаймыз.
  2. Бағалау құбырының нәтижесі болып табылатын кескінді жою

«attrai-estimator» бағалау микросервисі

Бұл микросервис балдыркөк жұмысшысы болып табылады және кескінді бағалау құбырына қатысты барлық нәрсені қамтиды. Мұнда бір ғана жұмыс алгоритмі бар – оны талдап көрейік.

«Бағалау_бағалауынан» жаңа тапсырма алған кезде:

  1. Кескінді бағалау құбыры арқылы іске қосайық:
    1. Кескінді жадқа жүктеу
    2. Біз суретті қажетті өлшемге келтіреміз
    3. Барлық беттерді табу (MTCNN)
    4. Біз барлық беттерді бағалаймыз (соңғы қадамда табылған беттерді пакетке орап, ResNet34 тұжырымын жасаймыз)
    5. Соңғы кескінді көрсетіңіз
      1. Шектеу жолақтарын салайық
      2. Бағалауды құрастыру
  2. Пайдаланушы (түпнұсқа) кескінді жою
  3. Бағалау құбырының шығысын сақтау
  4. Біз тапсырманы жоғарыда талқыланған «attrai-telegram-bot» микросервисі тыңдайтын «кейінгі_бағалау» кезегіне қоямыз.

Graylog (+ mongoDB + Elasticsearch)

Грейлог орталықтандырылған журналды басқаруға арналған шешім болып табылады. Бұл жобада ол өз мақсатына сай пайдаланылды.

Таңдау әдеттегіге емес, оған түсті ELK стек, онымен Python-дан жұмыс істеу ыңғайлылығына байланысты. Graylog жүйесіне кіру үшін сізге тек пакеттен GELFTCPHandler қосу керек сұр түсті python микросервисіміздің қалған түбірлік тіркеуші өңдеушілеріне.

Бұрын тек ELK стекімен жұмыс істеген адам ретінде мен Graylog-пен жұмыс істеу барысында жалпы оң тәжірибе алдым. Көңілге қалдыратын жалғыз нәрсе - Kibana мүмкіндіктерінің Graylog веб-интерфейсінен артықшылығы.

Қоян MQ

Қоян MQ AMQP протоколына негізделген хабарлама брокері.

Бұл жобада ол ретінде пайдаланылды ең тұрақты және уақытпен тексерілген балдыркөк үшін брокер және берік режимде жұмыс істеді.

Редис

Редис кілт-мән деректер құрылымдарымен жұмыс істейтін NoSQL ДҚБЖ болып табылады

Кейде әртүрлі Python микросервистерінде белгілі бір деректер құрылымдарын жүзеге асыратын жалпы нысандарды пайдалану қажеттілігі туындайды.

Мысалы, Redis «telegram_user_id => кезектегі белсенді тапсырмалардың саны» пішіміндегі хэшмапты сақтайды, бұл бір пайдаланушының сұрауларының санын белгілі бір мәнге дейін шектеуге және осылайша DoS шабуылдарына жол бермеуге мүмкіндік береді.

Кескінді сәтті өңдеу процесін ресімдейік

  1. Пайдаланушы суретті Telegram ботына жібереді
  2. "attrai-telegram-bot" Telegram API интерфейсінен хабарлама алады және оны талдайды
  3. Суреті бар тапсырма "to_estimate" асинхронды кезекке қосылады.
  4. Пайдаланушы жоспарланған бағалау уақыты бар хабарлама алады
  5. «attrai-estimator» «бағалау_бағалау» кезегінен тапсырма алады, бағалауларды құбыр арқылы жүргізеді және тапсырманы «бағалаудан кейінгі» кезекке шығарады
  6. "attrai-telegram-bot" "кейінгі_бағалау" кезегін тыңдап, нәтижені пайдаланушыға жібереді

DevOps

Соңында, архитектураны қарап шыққаннан кейін, сіз бірдей қызықты бөлікке - DevOps-ке ауыса аласыз

Докер үйірі

 

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

Докер үйірі  — функционалдығы Docker Engine ішінде жүзеге асырылатын және қораптан тыс қол жетімді кластерлік жүйе.

«Үйірді» пайдаланып, біздің кластердегі барлық түйіндерді екі түрге бөлуге болады - жұмысшы және менеджер. Бірінші типті машиналарда контейнерлер топтары (штабтар) орналастырылады, екінші типтегі машиналар масштабтау, теңгерімдеу және басқа керемет мүмкіндіктер. Менеджерлер де әдепкі бойынша жұмысшылар.

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

Бір жетекші менеджер және үш жұмысшы бар кластер

Кластердің ең аз мүмкін өлшемі - 1 түйін; бір машина бір уақытта жетекші менеджер мен жұмысшы ретінде әрекет етеді. Жобаның көлеміне және ақауларға төзімділікке қойылатын минималды талаптарға сүйене отырып, осы тәсілді қолдану туралы шешім қабылданды.

Алға қарай, мен маусым айының ортасында болған алғашқы өнім жеткізілімінен бері бұл кластерлік ұйыммен байланысты ешқандай проблемалар болмағанын айтқым келеді (бірақ бұл мұндай ұйым кез келген ортада қолайлы дегенді білдірмейді. ақауларға төзімділік талаптарына жататын жобалар).

Docker стегі

Үйір режимінде ол стектерді (докер қызметтерінің жиынтығы) орналастыруға жауапты. докерлік стек

Ол қолдану параметрлерін қосымша пайдалануға мүмкіндік беретін докер құрастыру конфигурацияларын қолдайды.  

Мысалы, осы параметрлерді пайдалана отырып, әрбір бағалау микросервис даналары үшін ресурстар шектеулі болды (біз 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-де орналастырылған:

  • Орталық процессор: 4 ядролы Intel® Xeon® Gold 5120 CPU @ 2.20 ГГц
  • RAM: 8 ГБ
  • SSD: 160 ГБ

Жергілікті жүктемені тестілеуден кейін, пайдаланушылардың елеулі ағыны кезінде бұл машина жеткілікті болатын сияқты.

Бірақ, орналастырудан кейін бірден мен ТМД-дағы ең танымал сурет тақталарының біріне сілтеме жарияладым (иә, дәл сол), содан кейін адамдар қызығушылық танытты және бірнеше сағат ішінде қызмет ондаған мың кескіндерді сәтті өңдеді. Сонымен қатар, ең жоғары сәттерде CPU және RAM ресурстары тіпті жартысы пайдаланылмады.

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу
Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

Тағы бірнеше графика

Бірегей пайдаланушылар саны және күнге байланысты орналастырудан кейінгі бағалау сұраулары

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

Бағалау құбырының қорытынды уақытын бөлу

Нейрондық желілер негізінде сыртқы түрін бағалауға арналған қызмет архитектурасына жалпы шолу

қорытындылар

Қорытындылай келе, мен контейнерлерді оркестрлеудің архитектурасы мен тәсілі өзін толығымен ақтады деп айта аламын - тіпті ең жоғары сәттерде өңдеу уақытында ешқандай құлдырау немесе салдар болған жоқ. 

Менің ойымша, процесс барысында орталық процессордағы нейрондық желілердің нақты уақыт режиміндегі қорытындысын қолданатын шағын және орта жобалар осы мақалада сипатталған тәжірибелерді сәтті қабылдай алады.

Мен мақаланың бастапқыда ұзағырақ болғанын қосамын, бірақ ұзақ оқылмау үшін мен осы мақаладағы кейбір тармақтарды алып тастауды шештім - біз оларға болашақ басылымдарда қайта ораламыз.

Сіз ботты Telegram - @AttraiBot-та сүзе аласыз, ол кем дегенде 2020 жылдың күзінің соңына дейін жұмыс істейді. Еске сала кетейін, пайдаланушы деректері сақталмайды - түпнұсқа кескіндер де, бағалау құбырының нәтижелері де - өңдеуден кейін бәрі жойылады.

Ақпарат көзі: www.habr.com

пікір қалдыру