ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

komo

Alohaʻoe!

Ma kēia ʻatikala e hōʻike wau i koʻu ʻike i ke kūkulu ʻana i kahi hale hana microservice no kahi papahana me ka hoʻohana ʻana i nā neural network.

E kamaʻilio kākou e pili ana i nā koi hoʻolālā, e nānā i nā kiʻi hoʻolālā like ʻole, e nānā i kēlā me kēia ʻāpana o ka hale hoʻolālā i hoʻopau ʻia, a e loiloi pū i nā metric ʻenehana o ka hopena.

Nanea i ka heluhelu ʻana!

He mau hua'ōlelo e pili ana i ka pilikia a me kona hoʻonā

ʻO ka manaʻo nui, ʻo ia ka loiloi ʻana i ka nani o ke kanaka ma kahi pālākiō he ʻumi ma muli o ke kiʻi.

Ma kēia ʻatikala e neʻe mākou mai ka wehewehe ʻana i nā ʻupena neural i hoʻohana ʻia a me ke kaʻina o ka hoʻomākaukau ʻana a me ke aʻo ʻana. Eia nō naʻe, ma kekahi o kēia mau puke, e hoʻi maoli mākou i ka nānā ʻana i ka pipeline loiloi ma kahi pae hohonu.

I kēia manawa e hele mākou i ka pipeline loiloi ma ka pae kiʻekiʻe, a e kālele ana i ka pilina o nā microservices i ka pōʻaiapili o ka hoʻolālā papahana holoʻokoʻa. 

I ka hana ʻana i ka pipeline loiloi hoihoi, ua hoʻokaʻawale ʻia ka hana i nā ʻāpana penei:

  1. Ke koho ʻana i nā maka ma nā kiʻi
  2. Ka helu o kēlā me kēia kanaka
  3. Hāʻawi i ka hopena

Hoʻoholo ʻia ka mea mua e nā ikaika o ka pre-trained MTCNN. No ka lua, ua aʻo ʻia kahi pūnaewele neural convolutional ma PyTorch, me ka hoʻohana ʻana ResNet34 - mai ke kaulike "kūpono / wikiwiki o ka inference ma ka CPU"

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

Kiʻi hana o ka paipu loiloi

Ka nānā 'ana i nā koi ho'olālā papahana

I ka pōʻai ola ML ʻO nā pae papahana o ka hana ma ka hoʻolālā a me ka automation o ka hoʻolaha ʻana i nā kumu hoʻohālike i waena o nā mea ʻoi aku ka nui o ka manawa a me ka waiwai.

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

Po'ai ola o kahi papahana ML

ʻAʻole ʻokoʻa kēia pāhana - ua hoʻoholo ʻia e hoʻopili i ka pipeline loiloi i loko o kahi lawelawe pūnaewele, kahi e pono ai e hoʻokomo iā mākou iho i ka hoʻolālā. Ua ʻike ʻia nā pono kumu:

  1. Hoʻopaʻa lāʻau hui pū - pono nā lawelawe āpau e kākau i nā lāʻau ma kahi hoʻokahi, pono lākou e nānā
  2. Hiki i ka hoʻonui ʻia ʻana o ka lawelawe loiloi - e like me ka Bottleneck
  3. Pono e hoʻokaʻawale ʻia ka nui like o nā kumuwaiwai no ka loiloi ʻana i kēlā me kēia kiʻi i mea e pale aku ai i nā outliers i ka māhele ʻana o ka manawa no ka inference.
  4. ʻO ka wikiwiki (re) deployment o nā lawelawe kikoʻī ʻelua a me ka pūʻulu holoʻokoʻa
  5. ʻO ka hiki, inā pono, e hoʻohana i nā mea maʻamau i nā lawelawe like ʻole

kuhikuhipuʻuone

Ma hope o ka nānā ʻana i nā koi, ua ʻike ʻia ua pili pono ka hale hana microservice.

I mea e hoʻopau ai i nā poʻo poʻo pono ʻole, ua koho ʻia ka Telegram API ma mua.

ʻO ka mea mua, e nānā kākou i ke kiʻikuhi hoʻolālā o ka hale hoʻolālā i hoʻopau ʻia, a laila neʻe i ka wehewehe ʻana o kēlā me kēia ʻāpana, a hoʻomaʻamaʻa hoʻi i ke kaʻina o ka hoʻoili kiʻi kūleʻa.

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

