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

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

нэвтрэх

Сайн уу!

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

Архитектурт тавигдах шаардлагуудын талаар ярилцъя, янз бүрийн бүтцийн диаграммуудыг авч үзье, дууссан архитектурын бүрэлдэхүүн хэсэг тус бүрд дүн шинжилгээ хийж, шийдлийн техникийн хэмжүүрийг үнэлье.

Уншаад үзээрэй!

Асуудал, түүний шийдлийн талаар хэдэн үг хэлье

Гол санаа нь гэрэл зураг дээр үндэслэн хүний ​​сэтгэл татам байдлыг арван онооны системээр үнэлэх явдал юм.

Энэ нийтлэлд бид ашигласан мэдрэлийн сүлжээ болон өгөгдөл бэлтгэх, сургах үйл явцыг хоёуланг нь тайлбарлахаас холдох болно. Гэсэн хэдий ч дараах нийтлэлүүдийн аль нэгэнд бид үнэлгээний шугамыг гүнзгийрүүлэн шинжлэхэд эргэн орох нь гарцаагүй.

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

Сэтгэл татам байдлын үнэлгээний шугам дээр ажиллахдаа даалгаврыг дараахь бүрэлдэхүүн хэсгүүдэд хуваасан.

  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. Даалгаврыг "тооцоолох" дараалалд гаргадаг бөгөөд үүнд бусад зүйлсээс гадна бидний эзлэхүүн дэх зураг руу хүрэх замыг багтаасан болно.
  4. Дээрх алхмуудыг амжилттай гүйцэтгэвэл хэрэглэгч дараалалд байгаа ажлын тоонд үндэслэн тооцоолсон зураг боловсруулах ойролцоогоор хугацаатай мессеж хүлээн авах болно. Хэрэв алдаа гарвал хэрэглэгчдэд ямар алдаа гарсан тухай мэдээлэл бүхий мессеж илгээх замаар тодорхой мэдэгдэх болно.

Мөн энэ микро үйлчилгээ нь селөдерейний ажилчин шиг үнэлгээний шугамаар дамжсан ажлуудад зориулагдсан "тооцооллын дараа" дарааллыг сонсдог.

"тооцоолсны дараа"-аас шинэ даалгавар хүлээн авах үед:

  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)

Грейлог төвлөрсөн бүртгэлийн менежментийн шийдэл юм. Энэ төсөлд зориулалтын дагуу ашигласан.

Сонголт нь ердийнхөөс биш түүнд унасан ELK стек, Python-ээс түүнтэй ажиллахад хялбар байдаг тул. Graylog руу нэвтрэхийн тулд та багцаас GELFTCPHandler-г нэмэхэд л хангалттай саарал өнгөтэй манай python микро үйлчилгээний бусад эх логгер боловсруулагчдад.

Өмнө нь зөвхөн ELK стектэй ажиллаж байсан хүний ​​хувьд би Graylog-тэй ажиллахдаа эерэг туршлага хуримтлуулсан. Сэтгэлээр унадаг цорын ганц зүйл бол Graylog вэб интерфэйсээс Кибана функцүүдийн давуу тал юм.

Rabbit MQ

Rabbit MQ нь AMQP протокол дээр суурилсан мессеж брокер юм.

Энэ төсөлд үүнийг ашигласан хамгийн тогтвортой, цаг хугацаагаар шалгагдсан Celery-ийн брокер, удаан эдэлгээтэй горимд ажилласан.

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

Эцэст нь архитектурыг хянаж үзсэний дараа та ижил сонирхолтой хэсэг болох DevOps руу шилжиж болно

Докер сүрэг

 

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

Докер сүрэг  — кластерын систем, функц нь Docker Engine дотор хэрэгждэг бөгөөд хайрцагнаас гарах боломжтой.

