Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

asup

Salam!

Dina tulisan ieu kuring bakal ngabagi pangalaman kuring ngawangun arsitektur microservice pikeun proyék anu nganggo jaringan saraf.

Hayu urang ngobrol ngeunaan sarat arsitéktur, tingali rupa-rupa diagram struktural, nganalisis unggal komponén tina arsitéktur rengse, sarta ogé evaluate metrics teknis leyuran.

Senang bacaan!

Sababaraha kecap ngeunaan masalah jeung solusi na

Gagasan utama nyaéta pikeun meunteun daya tarik hiji jalma dina skala sapuluh titik dumasar kana poto.

Dina tulisan ieu urang bakal ngajauhan tina ngajéntrékeun boh jaringan saraf anu dianggo sareng prosés persiapan sareng pelatihan data. Nanging, dina salah sahiji publikasi di handap ieu, urang pasti bakal uih deui pikeun nganalisis pipa penilaian dina tingkat anu jero.

Ayeuna urang bakal ngaliwatan pipa evaluasi di tingkat luhur, sarta baris difokuskeun interaksi microservices dina konteks arsitektur proyék sakabéh. 

Nalika ngerjakeun pipa penilaian daya tarik, tugasna dirobih kana komponén ieu:

  1. Milih rupa dina poto
  2. Peunteun unggal jalma
  3. Jieun hasilna

Anu kahiji direngsekeun ku pasukan anu tos dilatih MTCNN. Pikeun anu kadua, jaringan neural convolutional dilatih dina PyTorch, ngagunakeun ResNet34 - tina kasaimbangan "kualitas / laju inferensi dina CPU"

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Diagram fungsional pipa evaluasi

Analisis sarat arsitéktur proyék

Dina siklus kahirupan ML tahapan proyék gawé dina arsitéktur sarta automation of deployment model anu mindeng diantara paling consuming waktu jeung sumberdaya-consuming.

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Daur hirup hiji proyék ML

Proyék ieu sanés iwal - kaputusan didamel pikeun ngabungkus pipa penilaian kana jasa online, anu peryogi neuleumkeun diri dina arsitéktur. Sarat dasar di handap ieu diidentifikasi:

  1. Panyimpen log terpadu - sadaya jasa kedah nyerat log dina hiji tempat, aranjeunna kedah gampang dianalisis
  2. Kamungkinan skala horizontal tina jasa assessment - salaku Bottleneck paling dipikaresep
  3. Jumlah sumber daya prosesor anu sami kedah dialokasikeun pikeun ngévaluasi unggal gambar supados ngahindarkeun outlier dina distribusi waktos inferensi.
  4. Gancang (ulang) deployment duanana jasa husus sarta tumpukan sakabéhna
  5. Kamampuhan, upami perlu, ngagunakeun objék umum dina jasa anu béda

gawena undagi

Saatos analisa sarat, janten atra yén arsitéktur microservice pas ampir sampurna.

Pikeun ngaleungitkeun nyeri sirah anu teu perlu, Telegram API dipilih salaku frontend.

Kahiji, hayu urang nempo diagram struktural arsitéktur rengse, lajeng ngaléngkah ka pedaran unggal komponén, sarta formalize prosés ngolah gambar suksés.

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Diagram struktural arsitéktur rengse

Hayu urang ngobrol di leuwih jéntré ngeunaan unggal komponén diagram, denoting aranjeunna Tanggung jawab Tunggal dina prosés evaluasi gambar.

Microservice "attrai-telegram-bot"

microservice ieu encapsulates sadaya interaksi jeung API Telegram. Aya 2 skenario utama: damel sareng gambar khusus sareng damel sareng hasil tina pipa penilaian. Hayu urang nempo duanana skenario dina istilah umum.

Nalika nampi pesen khusus nganggo gambar:

  1. Filtrasi dilaksanakeun, diwangun ku pamariksaan ieu:
    • Kasadiaan ukuran gambar optimal
    • Jumlah gambar pamaké geus antrian
  2. Nalika ngalangkungan panyaring awal, gambar disimpen dina volume docker
  3. Tugas dihasilkeun dina antrian "to_estimate", anu ngawengku, diantara hal séjén, jalur ka gambar lokasina di volume urang.
  4. Upami léngkah-léngkah di luhur parantos suksés, pangguna bakal nampi pesen kalayan perkiraan waktos ngolah gambar, anu diitung dumasar kana jumlah tugas dina antrian. Upami aya kasalahan, pangguna bakal dibéjaan sacara eksplisit ku ngirim pesen kalayan inpormasi ngeunaan naon anu salah.

Ogé, microservice ieu, kawas worker seledri, listens kana antrian "after_estimate", nu dimaksudkeun pikeun tugas nu geus ngaliwatan pipa evaluasi.

Nalika nampi tugas anyar tina "after_estimate":

  1. Upami gambarna suksés diolah, kami ngirimkeun hasilna ka pangguna; upami henteu, kami ngabéjaan ngeunaan kasalahan.
  2. Nyoplokkeun gambar anu mangrupa hasil tina pipa evaluasi

Evaluasi microservice "attrai-estimator"

microservice Ieu worker seledri sarta encapsulates sagalana patali pipa evaluasi gambar. Aya ngan hiji algoritma gawé di dieu - hayu urang analisa eta.

Nalika nampi tugas anyar tina "to_estimate":

  1. Hayu urang ngajalankeun gambar ngaliwatan pipa evaluasi:
    1. Ngamuat gambar kana mémori
    2. Urang mawa gambar ka ukuran diperlukeun
    3. Milarian sadaya rupa (MTCNN)
    4. Urang meunteun sadaya rupa (urang mungkus raray anu aya dina léngkah terakhir kana bets sareng inferensi ResNet34)
    5. Jieun gambar ahir
      1. Hayu urang ngagambar kotak wates
      2. Ngagambar ratings
  2. Ngahapus gambar adat (asli).
  3. Nyimpen kaluaran tina pipa evaluasi
  4. Kami nempatkeun tugas dina antrian "after_estimate", anu didangukeun ku microservice "attrai-telegram-bot" anu dibahas di luhur.

Graylog (+ mongoDB + Elasticsearch)

graylog mangrupakeun solusi pikeun manajemén log terpusat. Dina proyék ieu, éta dipaké pikeun tujuan dimaksudkeun na.

Pilihanna tumiba ka anjeunna, sareng sanés dina anu biasa Elk tumpukan, alatan genah gawé bareng ti Python. Sadaya anu anjeun kedah laksanakeun pikeun log in Graylog nyaéta nambihan GELTCPHandler tina bungkusan kulawu ka sesa panangan root logger tina microservice python kami.

Salaku jalma anu saacanna ngan ukur damel sareng tumpukan ELK, kuring ngagaduhan pangalaman positip sadayana nalika damel sareng Graylog. Hiji-hijina hal anu nekenkeun nyaéta kaunggulan dina fitur Kibana dina antarmuka wéb Graylog.

Kelenci MQ

Kelenci MQ mangrupakeun calo pesen dumasar kana protokol AMQP.

Dina proyék ieu dipaké salaku anu paling stabil sareng diuji waktos calo pikeun Seledri sarta digawé dina mode awét.

Redis

Redis nyaéta DBMS NoSQL anu dianggo sareng struktur data nilai-konci

Kadang-kadang aya anu peryogi ngagunakeun objék umum anu nerapkeun struktur data tangtu dina microservices Python béda.

Salaku conto, Redis nyimpen hashmap tina bentuk "telegram_user_id => jumlah tugas aktip dina antrian," nu ngidinan Anjeun pikeun ngawatesan jumlah requests ti hiji pamaké pikeun nilai nu tangtu sarta, ku kituna, nyegah serangan DoS.

Hayu urang formalize prosés ngolah gambar suksés

  1. Pamaké ngirimkeun gambar ka bot Telegram
  2. "attrai-telegram-bot" nampi pesen ti Telegram API sareng ngémutan éta
  3. Tugas sareng gambar ditambahkeun kana antrian asynchronous "to_estimate"
  4. Pangguna nampi pesen kalayan waktos evaluasi anu direncanakeun
  5. "attrai-estimator" nyandak tugas tina antrian "to_estimate", ngajalankeun perkiraan ngaliwatan pipa sareng ngahasilkeun tugas kana antrian "after_estimate".
  6. "attrai-telegram-bot" ngadangukeun antrian "after_estimate", ngirimkeun hasilna ka pangguna

DevOps

Tungtungna, saatos marios arsitéktur, anjeun tiasa ngaléngkah ka bagian anu sami - DevOps

Docker ngagimbung

 

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Docker ngagimbung  - sistem clustering, pungsionalitasna anu dilaksanakeun di jero Docker Engine sarta sadia out of the box.

Ngagunakeun "ngagimbung", sadaya titik dina klaster urang bisa dibagi kana 2 jenis - worker jeung manajer. Dina mesin tipe kahiji, grup wadahna (tumpukan) disebarkeun, mesin tipe kadua tanggung jawab skala, balancing jeung fitur tiis séjén. Gerentes ogé pagawé sacara standar.

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Kluster sareng hiji manajer pamimpin sareng tilu pagawé

Ukuran klaster minimum anu mungkin nyaéta 1 titik; hiji mesin sakaligus bakal bertindak salaku manajer pamimpin sareng padamel. Dumasar kana ukuran proyék sareng sarat minimum pikeun kasabaran kasalahan, éta mutuskeun pikeun ngagunakeun pendekatan ieu.

Ningali payun, kuring bakal nyarios yén saprak pangiriman produksi munggaran, anu aya dina pertengahan Juni, teu aya masalah anu aya hubunganana sareng organisasi kluster ieu (tapi ieu sanés hartosna yén organisasi sapertos kitu tiasa ditampi di mana waé sedeng-ageung. proyék, anu tunduk kana sarat toleransi sesar).

Docker tumpukan

Dina mode ngagimbung, anjeunna tanggung jawab nyebarkeun tumpukan (sét jasa docker) tumpukan docker

Éta ngadukung konfigurasi docker-compose, ngamungkinkeun anjeun ogé ngagunakeun pilihan nyebarkeun.  

Salaku conto, ngagunakeun parameter ieu, sumber daya pikeun tiap instansi microservice evaluasi diwatesan (urang allocate N cores pikeun N instansi, dina microservice sorangan urang ngawatesan jumlah cores dipaké ku PyTorch ka hiji)

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

Penting pikeun dicatet yén Redis, RabbitMQ sareng Graylog mangrupikeun jasa stateful sareng aranjeunna henteu tiasa diskalakeun sagampil "attrai-estimator"

Foreshadowing patarosan - naha henteu Kubernetes?

Sigana yén ngagunakeun Kubernetes dina proyék-proyék leutik sareng sedeng mangrupikeun overhead; sadaya pungsionalitas anu diperyogikeun tiasa didapet tina Docker Swarm, anu ramah-pamaké pikeun orkestra kontainer sareng ogé ngagaduhan halangan anu rendah pikeun asup.

infrastruktur

Sadaya ieu dipasang dina VDS kalayan ciri-ciri ieu:

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

Saatos nguji beban lokal, sigana yén ku panyaluran serius pangguna, mesin ieu bakal cekap.

Tapi, langsung saatos panyebaran, kuring masangkeun tautan ka salah sahiji papan gambar anu pang populerna di CIS (yup, anu sami), saatos éta jalma janten kabetot sareng dina sababaraha jam jasa éta suksés ngolah puluhan rébu gambar. Dina waktos anu sami, dina waktos puncak, sumber daya CPU sareng RAM henteu dianggo satengahna.

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf
Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Sababaraha langkung grafik

Jumlah pamaké unik sarta requests evaluasi saprak deployment, gumantung kana poé

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

Evaluasi pipeline distribusi waktos inferensi

Tinjauan umum ngeunaan arsitéktur jasa pikeun penilaian penampilan dumasar kana jaringan saraf

papanggihan

Pikeun nyimpulkeun, kuring tiasa nyebatkeun yén arsitéktur sareng pendekatan kana orkestrasi wadahna leres-leres leres-leres - bahkan dina waktos puncak henteu aya tetes atanapi sagging dina waktos ngolah. 

Kuring nyangka yén proyék-proyék leutik sareng sedeng anu ngagunakeun inferensi real-time tina jaringan saraf dina CPU dina prosésna tiasa suksés ngadopsi prakték anu dijelaskeun dina tulisan ieu.

Kuring bakal nambahan yén mimitina tulisan éta langkung panjang, tapi supados henteu ngeposkeun bacaan anu panjang, kuring mutuskeun pikeun ngaleungitkeun sababaraha poin dina tulisan ieu - urang bakal uih deui ka aranjeunna dina publikasi anu bakal datang.

Anjeun tiasa nyodok bot dina Telegram - @AttraiBot, éta bakal tiasa dianggo sahenteuna dugi ka ahir usum gugur 2020. Hayu atuh ngingetan yén euweuh data pamaké disimpen - boh gambar aslina, atawa hasil tina pipa evaluasi - sagalana geus dibongkar sanggeus ngolah.

sumber: www.habr.com

Tambahkeun komentar