Ke kiʻi hoʻolālā o ka hale hoʻolālā i hoʻopau ʻia

E kamaʻilio nui kākou e pili ana i kēlā me kēia ʻāpana o ke kiʻikuhi, e hōʻike ana iā lākou ʻO ke kuleana hoʻokahi i ke kaʻina o ka loiloi kiʻi.

Microservice "attrai-telegram-bot"

Hoʻopili kēia microservice i nā pilina āpau me ka Telegram API. Aia 2 mau hiʻohiʻona nui: hana me kahi kiʻi maʻamau a hana pū me ka hopena o kahi pipeline loiloi. E nānā kākou i nā hiʻohiʻona ʻelua ma nā ʻōlelo maʻamau.

I ka loaʻa ʻana o kahi memo maʻamau me kahi kiʻi:

  1. Hana ʻia ka kānana, ʻo ia hoʻi nā loiloi penei:
    • Loaʻa i ka nui kiʻi kūpono
    • Ka helu o nā kiʻi mea hoʻohana i ka pila
  2. Ke hala i ka kānana mua, mālama ʻia ke kiʻi i ka leo docker
  3. Hoʻokumu ʻia kahi hana ma ka pila "to_estimate", e komo pū ana, ma waena o nā mea ʻē aʻe, ke ala i ke kiʻi i loko o kā mākou leo.
  4. Inā hoʻopau maikaʻi ʻia nā ʻanuʻu i luna, e loaʻa ka mea hoʻohana i kahi leka me ka manawa hoʻoili kiʻi kokoke, i helu ʻia ma muli o ka helu o nā hana i ka pila. Inā loaʻa kahi hewa, e hoʻomaopopo maopopo ʻia ka mea hoʻohana ma ka hoʻouna ʻana i kahi leka me ka ʻike e pili ana i ka mea i hewa.

Eia kekahi, ʻo kēia microservice, e like me ka mea hana celery, e hoʻolohe i ka queue "after_estimate", i manaʻo ʻia no nā hana i hala i ka pipeline loiloi.

I ka loaʻa ʻana o kahi hana hou mai "after_estimate":

  1. Inā hoʻokō pono ʻia ke kiʻi, hoʻouna mākou i ka hopena i ka mea hoʻohana; inā ʻaʻole, haʻi mākou e pili ana i kahi hewa.
  2. Ke wehe nei i ke kiʻi ka hopena o ka paipu loiloi

lawelawe microservice "attrai-estimator"

He kanaka celery kēia microservice a hoʻopili i nā mea āpau e pili ana i ka pipeline loiloi kiʻi. Hoʻokahi wale nō algorithm hana ma ʻaneʻi - e nānā kākou.

I ka loaʻa ʻana o kahi hana hou mai "to_estimate":

  1. E holo kāua i ke kiʻi ma o ka paipu loiloi:
    1. Ke hoʻouka nei i ke kiʻi i ka hoʻomanaʻo
    2. Lawe mākou i ke kiʻi i ka nui i makemake ʻia
    3. Ke ʻimi nei i nā helehelena a pau (MTCNN)
    4. Loiloi mākou i nā maka a pau (ʻāwili mākou i nā maka i loaʻa i ka ʻanuʻu hope i loko o kahi pūʻulu a hoʻohālikelike ResNet34)
    5. Hāʻawi i ke kiʻi hope loa
      1. E kaha kakou i na pahu paa
      2. Kahakiʻi ʻana i nā helu
  2. Holoi i kahi kiʻi maʻamau (kumu).
  3. Ka mālama ʻana i ka hopena mai ka paipu loiloi
  4. Hoʻokomo mākou i ka hana ma ka "after_estimate" queue, i hoʻolohe ʻia e ka microservice "attrai-telegram-bot" i kūkākūkā ʻia ma luna.

Graylog (+ mongoDB + Elasticsearch)

ʻO Graylog he hoʻonā no ka hoʻokele log centralized. I loko o kēia papahana, ua hoʻohana ʻia no kāna kumu i manaʻo ʻia.

Ua hāʻule ka koho iā ia, ʻaʻole i ka mea maʻamau ELK stack, ma muli o ka maʻalahi o ka hana pū me ia mai Python. ʻO nā mea a pau āu e hana ai e hoʻopaʻa inoa iā Graylog e hoʻohui i ka GELFTCPHandler mai ka pūʻolo hina hina i nā mea ʻē aʻe o nā mea mālama moʻolelo kumu o kā mākou microservice python.

Ma keʻano he mea i hana mua me ka ELK stack, loaʻa iaʻu kahi ʻike maikaʻi holoʻokoʻa i ka wā e hana pū ana me Graylog. ʻO ka mea hoʻohaʻahaʻa wale nō, ʻo ia ke kiʻekiʻe o nā hiʻohiʻona Kibana ma luna o ka pūnaewele pūnaewele Graylog.

ʻO RabbitMQ

ʻO RabbitMQ he mea kūʻai leka ma muli o ka protocol AMQP.

Ma keia papahana ua hoohana ia e like me ʻo ka mea paʻa loa a i hoʻāʻo ʻia i ka manawa mea kūʻai aku no Celery a hana i ke ʻano lōʻihi.

Ho'ōla

Ho'ōla he DBMS NoSQL e hana pū ana me nā hale ʻikepili waiwai nui

I kekahi manawa pono e hoʻohana i nā mea maʻamau e hoʻokō i kekahi mau ʻikepili i nā microservices Python like ʻole.

No ka laʻana, mālama ʻo Redis i kahi hashmap o ke ʻano "telegram_user_id => helu o nā hana ikaika i ka pila," e hiki ai iā ʻoe ke kaupalena i ka helu o nā noi mai kahi mea hoʻohana i kekahi waiwai a, no laila, e pale aku i nā hoʻouka DoS.

E hoʻokumu i ke kaʻina hana o ka hoʻoili kiʻi kūleʻa

  1. Hoʻouna ka mea hoʻohana i kahi kiʻi i ka Telegram bot
  2. Loaʻa iā "attrai-telegram-bot" kahi leka mai ka Telegram API a hoʻopau iā ia
  3. Hoʻohui ʻia ka hana me ke kiʻi i ka queue asynchronous "to_estimate"
  4. Loaʻa ka mea hoʻohana i kahi leka me ka manawa loiloi i hoʻolālā ʻia
  5. Lawe ʻo "attrai-estimator" i kahi hana mai ka "to_estimate" queue, holo i nā kuhi ma o ka pipeline a hoʻopuka i ka hana i ka pila "after_estimate"
  6. "attrai-telegram-bot" e hoʻolohe ana i ka pila "after_estimate", hoʻouna i ka hopena i ka mea hoʻohana

Nā DevOps

ʻO ka mea hope loa, ma hope o ka nānā ʻana i ka hale hana, hiki iā ʻoe ke neʻe i ka ʻāpana like like - DevOps

Pahu Docker

 

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

Pahu Docker  - kahi ʻōnaehana clustering, hoʻokō ʻia ka hana i loko o ka Docker Engine a loaʻa i waho o ka pahu.

Ke hoʻohana nei i kahi "hui", hiki ke hoʻokaʻawale ʻia nā node āpau i kā mākou hui i 2 ʻano - mea hana a me ka luna. Ma nā mīkini o ka ʻano mua, ua hoʻonohonoho ʻia nā pūʻulu o nā ipu (stacks), nā mīkini o ka ʻano ʻelua ke kuleana no ka scaling, ke kaulike a nā hiʻohiʻona maikaʻi ʻē aʻe. ʻO nā luna hoʻi he poʻe limahana ma ka paʻamau.

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

Cluster me hoʻokahi luna alakaʻi a ʻekolu limahana

ʻO ka nui o ka puʻupuʻu liʻiliʻi he 1 node; e hana like ka mīkini hoʻokahi ma ke ʻano he alakaʻi alakaʻi a me kahi limahana. Ma muli o ka nui o ka papahana a me nā koi liʻiliʻi no ka hoʻomanawanui hewa, ua hoʻoholo ʻia e hoʻohana i kēia ala.

Ke nānā aku nei au i mua, e ʻōlelo wau mai ka hoʻopuka mua ʻana, i ka waena o Iune, ʻaʻohe pilikia e pili ana i kēia hui pūʻulu (akā, ʻaʻole ia he manaʻo e ʻae ʻia kēlā hui i kēlā me kēia ʻano nui. nā papahana, e pili ana i nā koi hoʻomanawanui hewa).

Hoʻopaʻa Docker

Ma ke ʻano swarm, ʻo ia ke kuleana no ka hoʻokaʻawale ʻana i nā stacks (sets of docker services) hoʻopaʻa pahu