"Сүрэг" ашиглан манай кластерын бүх зангилаа нь ажилчин, менежер гэсэн 2 төрөлд хуваагдана. Эхний төрлийн машинууд дээр савны бүлгүүд (яндангууд) байрладаг, хоёр дахь төрлийн машинууд нь масштаблах, тэнцвэржүүлэх, тохируулах үүрэгтэй. бусад гайхалтай шинж чанарууд. Менежерүүд ч гэсэн үндсэндээ ажилчид байдаг.

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

Нэг удирдагч менежер, гурван ажилтантай кластер

Кластерын боломжит хамгийн бага хэмжээ нь 1 зангилаа бөгөөд нэг машин нь удирдагч менежер, ажилчдын үүргийг нэгэн зэрэг гүйцэтгэх болно. Төслийн хэмжээ, алдааг тэсвэрлэх хамгийн бага шаардлагыг үндэслэн энэ аргыг ашиглахаар шийдсэн.

Урагшаа харахад, XNUMX-р сарын дундуур үйлдвэрлэсэн анхны бүтээгдэхүүн нийлүүлснээс хойш энэ кластерийн байгууллагатай холбоотой ямар ч асуудал гараагүй гэж би хэлэх болно (гэхдээ энэ нь ийм байгууллагыг ямар ч дунд, том хэмжээний хувьд хүлээн зөвшөөрч болно гэсэн үг биш юм. алдааг тэсвэрлэх шаардлагад хамаарах төслүүд).

Docker Stack

Swarm горимд тэрээр стекүүдийг (докер үйлчилгээний багц) байрлуулах үүрэгтэй. докерын стек

Энэ нь 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.20GHz
  • RAM: 8 GB
  • SSD: 160 ГБ

Орон нутгийн ачааллын туршилтын дараа хэрэглэгчдийн ноцтой шилжилт хөдөлгөөнтэй бол энэ машин хангалттай байх шиг санагдсан.

Гэхдээ байршуулсны дараа би ТУХН-ийн хамгийн алдартай зургийн самбаруудын нэгний холбоосыг нийтэлсэн (тийм ээ, мөн адил), үүний дараа хүмүүс сонирхож эхэлсэн бөгөөд хэдхэн цагийн дараа үйлчилгээ хэдэн арван мянган зургийг амжилттай боловсруулжээ. Үүний зэрэгцээ, оргил үед CPU болон RAM нөөцийг хагас ч ашиглаагүй байв.

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

Өөр хэдэн график

Өдрөөс хамааран байршуулснаас хойшхи өвөрмөц хэрэглэгчдийн тоо болон үнэлгээний хүсэлт

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

Үнэлгээний дамжуулах хоолойн дүгнэлтийн хугацааны хуваарилалт

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

үр дүн нь

Дүгнэж хэлэхэд, чингэлэгийг зохион байгуулах архитектур, арга барил нь өөрсдийгөө бүрэн зөвтгөдөг гэж би хэлж чадна - оргил үед ч боловсруулах явцад дусал эсвэл уналт байгаагүй. 

CPU дээр мэдрэлийн сүлжээний бодит цагийн дүгнэлтийг ашигладаг жижиг, дунд хэмжээний төслүүд энэ нийтлэлд дурдсан туршлагыг амжилттай хэрэгжүүлж чадна гэж би бодож байна.

Би өгүүлэл нь эхэндээ илүү урт байсан гэдгийг нэмж хэлье, гэхдээ удаан уншуулахгүйн тулд би энэ нийтлэлийн зарим зүйлийг орхихоор шийдсэн - бид тэдгээрийг дараагийн хэвлэлүүдэд эргэн харах болно.

Та Telegram дээр ботыг нухаж болно - @AttraiBot, энэ нь дор хаяж 2020 оны намар дуустал ажиллах болно. Хэрэглэгчийн мэдээлэл хадгалагдаагүй гэдгийг сануулъя - анхны зураг, үнэлгээний үр дүн ч биш - боловсруулсны дараа бүх зүйлийг нураадаг.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх