Sveiki visiem! Esmu CV izstrÄdÄtÄjs uzÅÄmumÄ CROC. Jau 3 gadus Ä«stenojam projektus CV jomÄ. Å ajÄ laikÄ mÄs darÄ«jÄm daudzas lietas, piemÄram: uzraudzÄ«jÄm autovadÄ«tÄjus, lai viÅi braukÅ”anas laikÄ nedzertu, nesmÄÄ·Ätu, nerunÄtu pa telefonu, neskatÄ«tos uz ceļu, nevis uz sapÅiem vai mÄkoÅiem. ; MÄs reÄ£istrÄjÄm cilvÄkus, kuri brauc pa tÄm paredzÄtajÄm joslÄm un aizÅem vairÄkas stÄvvietas; nodroÅ”inÄja, ka strÄdnieki valkÄ Ä·iveres, cimdus utt.; identificÄja darbinieku, kurÅ” vÄlas iekļūt objektÄ; SaskaitÄ«jÄm visu, ko varÄjÄm.
PriekÅ” kam es to visu daru?
ÄŖstenojot projektus, mÄs saskaramies ar izciļÅiem, daudz izciļÅiem, dažÄm problÄmÄm, ar kurÄm jÅ«s vai nu esat pazÄ«stami, vai arÄ« iepazÄ«sities nÄkotnÄ.
SimulÄsim situÄciju
IedomÄsimies, ka esam iekÄrtojuÅ”ies darbÄ jaunÄ uzÅÄmumÄ āNā, kura darbÄ«ba ir saistÄ«ta ar ML. MÄs strÄdÄjam pie ML (DL, CV) projekta, pÄc tam kaut kÄdu iemeslu dÄļ pÄrslÄdzamies uz citu darbu, parasti paÅemam pÄrtraukumu un atgriežamies pie sava vai kÄda cita neirona.
PienÄk patiesÄ«bas brÄ«dis, kaut kÄ jÄatceras, kur apstÄjies, kÄdus hiperparametrus mÄÄ£inÄjusi un, galvenais, pie kÄdiem rezultÄtiem tie noveda. Var bÅ«t daudz iespÄju, kas glabÄja informÄciju par visiem palaiÅ”anas gadÄ«jumiem: galvÄ, konfigurÄcijÄs, piezÄ«mju blokÄ, darba vidÄ mÄkonÄ«. Man gadÄ«jÄs redzÄt opciju, kad hiperparametri tika saglabÄti kÄ komentÄtas rindiÅas kodÄ, kopumÄ tas ir izdomÄjums. Tagad iedomÄjieties, ka atgriezÄties nevis pie sava projekta, bet gan pie tÄdas personas projekta, kura pameta uzÅÄmumu, un jÅ«s mantojÄt kodu un modeli ar nosaukumu model_1.pb. Lai pabeigtu attÄlu un nodotu visas sÄpes, iedomÄsimies, ka esat arÄ« iesÄcÄjs speciÄlists.
Uz priekÅ”u. Lai palaistu kodu, mums un visiem, kas ar to strÄdÄs, ir jÄizveido vide. Bieži gadÄs, ka kÄdu iemeslu dÄļ viÅi nav atstÄjuÅ”i viÅu kÄ mÅ«su mantojumu. Tas var kļūt arÄ« par nenozÄ«mÄ«gu uzdevumu. JÅ«s nevÄlaties tÄrÄt laiku Å”im solim, vai ne?
ApmÄcam modeli (piemÄram, auto detektoru). MÄs esam nonÄkuÅ”i lÄ«dz vietai, kur tas kļūst ļoti labs ā ir pienÄcis laiks saglabÄt rezultÄtu. Sauksim to par car_detection_v1.pb. Tad apmÄcÄm vÄl vienu - car_detection_v2.pb. PÄc kÄda laika mÅ«su kolÄÄ£i vai mÄs paÅ”i mÄcÄm arvien vairÄk, izmantojot dažÄdas arhitektÅ«ras. RezultÄtÄ veidojas artefaktu gÅ«zma, par kuriem informÄcija ir rÅ«pÄ«gi jÄsavÄc (bet mÄs to darÄ«sim vÄlÄk, jo Å”obrÄ«d mums ir vairÄk prioritÄru lietu).
Labi, tagad viss ir beidzies! Mums ir modelis! Vai mÄs varam sÄkt apmÄcÄ«t nÄkamo modeli, izstrÄdÄt arhitektÅ«ru, lai atrisinÄtu jaunu problÄmu, vai arÄ« mÄs varam iedzert tÄju? Un kurÅ” izvietos?
ProblÄmu identificÄÅ”ana
Darbs pie projekta vai produkta ir daudzu cilvÄku darbs. Un ar laiku cilvÄki aizbrauc un nÄk, projektu ir vairÄk, un paÅ”i projekti kļūst sarežģītÄki. TÄ vai citÄdi situÄcijas no iepriekÅ” aprakstÄ«tÄ cikla (un ne tikai) noteiktÄs kombinÄcijÄs notiks no iterÄcijas uz iterÄciju. Tas viss rada lieku laiku, apjukumu, nervus, iespÄjams, klientu neapmierinÄtÄ«bu un galu galÄ naudas zaudÄÅ”anu. Lai gan mÄs visi parasti sekojam vienam un tam paÅ”am vecajam grÄbeklim, es uzskatu, ka neviens nevÄlas Å”os mirkļus izdzÄ«vot atkal un atkal.
TÄtad esam izgÄjuÅ”i vienu attÄ«stÄ«bas ciklu un redzam, ka ir problÄmas, kas jÄrisina. Lai to izdarÄ«tu, jums ir nepiecieÅ”ams:
Ärti uzglabÄt darba rezultÄtus;
vienkÄrÅ”ot jaunu darbinieku iesaistÄ«Å”anas procesu;
vienkÄrÅ”ot izstrÄdes vides izvietoÅ”anas procesu;
konfigurÄt modeļa versiju veidoÅ”anas procesu;
ir Ärts modeļu apstiprinÄÅ”anas veids;
atrast paraugvalsts pÄrvaldÄ«bas rÄ«ku;
atrast veidu, kÄ modeļus piegÄdÄt ražoÅ”anÄ.
AcÄ«mredzot ir jÄizdomÄ darbplÅ«sma, kas ļautu viegli un Ärti pÄrvaldÄ«t Å”o dzÄ«ves ciklu? Å o praksi sauc par MLOps
MLOps jeb DevOps maŔīnmÄcÄ«bai ļauj datu zinÄtnes un IT komandÄm sadarboties un palielinÄt modeļu izstrÄdes un izvietoÅ”anas tempu, izmantojot maŔīnmÄcÄ«Å”anÄs modeļu uzraudzÄ«bu, validÄciju un pÄrvaldÄ«bu.
JÅ«s varat lasÄ«tKo par to visu domÄ Google puiÅ”i? No raksta ir skaidrs, ka MLOps ir diezgan apjomÄ«ga lieta.
TÄlÄk savÄ rakstÄ es aprakstÄ«Å”u tikai daļu no procesa. IevieÅ”anai izmantoÅ”u MLflow rÄ«ku, jo... Å is ir atvÄrtÄ pirmkoda projekts, savienojuma izveidei ir nepiecieÅ”ams neliels koda daudzums un ir integrÄcija ar populÄriem ml ietvariem. Varat meklÄt internetÄ citus rÄ«kus, piemÄram, Kubeflow, SageMaker, Trains utt., un, iespÄjams, atrast to, kas labÄk atbilst jÅ«su vajadzÄ«bÄm.
MLOps āveidoÅ”anaā, izmantojot MLFlow rÄ«ka izmantoÅ”anas piemÄru
MLFlow ir atvÄrtÄ koda platforma ml modeļu dzÄ«ves cikla pÄrvaldÄ«bai (https://mlflow.org/).
MLflow ietver Äetrus komponentus:
MLflow Tracking ā aptver jautÄjumus par rezultÄtu ierakstÄ«Å”anu un parametriem, kas noveda pie Ŕī rezultÄta;
MLflow Project - ļauj iepakot kodu un reproducÄt to uz jebkuras platformas;
MLflow modeļi - atbild par modeļu izvietoÅ”anu ražoÅ”anÄ;
MLflow reÄ£istrs - ļauj uzglabÄt modeļus un pÄrvaldÄ«t to stÄvokli centralizÄtÄ repozitorijÄ.
MLflow darbojas divÄs entÄ«tijÄs:
palaiÅ”ana ir pilns apmÄcÄ«bas, parametru un metrikas cikls, pÄc kura mÄs vÄlamies reÄ£istrÄties;
Eksperiments ir ātÄmaā, kas darbojas kopÄ.
Visas piemÄra darbÄ«bas ir ieviestas operÄtÄjsistÄmÄ Ubuntu 18.04.
1. Izvietojiet serveri
Lai mÄs varÄtu Ärti pÄrvaldÄ«t savu projektu un saÅemt visu nepiecieÅ”amo informÄciju, mÄs izvietosim serveri. MLflow izsekoÅ”anas serverim ir divas galvenÄs sastÄvdaļas:
backend veikals ā atbild par reÄ£istrÄto modeļu informÄcijas glabÄÅ”anu (atbalsta 4 DBVS: mysql, mssql, sqlite un postgresql);
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
restartÄjiet pakalpojumu
$ sudo systemctl restart sshd
KÄ aizmugures veikals Å emsim postgresql.
$ sudo apt update
$ sudo apt-get install -y postgresql postgresql-contrib postgresql-server-dev-all
$ sudo apt install gcc
$ pip install psycopg2
$ sudo -u postgres -i
# Create new user: mlflow_user
[postgres@user_name~]$ createuser --interactive -P
Enter name of role to add: mlflow_user
Enter password for new role: mlflow
Enter it again: mlflow
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
# Create database mlflow_bd owned by mlflow_user
$ createdb -O mlflow_user mlflow_db
Lai startÄtu serveri, jÄinstalÄ Å”Ädas python pakotnes (iesaku izveidot atseviŔķu virtuÄlo vidi):
Lai mÅ«su apmÄcÄ«bas rezultÄti nepazustu, nÄkamÄs izstrÄdÄtÄju paaudzes saprastu, kas notiek, un vecÄki biedri un jÅ«s varÄtu mierÄ«gi analizÄt mÄcÄ«bu procesu, mums ir jÄpievieno izsekoÅ”ana. IzsekoÅ”ana nozÄ«mÄ parametru, metrikas, artefaktu un jebkuras papildu informÄcijas par apmÄcÄ«bas sÄkumu saglabÄÅ”anu serverÄ«.
PiemÄram, es izveidoju mazu projekts vietnÄ github uz Keras, lai segmentÄtu visu, kas ir iekÅ”Ä COCO datu kopa. Lai pievienotu izsekoÅ”anu, es izveidoju failu mlflow_training.py.
Å eit ir rindas, kurÄs notiek visinteresantÄkÄs lietas:
def run(self, epochs, lr, experiment_name):
# getting the id of the experiment, creating an experiment in its absence
remote_experiment_id = self.remote_server.get_experiment_id(name=experiment_name)
# creating a "run" and getting its id
remote_run_id = self.remote_server.get_run_id(remote_experiment_id)
# indicate that we want to save the results on a remote server
mlflow.set_tracking_uri(self.tracking_uri)
mlflow.set_experiment(experiment_name)
with mlflow.start_run(run_id=remote_run_id, nested=False):
mlflow.keras.autolog()
self.train_pipeline.train(lr=lr, epochs=epochs)
try:
self.log_tags_and_params(remote_run_id)
except mlflow.exceptions.RestException as e:
print(e)
Å eit self.remote_server ir neliels mlflow.tracking metožu iesaiÅojums. MlflowClient (izgatavoju ÄrtÄ«bas labad), ar kura palÄ«dzÄ«bu izveidoju eksperimentu un palaistu to serverÄ«. TÄlÄk es norÄdu, kur palaiÅ”anas rezultÄti ir jÄapvieno (mlflow.set_tracking_uri(self.tracking_uri)). Es iespÄjoju automÄtisko reÄ£istrÄÅ”anu mlflow.keras.autolog(). PaÅ”laik MLflow Tracking atbalsta automÄtisku reÄ£istrÄÅ”anu TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Ja neesat atradis savu sistÄmu vai bibliotÄku, vienmÄr varat skaidri reÄ£istrÄties. SÄkam treniÅus. ReÄ£istrÄjiet tagus un ievades parametrus attÄlajÄ serverÄ«.
PÄris rindiÅas, un jÅ«s, tÄpat kÄ visi pÄrÄjie, varÄsit piekļūt informÄcijai par visiem palaiÅ”anas gadÄ«jumiem. ForÅ”i?
3. IzstrÄdÄjam projektu
Tagad atvieglosim projekta uzsÄkÅ”anu. Lai to izdarÄ«tu, pievienojiet MLproject un conda.yaml failu projekta saknei.
MLprojekts
Varat izmantot docker kÄ savu izpildlaika vidi. PlaÅ”Äku informÄciju skatiet Å”eit dokumentÄcija.
4. SÄksim trenÄties
MÄs klonÄjam projektu un dodamies uz projekta direktoriju:
git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/
Lai palaistu, ir jÄinstalÄ bibliotÄkas
pip install mlflow
pip install pysftp
Jo piemÄrÄ es izmantoju conda_env, Anaconda ir jÄinstalÄ datorÄ (bet to var apiet, pats instalÄjot visas nepiecieÅ”amÄs pakotnes un spÄlÄjoties ar palaiÅ”anas parametriem).
Visas sagatavoÅ”anÄs darbÄ«bas ir pabeigtas, un mÄs varam sÄkt apmÄcÄ«bu. No projekta saknes:
$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .
PÄc komandas ievadÄ«Å”anas automÄtiski tiks izveidota conda vide un sÄksies apmÄcÄ«ba.
IepriekÅ” minÄtajÄ piemÄrÄ es nokÄrtoju apmÄcÄ«bas periodu skaitu, kategorijas, kurÄs mÄs vÄlamies segmentÄt (jÅ«s varat redzÄt pilnu sarakstu Å”eit) un mÅ«su attÄlÄ servera adrese.
Pilns iespÄjamo parametru saraksts ir atrodams MLproject failÄ.
5. NovÄrtÄt mÄcÄ«bu rezultÄtus
PÄc apmÄcÄ«bas pabeigÅ”anas mÄs varam pÄrlÅ«kprogrammÄ doties uz mÅ«su servera adresi http://server_host:server_port
Å eit mÄs redzam visu eksperimentu sarakstu (augÅ”ÄjÄ kreisajÄ pusÄ), kÄ arÄ« informÄciju par izpildÄm (vidÅ«). MÄs varam skatÄ«t detalizÄtÄku informÄciju (parametrus, metriku, artefaktus un papildu informÄciju) par katru palaiÅ”anu.
Katram rÄdÄ«tÄjam mÄs varam novÄrot izmaiÅu vÄsturi
Tie. Å obrÄ«d rezultÄtus varam analizÄt āmanuÄlÄā režīmÄ, kÄ arÄ« varat iestatÄ«t automÄtisku validÄciju, izmantojot MLflow API.
6. ReÄ£istrÄjiet modeli
PÄc tam, kad esam analizÄjuÅ”i savu modeli un nolÄmuÅ”i, ka tas ir gatavs kaujai, mÄs turpinÄm to reÄ£istrÄt, Å”im nolÅ«kam mÄs atlasÄm vajadzÄ«go palaiÅ”anu (kÄ parÄdÄ«ts iepriekÅ”ÄjÄ punktÄ) un dodamies uz leju.
PÄc tam, kad esam pieŔķīruÅ”i modelim nosaukumu, tam ir versija. Ja saglabÄjat citu modeli ar tÄdu paÅ”u nosaukumu, versija tiks automÄtiski jauninÄta.
Katram modelim mÄs varam pievienot aprakstu un atlasÄ«t vienu no trim stÄvokļiem (IestudÄjums, RažoÅ”ana, ArhivÄts); pÄc tam, izmantojot API, mÄs varam piekļūt Å”iem stÄvokļiem, kas kopÄ ar versiju veidoÅ”anu nodroÅ”ina papildu elastÄ«bu.
Mums ir arī viegla piekļuve visiem modeļiem
un to versijas
TÄpat kÄ iepriekÅ”ÄjÄ rindkopÄ, visas darbÄ«bas var veikt, izmantojot API.
7. Izvietojiet modeli
Å ajÄ posmÄ mums jau ir apmÄcÄ«ts (keras) modelis. PiemÄrs, kÄ to var izmantot:
Å eit self.registry atkal ir neliels iesaiÅojums virs mlflow.tracking.MlflowClient ÄrtÄ«bai. Lieta tÄda, ka es piekļūstu attÄlajam serverim un meklÄju tur modeli ar norÄdÄ«to nosaukumu un jaunÄko ražoÅ”anas versiju. PÄc tam es lejupielÄdÄju artefaktu lokÄli mapÄ ./model un izveido modeli no Ŕī direktorija mlflow.keras.load_model(local_path). Tagad mÄs varam izmantot mÅ«su modeli. CV (ML) izstrÄdÄtÄji var viegli uzlabot modeli un publicÄt jaunas versijas.
NoslÄgumÄ
Es prezentÄju sistÄmu, kas ļauj:
centralizÄti glabÄ informÄciju par ML modeļiem, treniÅu gaitu un rezultÄtiem;
Ätri izvietot izstrÄdes vidi;
uzraudzÄ«t un analizÄt darba gaitu pie modeļiem;
ir Ärti versÄt un pÄrvaldÄ«t modeļu stÄvokli;
Iegūtos modeļus ir viegli izvietot.
Å is piemÄrs ir rotaļlieta un kalpo kÄ sÄkumpunkts savas sistÄmas izveidei, kas var ietvert rezultÄtu novÄrtÄÅ”anas un modeļu reÄ£istrÄÅ”anas automatizÄciju (attiecÄ«gi 5. un 6. punkts), vai arÄ« pievienosiet datu kopu versijas, vai varbÅ«t kaut ko citu? Es centos uzsvÄrt, ka jums ir nepiecieÅ”ams MLOps kopumÄ, MLflow ir tikai lÄ«dzeklis mÄrÄ·a sasniegÅ”anai.
Uzrakstiet, ar kÄdÄm problÄmÄm saskÄrÄties, kuras es neparÄdÄ«ju?
Ko jÅ«s pievienotu sistÄmai, lai tÄ atbilstu jÅ«su vajadzÄ«bÄm?
KÄdus rÄ«kus un pieejas izmantojat, lai atrisinÄtu visas problÄmas vai daļu no tÄm?
MÅ«su uzÅÄmumÄ periodiski notiek dažÄdi pasÄkumi IT speciÄlistiem, piemÄram: 8. jÅ«lijÄ 19:00 pÄc Maskavas laika notiks CV tikÅ”anÄs online formÄtÄ, ja ir interese, var piedalÄ«ties, reÄ£istrÄcija Å”eit .