Kākoʻo ia i nā configs docker-compose, e ʻae iā ʻoe e hoʻohana hou i nā ʻāpana hoʻonohonoho.  

No ka laʻana, me ka hoʻohana ʻana i kēia mau ʻāpana, ua kaupalena ʻia nā kumuwaiwai no kēlā me kēia o nā manawa microservice loiloi (hāʻawi mākou i nā cores N no nā manawa N, ma ka microservice pono mākou e kaupalena i ka helu o nā cores i hoʻohana ʻia e PyTorch i hoʻokahi)

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

He mea nui e hoʻomaopopo he mau lawelawe kūlana ʻo Redis, RabbitMQ a me Graylog a ʻaʻole hiki ke hoʻonui ʻia e like me ka "attrai-estimator"

Ke kuhi nei i ka nīnau - no ke aha ʻaʻole ʻo Kubernetes?

Me he mea lā ʻo ka hoʻohana ʻana i nā Kubernetes i nā papahana liʻiliʻi a me ka liʻiliʻi he mea ma luna; hiki ke loaʻa nā hana pono āpau mai Docker Swarm, kahi mea hoʻohana maʻalahi no ka mea hoʻokani pahu pahu a he haʻahaʻa haʻahaʻa hoʻi i ke komo ʻana.

Kāpena

Ua kau ʻia kēia mau mea āpau ma VDS me kēia mau hiʻohiʻona:

  • PPU: 4 kumu Intel® Xeon® Gula 5120 CPU @ 2.20GHz
  • Hipa kāne: 8 GB
  • SSD: 160GB

Ma hope o ka hoʻāʻo ʻana o ka ukana kūloko, me he mea lā me ka nui o nā mea hoʻohana, ua lawa kēia mīkini.

Akā, ma hope koke o ka hoʻolaha ʻana, ua kau wau i kahi loulou i kekahi o nā kiʻi kiʻi kaulana loa i ka CIS (yup, kēlā mea hoʻokahi), ma hope o ka hoihoi ʻana o nā kānaka a i loko o kekahi mau hola ua hoʻokō pono ka lawelawe i nā ʻumi tausani o nā kiʻi. I ka manawa like, i nā manawa kiʻekiʻe, ʻaʻole i hoʻohana ʻia nā kumuwaiwai CPU a me RAM.

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural
ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

Kekahi mau kiʻi kiʻi

Ka helu o nā mea hoʻohana kūʻokoʻa a me nā noi loiloi mai ka hoʻolaha ʻana, ma muli o ka lā

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

Hoʻokaʻawale manawa hoʻokaʻawale ʻana i ka pipeline inference

ʻO ka ʻike nui o ka hoʻolālā lawelawe no ka loiloi ʻana i nā hiʻohiʻona ma muli o nā pūnaewele neural

haʻina

I ka hōʻuluʻulu ʻana, hiki iaʻu ke ʻōlelo i ka hoʻolālā ʻana a me ka hoʻokokoke ʻana i ka orchestration o nā ipu i hōʻoia piha iā lākou iho - ʻoiai i nā manawa kiʻekiʻe ʻaʻohe hāʻule a i ʻole ke kau ʻana i ka manawa hana. 

Manaʻo wau e hiki i nā papahana liʻiliʻi a me ka liʻiliʻi ke hoʻohana i ka inference manawa maoli o nā neural network ma ka CPU i kā lākou kaʻina hana hiki ke hoʻokō i nā hana i wehewehe ʻia ma kēia ʻatikala.

E hoʻohui au i ka wā mua ʻoi aku ka lōʻihi o ka ʻatikala, akā i ʻole e kau i kahi heluhelu lōʻihi, ua hoʻoholo wau e haʻalele i kekahi mau wahi i kēia ʻatikala - e hoʻi mākou iā lākou i nā puke e hiki mai ana.

Hiki iā ʻoe ke ʻoki i ka bot ma Telegram - @AttraiBot, e hana ia ma ka liʻiliʻi a hiki i ka hopena o ka hāʻule 2020. E hoʻomanaʻo wau iā ʻoe ʻaʻole mālama ʻia ka ʻikepili mea hoʻohana - ʻaʻole nā ​​kiʻi kumu, ʻaʻole hoʻi nā hopena o ka pipeline loiloi - hoʻopau ʻia nā mea a pau ma hope o ka hana ʻana.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka