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

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

кирүү

Силерге тынчтык болсун!

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

Архитектура талаптары жөнүндө сүйлөшөлү, ар кандай структуралык диаграммаларды карап, даяр архитектуранын компоненттеринин ар бирин талдап, ошондой эле чечимдин техникалык метрикасын баалайлы.

Happy окуу!

көйгөй жана аны чечүү жөнүндө бир нече сөз

Негизги идея - сүрөттүн негизинде адамдын жагымдуулугун он баллдык шкала боюнча баалоо.

Бул макалада биз колдонулган нейрон тармактарын да, маалыматтарды даярдоо жана окутуу процессин да сүрөттөөдөн алыстайбыз. Бирок, кийинки басылмалардын биринде биз баалоо түтүгүн тереңдетилген деңгээлде талдап чыгууга сөзсүз кайтабыз.

Эми биз жогорку деңгээлдеги баалоо түтүгүнөн өтөбүз жана долбоордун жалпы архитектурасынын контекстинде микросервистердин өз ара аракеттенүүсүнө көңүл бурабыз. 

Тартуучулукту баалоо түтүкчөсүндө иштөөдө тапшырма төмөнкү компоненттерге бөлүнгөн:

  1. Сүрөттөрдөгү жүздөрдү тандоо
  2. Ар бир адамдын рейтинги
  3. Натыйжасын бериңиз

Биринчиси алдын ала даярдалган күчтөр менен чечилет MTCNN. Экинчиден, PyTorch аркылуу конволюциялык нейрон тармагы үйрөтүлгөн ResNet34 - "CPU боюнча сапаты / ылдамдыгы" балансынан

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

Баалоо түтүкчөсүнүн функционалдык диаграммасы

Долбоордун архитектура талаптарын талдоо

Жашоо циклинде ML архитектура жана моделди жайылтууну автоматташтыруу боюнча иштердин долбоордук этаптары көбүнчө эң көп убакытты жана ресурсту талап кылуучу болуп саналат.

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

ML долбоорунун жашоо цикли

Бул долбоор да четте калган жок - баалоо түтүгүн архитектурага аралашууну талап кылган онлайн сервиске киргизүү чечими кабыл алынды. Төмөнкү негизги талаптар аныкталган:

  1. Бирдиктүү журнал сактагыч - бардык кызматтар журналдарды бир жерге жазуусу керек, алар талдоо үчүн ыңгайлуу болушу керек
  2. Баалоо кызматын горизонталдуу масштабдоо мүмкүндүгү - эң ыктымалдуу Төгөрөк катары
  3. Корутундуга убакыт бөлүштүрүүдө четтөөлөрдү болтурбоо үчүн ар бир сүрөттү баалоо үчүн процессордун ресурстарынын бирдей көлөмү бөлүнүшү керек.
  4. Белгилүү кызматтарды жана бүтүндөй стекти тез (кайра) жайылтуу
  5. Мүмкүнчүлүк, зарыл болсо, ар кандай кызматтарда жалпы объектилерди колдонуу

архитектура

Талаптарды талдап чыккандан кийин, микросервис архитектурасы дээрлик кемчиликсиз дал келери айкын болду.

Керексиз баш оорудан арылуу үчүн Telegram API алдыңкы программа катары тандалган.

Биринчиден, даяр архитектуранын структуралык схемасын карап көрөлү, андан кийин компоненттердин ар биринин сыпаттамасына өтүү, ошондой эле ийгиликтүү сүрөттөрдү иштетүү процессин расмийлештирүү.

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

Даяр архитектуранын структуралык схемасы

Сүрөттү баалоо процессинде аларды бирдиктүү жоопкерчиликти белгилеп, диаграмманын ар бир компоненти жөнүндө кененирээк сүйлөшөлү.

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

Бул микросервис Telegram API менен болгон бардык өз ара аракеттенүүнү камтыйт. 2 негизги сценарий бар: ыңгайлаштырылган сүрөт менен иштөө жана баалоо түтүкчөсүнүн жыйынтыгы менен иштөө. Келгиле, эки сценарийди тең жалпысынан карап көрөлү.

Сүрөт менен ыңгайлаштырылган билдирүүнү алууда:

  1. Фильтрация төмөнкү текшерүүлөрдөн турат:
    • Оптималдуу сүрөт өлчөмүнүн болушу
    • Кезектеги колдонуучу сүрөттөрүнүн саны
  2. Алгачкы чыпкалоодон өткөндө, сүрөт докер көлөмүнө сакталат
  3. Тапшырма "to_estimate" кезегинде өндүрүлөт, ал башка нерселер менен катар биздин томубузда жайгашкан сүрөткө жолду камтыйт.
  4. Эгерде жогорудагы кадамдар ийгиликтүү аткарылса, колдонуучу кезектеги тапшырмалардын санына жараша эсептелген сүрөттү иштетүү убактысынын болжолдуу убактысы менен билдирүү алат. Ката пайда болсо, колдонуучуга эмне туура эмес болуп кеткендиги жөнүндө маалымат менен билдирүү жөнөтүү аркылуу ачык эскертилет.

Ошондой эле, бул микросервис, сельдерей жумушчусу сыяктуу, баалоо түтүкчөсүнөн өткөн тапшырмалар үчүн арналган "кийинки баа" кезегин угат.

"Ater_count" жаңы тапшырманы алууда:

  1. Сүрөт ийгиликтүү иштетилсе, натыйжаны колдонуучуга жөнөтөбүз, эгер жок болсо, ката жөнүндө кабарлайбыз.
  2. Баалоо түтүгүнүн натыйжасы болгон сүрөттү алып салуу

Баалоо микросервиси "attrai-estimator"

Бул микросервис сельдерей жумушчусу жана сүрөттү баалоо түтүгүнө тиешелүү нерселердин баарын камтыйт. Бул жерде бир гана иштөө алгоритми бар - аны талдап көрөлү.

"to_count" жаңы тапшырманы алууда:

  1. Келгиле, сүрөттү баалоо жолу аркылуу иштетели:
    1. Сүрөт эстутумга жүктөлүүдө
    2. Сүрөттү керектүү өлчөмдө келтиребиз
    3. Бардык жүздөрдү табуу (MTCNN)
    4. Биз бардык жүздөрдү баалайбыз (акыркы кадамда табылган жүздөрдү партияга ороп, ResNet34 жыйынтык чыгарабыз)
    5. Акыркы сүрөттү чыгарыңыз
      1. Чектөөчү кутучаларды тарталы
      2. Рейтингдерди түзүү
  2. Ыңгайлаштырылган (оригиналдуу) сүрөттү жок кылуу
  3. Баалоо түтүкчөсүнүн жыйынтыгын сактоо
  4. Биз тапшырманы жогоруда талкууланган "attrai-telegram-bot" микросервиси уга турган "кийин_ баалоо" кезегине койдук.

Graylog (+ mongoDB + Elasticsearch)

graylog борборлоштурулган журнал башкаруу үчүн чечим болуп саналат. Бул долбоордо ал өз максатына ылайык пайдаланылган.

Тандоо адаттагыдай эмес, ага түшкөн ELK стек, аны менен иштөөнүн ыңгайлуулугуна байланыштуу Python. Graylogке кирүү үчүн эмне кылышыңыз керек болсо, бул пакеттен GELFTCPHandlerди кошуу боз биздин python микросервисибиздин калган тамыр логгер иштетүүчүлөрүнө.

Мурда бир гана ELK стек менен иштеген адам катары мен Graylog менен иштөөдө жалпы позитивдүү тажрыйбага ээ болдум. Көңүл бурган жалгыз нерсе - Кибана функцияларынын Graylog веб-интерфейсинен артыкчылыгы.

Rabbit MQ

Rabbit MQ AMQP протоколуна негизделген билдирүү брокери.

Бул долбоордо ал катары колдонулган эң туруктуу жана убакыт сынагынан өткөн Сельдерей үчүн брокер жана туруктуу режимде иштеген.

Redis

Redis ачкыч-маанилүү маалымат структуралары менен иштеген NoSQL DBMS болуп саналат

