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:
- Ke koho ʻana i nā maka ma nā kiʻi
- Ka helu o kēlā me kēia kanaka
- Hāʻawi i ka hopena
Hoʻoholo ʻia ka mea mua e nā ikaika o ka pre-trained
Kiʻi hana o ka paipu loiloi
Ka nānā 'ana i nā koi ho'olālā papahana
I ka pōʻai ola
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:
- 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ā
- Hiki i ka hoʻonui ʻia ʻana o ka lawelawe loiloi - e like me ka Bottleneck
- 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.
- ʻO ka wikiwiki (re) deployment o nā lawelawe kikoʻī ʻelua a me ka pūʻulu holoʻokoʻa
- ʻ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.
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:
- 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
- Ke hala i ka kānana mua, mālama ʻia ke kiʻi i ka leo docker
- 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.
- 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":
- 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.
- 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":
- E holo kāua i ke kiʻi ma o ka paipu loiloi:
- Ke hoʻouka nei i ke kiʻi i ka hoʻomanaʻo
- Lawe mākou i ke kiʻi i ka nui i makemake ʻia
- Ke ʻimi nei i nā helehelena a pau (MTCNN)
- 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)
- Hāʻawi i ke kiʻi hope loa
- E kaha kakou i na pahu paa
- Kahakiʻi ʻana i nā helu
- Holoi i kahi kiʻi maʻamau (kumu).
- Ka mālama ʻana i ka hopena mai ka paipu loiloi
- 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)
Ua hāʻule ka koho iā ia, ʻaʻole i ka mea maʻamau
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
Ma keia papahana ua hoohana ia e like me
Ho'ōla
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
- Hoʻouna ka mea hoʻohana i kahi kiʻi i ka Telegram bot
- Loaʻa iā "attrai-telegram-bot" kahi leka mai ka Telegram API a hoʻopau iā ia
- Hoʻohui ʻia ka hana me ke kiʻi i ka queue asynchronous "to_estimate"
- Loaʻa ka mea hoʻohana i kahi leka me ka manawa loiloi i hoʻolālā ʻia
- 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"
- "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
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
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)
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.
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ā
Hoʻokaʻawale manawa hoʻokaʻawale ʻana i ka pipeline inference
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