Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

kirish

Salom!

Ushbu maqolada men neyron tarmoqlardan foydalangan holda loyiha uchun mikroservis arxitekturasini yaratish tajribam bilan o'rtoqlashaman.

Keling, arxitektura talablari haqida gapiraylik, turli strukturaviy diagrammalarni ko'rib chiqaylik, tayyor arxitekturaning har bir komponentini tahlil qilamiz, shuningdek, yechimning texnik ko'rsatkichlarini baholaymiz.

O'qishdan rohatlaning!

Muammo va uning echimi haqida bir necha so'z

Asosiy g'oya insonning jozibadorligini fotosuratga qarab o'n balli shkalada baholashdir.

Ushbu maqolada biz ishlatiladigan neyron tarmoqlarni ham, ma'lumotlarni tayyorlash va o'qitish jarayonini ham tasvirlashdan uzoqlashamiz. Biroq, keyingi nashrlardan birida, biz, albatta, baholash quvurini chuqurroq darajada tahlil qilishga qaytamiz.

Endi biz yuqori darajadagi baholash quvuridan o'tamiz va umumiy loyiha arxitekturasi kontekstida mikroservislarning o'zaro ta'siriga e'tibor qaratamiz. 

Jozibadorlikni baholash quvuri ustida ishlayotganda, vazifa quyidagi tarkibiy qismlarga bo'lingan:

  1. Suratlarda yuzlarni tanlash
  2. Har bir shaxsning reytingi
  3. Natijani ko'rsating

Birinchisi, oldindan tayyorlangan kuchlar tomonidan hal qilinadi MTCNN. Ikkinchidan, PyTorch yordamida konvolyutsion neyron tarmog'i o'qitildi ResNet34 - "protsessor bo'yicha xulosa chiqarish sifati / tezligi" balansidan

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

Baholash quvurining funktsional diagrammasi

Loyiha arxitektura talablarini tahlil qilish

Hayotiy tsiklda ML arxitektura va modelni joylashtirishni avtomatlashtirish bo'yicha ishlarning loyiha bosqichlari ko'pincha eng ko'p vaqt va resurslarni talab qiladi.

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

ML loyihasining hayot aylanishi

Ushbu loyiha bundan mustasno emas - baholash quvurini arxitekturaga sho'ng'ishni talab qiladigan onlayn xizmatga o'tkazish to'g'risida qaror qabul qilindi. Quyidagi asosiy talablar aniqlandi:

  1. Birlashtirilgan jurnalni saqlash - barcha xizmatlar jurnallarni bir joyda yozishi kerak, ular tahlil qilish uchun qulay bo'lishi kerak
  2. Baholash xizmatining gorizontal miqyosidagi imkoniyati - eng katta muammo sifatida
  3. Xulosa qilish vaqtini taqsimlashda o'zgarib turmaslik uchun har bir tasvirni baholash uchun protsessor resurslarining bir xil miqdori ajratilishi kerak.
  4. Muayyan xizmatlarni va umuman stekni tez (qayta) joylashtirish
  5. Agar kerak bo'lsa, turli xil xizmatlarda umumiy ob'ektlardan foydalanish qobiliyati

arxitektura

Talablarni tahlil qilgandan so'ng, mikroservis arxitekturasi deyarli mukammal darajada mos kelishi ma'lum bo'ldi.

Keraksiz bosh og'rig'idan xalos bo'lish uchun Telegram API frontend sifatida tanlandi.

Birinchidan, tayyor arxitekturaning strukturaviy diagrammasini ko'rib chiqamiz, so'ngra har bir komponentning tavsifiga o'tamiz, shuningdek, tasvirni muvaffaqiyatli qayta ishlash jarayonini rasmiylashtiramiz.

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

Tayyor arxitekturaning strukturaviy diagrammasi

Keling, diagrammaning har bir komponenti haqida batafsilroq gaplashaylik, ularni belgilab beradi Yagona javobgarlik tasvirni baholash jarayonida.

“attrai-telegram-bot” mikroservisi

Ushbu mikroservis Telegram API bilan barcha o'zaro aloqalarni qamrab oladi. Ikkita asosiy stsenariy mavjud: maxsus tasvir bilan ishlash va baholash quvurining natijasi bilan ishlash. Keling, ikkala stsenariyni umumiy ma'noda ko'rib chiqaylik.

Tasvirli maxsus xabarni qabul qilishda:

  1. Filtrlash quyidagi tekshiruvlardan iborat bo'ladi:
    • Optimal tasvir hajmining mavjudligi
    • Navbatdagi foydalanuvchi rasmlari soni
  2. Dastlabki filtrlashdan o'tganda tasvir docker hajmida saqlanadi
  3. Vazifa "to_estimate" navbatida ishlab chiqariladi, bu boshqa narsalar qatorida bizning hajmimizda joylashgan tasvirga yo'lni o'z ichiga oladi.
  4. Agar yuqoridagi amallar muvaffaqiyatli bajarilgan bo'lsa, foydalanuvchi navbatdagi vazifalar soniga qarab hisoblangan tasvirni qayta ishlashning taxminiy vaqti bilan xabar oladi. Agar xatolik yuzaga kelsa, foydalanuvchi nima noto'g'ri bo'lishi mumkinligi haqida ma'lumot bilan xabar yuborish orqali aniq xabardor qilinadi.

Shuningdek, ushbu mikroservis, selderey ishchisi kabi, baholash quvuridan o'tgan vazifalar uchun mo'ljallangan "so'ng_smeta" navbatini tinglaydi.

“After_estimate” dan yangi topshiriq olayotganda:

  1. Agar rasm muvaffaqiyatli qayta ishlansa, natijani foydalanuvchiga yuboramiz, agar bo'lmasa, xato haqida xabar beramiz.
  2. Baholash quvurining natijasi bo'lgan tasvirni olib tashlash

Baholash mikroxizmati "attrai-estimator"

Ushbu mikroservis selderey ishchisi bo'lib, tasvirni baholash quvuri bilan bog'liq hamma narsani qamrab oladi. Bu erda faqat bitta ish algoritmi bor - keling, uni tahlil qilaylik.

“to_estimate” dan yangi topshiriq olayotganda:

  1. Keling, tasvirni baholash quvuri orqali ishga tushiramiz:
    1. Rasm xotiraga yuklanmoqda
    2. Tasvirni kerakli hajmga keltiramiz
    3. Barcha yuzlarni topish (MTCNN)
    4. Biz barcha yuzlarni baholaymiz (biz oxirgi bosqichda topilgan yuzlarni to'plamga o'rab, ResNet34 xulosasini chiqaramiz)
    5. Yakuniy rasmni yarating
      1. Keling, chegaralovchi qutilarni chizamiz
      2. Baholarni chizish
  2. Maxsus (asl) rasmni o'chirish
  3. Baholash quvuridan chiqishni saqlash
  4. Biz vazifani yuqorida muhokama qilingan "attrai-telegram-bot" mikroservisi tomonidan tinglanadigan "after_estimate" navbatiga qo'yamiz.

Graylog (+ mongoDB + Elasticsearch)

Greylog markazlashtirilgan jurnallarni boshqarish uchun yechimdir. Ushbu loyihada u o'z maqsadi uchun ishlatilgan.

Tanlov odatdagidek emas, balki unga tushdi ELK stack, Python'dan u bilan ishlash qulayligi tufayli. Graylog-ga kirish uchun faqat paketdan GELFTCPHandler-ni qo'shish kifoya kulrang python mikroservisimizning qolgan ildiz logger ishlovchilariga.

Ilgari faqat ELK stek bilan ishlagan odam sifatida men Graylog bilan ishlashda umumiy ijobiy tajribaga ega bo'ldim. Tushkunlikka soluvchi yagona narsa Kibana xususiyatlarining Graylog veb-interfeysi ustidan ustunligidir.

Quyon MQ

Quyon MQ AMQP protokoliga asoslangan xabarlar brokeridir.

Ushbu loyihada u sifatida ishlatilgan eng barqaror va vaqt sinovidan o'tgan Selderey uchun broker va chidamli rejimda ishlagan.

Redis

Redis kalit-qiymatli ma'lumotlar tuzilmalari bilan ishlaydigan NoSQL DBMS hisoblanadi

Ba'zan turli xil Python mikroservislarida ma'lum ma'lumotlar tuzilmalarini amalga oshiradigan umumiy ob'ektlardan foydalanishga ehtiyoj bor.

Misol uchun, Redis “telegram_user_id => Navbatdagi faol vazifalar soni” ko‘rinishidagi xeshmapni saqlaydi, bu sizga bir foydalanuvchidan so‘rovlar sonini ma’lum bir qiymatgacha cheklash va shu bilan DoS hujumlarining oldini olish imkonini beradi.

Keling, tasvirni muvaffaqiyatli qayta ishlash jarayonini rasmiylashtiramiz

  1. Foydalanuvchi Telegram botiga rasm yuboradi
  2. "attrai-telegram-bot" Telegram API-dan xabar oladi va uni tahlil qiladi
  3. Tasvirli vazifa "to_estimate" asinxron navbatiga qo'shiladi
  4. Foydalanuvchi rejalashtirilgan baholash vaqti bilan xabar oladi
  5. “attrai-estimator” “to_baholash” qatoridan vazifa oladi, hisob-kitoblarni quvur liniyasi orqali boshqaradi va topshiriqni “baholashdan keyin” navbatiga chiqaradi.
  6. "attrai-telegram-bot" "so'nggi_baho" navbatini tinglab, natijani foydalanuvchiga yuboradi

DevOps

Nihoyat, arxitekturani ko'rib chiqqandan so'ng, siz bir xil darajada qiziqarli qismga - DevOps-ga o'tishingiz mumkin

Docker to'dasi

 

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

Docker to'dasi  — klasterlash tizimi, uning funksionalligi Docker Engine ichida amalga oshiriladi va qutidan tashqarida mavjud.

"Sharm" yordamida bizning klasterimizdagi barcha tugunlarni 2 turga bo'lish mumkin - ishchi va menejer. Birinchi turdagi mashinalarda konteynerlar guruhlari (stoklar) joylashtiriladi, ikkinchi turdagi mashinalar masshtablash, muvozanatlash va saqlash uchun javobgardir. boshqa ajoyib xususiyatlar. Menejerlar ham sukut bo'yicha ishchilardir.

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

Bir rahbar menejer va uchta ishchi bilan klaster

Klasterning minimal mumkin bo'lgan hajmi - 1 tugun; bitta mashina bir vaqtning o'zida etakchi menejer va ishchi sifatida ishlaydi. Loyihaning kattaligi va nosozliklarga chidamlilik uchun minimal talablarga asoslanib, ushbu yondashuvdan foydalanishga qaror qilindi.

Oldinga qarab, shuni aytamanki, iyun oyining o'rtalarida bo'lgan birinchi mahsulot yetkazib berilgandan beri ushbu klaster tashkiloti bilan bog'liq muammolar bo'lmagan (lekin bu bunday tashkilot har qanday o'rta va yirik korxonalarda maqbul ekanligini anglatmaydi) xatolarga chidamlilik talablariga bo'ysunadigan loyihalar).

Docker stack

To'da rejimida u steklarni (docker xizmatlari to'plami) joylashtirish uchun javobgardir. docker stack

U docker-compose konfiguratsiyalarini qo'llab-quvvatlaydi, bu sizga qo'shimcha ravishda joylashtirish parametrlaridan foydalanish imkonini beradi.  

Misol uchun, ushbu parametrlardan foydalangan holda, baholash mikroservislarining har bir namunasi uchun resurslar cheklangan edi (biz N ta misol uchun N yadro ajratamiz, mikroservisning o'zida biz PyTorch tomonidan ishlatiladigan yadrolar sonini bittaga cheklaymiz)

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

Shuni ta'kidlash kerakki, Redis, RabbitMQ va Graylog statistik xizmatlardir va ularni "attrai-estimator" kabi osonlik bilan o'lchash mumkin emas.

Savolni oldindan aytib berish - nega Kubernetes emas?

Ko'rinishidan, Kubernetes-dan kichik va o'rta loyihalarda foydalanish ortiqcha yuk bo'lib tuyuladi; barcha kerakli funksiyalarni Docker Swarm-dan olish mumkin, bu konteyner orkestratori uchun juda qulay va kirish uchun past to'siqga ega.

Infrastruktura

Bularning barchasi VDS-da quyidagi xususiyatlarga ega bo'lgan:

  • Protsessor: 4 yadroli Intel® Xeon® Gold 5120 protsessor @ 2.20 gigagertsli
  • RAM: 8 GB
  • SSD: 160 GB

Mahalliy yuk sinovlaridan so'ng, foydalanuvchilarning jiddiy oqimi bilan ushbu mashina etarli bo'lib tuyuldi.

Ammo, o'rnatilgandan so'ng, men MDHdagi eng mashhur tasvir taxtalaridan biriga havolani joylashtirdim (ha, xuddi shunday), shundan so'ng odamlar qiziqish uyg'otdi va bir necha soat ichida xizmat o'n minglab rasmlarni muvaffaqiyatli qayta ishladi. Shu bilan birga, eng yuqori paytlarda CPU va RAM resurslari hatto yarmi ishlatilmadi.

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi
Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

Yana bir nechta grafikalar

Noyob foydalanuvchilar soni va kunga qarab o'rnatishdan keyin baholash so'rovlari

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

Baholash quvur liniyasi xulosa vaqtini taqsimlash

Neyron tarmoqlarga asoslangan tashqi ko'rinishini baholash uchun xizmat arxitekturasining umumiy ko'rinishi

topilmalar

Xulosa qilib aytishim mumkinki, arxitektura va konteynerlarni orkestrlash yondashuvi o'zini to'liq oqladi - hatto eng yuqori cho'qqilarda ham ishlov berish vaqtida pasayish yoki pasayish kuzatilmadi. 

O'ylaymanki, o'z jarayonida protsessorda neyron tarmoqlarining real vaqt rejimida xulosasidan foydalanadigan kichik va o'rta loyihalar ushbu maqolada tasvirlangan amaliyotlarni muvaffaqiyatli qabul qilishi mumkin.

Men qo'shimcha qilamanki, dastlab maqola uzunroq edi, lekin uzoq vaqt o'qimaslik uchun men ushbu maqoladagi ba'zi fikrlarni o'tkazib yuborishga qaror qildim - kelgusi nashrlarda ularga qaytamiz.

Siz Telegram-da botni qo'yishingiz mumkin - @AttraiBot, u kamida 2020 yilning kuzi oxirigacha ishlaydi. Shuni eslatib o'tamanki, hech qanday foydalanuvchi ma'lumotlari saqlanmaydi - na asl tasvirlar, na baholash quvurining natijalari - qayta ishlanganidan keyin hamma narsa buziladi.

Manba: www.habr.com

a Izoh qo'shish