Кээде ар кандай 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

Докер үйүрү

 

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

Докер үйүрү  — кластердик система, анын функционалдуулугу Docker Engine ичинде ишке ашырылган жана кутудан тышкары жеткиликтүү.

"Үйүн" колдонуп, биздин кластердеги бардык түйүндөр 2 түргө бөлүнөт - жумушчу жана менеджер. Биринчи типтеги машиналарда контейнерлердин топтору (стактар) жайгаштырылат, экинчи типтеги машиналар масштабдоо, баланстоо жана башка сонун өзгөчөлүктөрү. Жетекчилер да демейки боюнча жумушчулар.

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

Бир лидер менеджер жана үч жумушчу менен кластер

Кластердин минималдуу мүмкүн болгон өлчөмү 1 түйүн болуп саналат; бир машина бир эле учурда жетекчинин жана жумушчунун ролун аткарат. Долбоордун көлөмүнө жана каталарга чыдамдуулукка карата минималдуу талаптарга таянып, бул ыкманы колдонуу чечими кабыл алынды.

Алдыга карай, мен айтайын, июнь айынын орто ченинде болгон биринчи өндүрүштөн бери бул кластердик уюмга байланыштуу эч кандай көйгөйлөр болгон эмес (бирок бул мындай уюм кандайдыр бир орто-чоң ишканаларда алгылыктуу дегенди билдирбейт. кемчиликтерге чыдамкайлык талаптары коюлган долбоорлор).

Docker Stack

Үйрөнүү режиминде ал стектерди жайылтуу үчүн жооптуу (докер кызматтарынын топтому) докер стек

Бул докер-түзүү конфигурацияларын колдойт, бул сизге жайылтуу параметрлерин кошумча колдонууга мүмкүндүк берет.  

Мисалы, бул параметрлерди колдонуу менен, ар бир микросервис инстанциясынын ресурстары чектелген (биз 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.20GHz
  • RAM: 8 GB
  • SSD: 160 ГБ

Жергиликтүү жүктөмдү тестирлөөдөн кийин, колдонуучулардын олуттуу агымы менен бул машина жетиштүү болот окшойт.

Бирок, орнотулгандан кийин дароо эле мен КМШдагы эң популярдуу сүрөт такталарынын бирине шилтемени жайгаштырдым (ооба, ошол эле), андан кийин адамдар кызыгып, бир нече сааттын ичинде сервис он миңдеген сүрөттөрдү ийгиликтүү иштетти. Ошол эле учурда, эң көп учурда CPU жана RAM ресурстары жарымы да колдонулган эмес.

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

Дагы бир нече графика

Күнүнө жараша жайгаштырылгандан бери уникалдуу колдонуучулардын жана баалоо сурамдарынын саны

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

Баалоо түтүкчөлөрүнүн убакыт бөлүштүрүү

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

табылгалары

Жыйынтыктап айтканда, мен архитектура жана контейнерлерди оркестрлештирүү ыкмасы өзүн толугу менен актады деп айта алам - ал тургай эң жогорку учурларда да кайра иштетүү убакытында эч кандай тамчы же ылдый түшкөн жок. 

Менимче, процессинде CPU боюнча нейрондук тармактардын реалдуу убакыт режиминде корутундусун колдонгон чакан жана орто долбоорлор ушул макалада сүрөттөлгөн тажрыйбаларды ийгиликтүү кабыл алат деп ойлойм.

Мен кошумчалайм, алгач макала узунураак болчу, бирок узак окууну калтырбоо үчүн, мен бул макаладагы кээ бир пункттарды калтырууну чечтим - биз аларга кийинки басылмаларда кайрылабыз.

Сиз Telegram-да ботту кое аласыз - @AttraiBot, ал жок дегенде 2020-жылдын күз айынын аягына чейин иштейт. Эске сала кетейин, эч кандай колдонуучунун маалыматы сакталбайт - баштапкы сүрөттөр да, баалоо түтүгүнүн натыйжалары да - баары иштетилгенден кийин талкаланат.

Source: www.habr.com

Комментарий кошуу