Salaam wote! Mimi ni msanidi wa CV katika CROC. Tumekuwa tukitekeleza miradi katika uwanja wa CV kwa miaka 3 sasa. Wakati huu, tulifanya mambo mengi, kwa mfano: tulifuatilia madereva ili wakati wa kuendesha hawakunywa, hawakuvuta sigara, hawakuzungumza kwenye simu, waliangalia barabara, na sio kwa ndoto au mawingu. ; Tulirekodi watu wanaoendesha gari katika njia maalum na kuchukua nafasi kadhaa za maegesho; ilihakikisha kuwa wafanyikazi wamevaa helmeti, glavu, nk; kutambuliwa mfanyakazi ambaye anataka kuingia kituo; Tulihesabu kila kitu tulichoweza.
Je, ninafanya haya yote kwa ajili ya nini?
Katika mchakato wa utekelezaji wa miradi, tunapiga matuta, matuta mengi, shida zingine unazozifahamu au utafahamiana nazo katika siku zijazo.
Hebu tuige hali hiyo
Hebu fikiria kwamba tulipata kazi katika kampuni ya vijana "N", ambayo shughuli zake zinahusiana na ML. Tunafanya kazi kwenye mradi wa ML (DL, CV), kisha kwa sababu fulani tunabadilisha kazi nyingine, kwa ujumla kuchukua mapumziko, na kurudi kwa neuron yetu au ya mtu mwingine.
Wakati wa ukweli unakuja, unahitaji kukumbuka kwa namna fulani mahali ulipoacha, ni hyperparameters gani ulijaribu na, muhimu zaidi, ni matokeo gani waliyoongoza. Kunaweza kuwa na chaguzi nyingi kwa nani aliyehifadhi habari juu ya uzinduzi wote: katika kichwa, configs, notepad, katika mazingira ya kazi katika wingu. Nilitokea kuona chaguo wakati hyperparameters zilihifadhiwa kama mistari ya maoni kwenye msimbo, kwa ujumla, ndege ya dhana. Sasa fikiria kuwa hukurudi kwenye mradi wako, lakini kwa mradi wa mtu aliyeacha kampuni na ukarithi msimbo na mtindo unaoitwa model_1.pb. Ili kukamilisha picha na kufikisha maumivu yote, hebu fikiria kuwa wewe pia ni mtaalamu wa mwanzo.
Endelea. Ili kuendesha msimbo, sisi na kila mtu atakayefanya kazi nayo tunahitaji kuunda mazingira. Mara nyingi hutokea kwamba kwa sababu fulani hawakumwacha kama urithi wetu. Hii pia inaweza kuwa kazi isiyo ya kawaida. Hutaki kupoteza muda kwa hatua hii, sivyo?
Tunafundisha mfano (kwa mfano, detector ya gari). Tunafika mahali ambapo inakuwa nzuri sana - ni wakati wa kuokoa matokeo. Hebu tuite car_detection_v1.pb. Kisha tunafundisha mwingine - car_detection_v2.pb. Wakati fulani baadaye, wenzetu au sisi wenyewe tunafundisha zaidi na zaidi, kwa kutumia usanifu tofauti. Kama matokeo, rundo la mabaki huundwa, habari juu ya ambayo lazima ikusanywe kwa uchungu (lakini tutafanya hivi baadaye, kwa sababu kwa sasa tuna mambo ya kipaumbele zaidi).
Sawa yote yameisha Sasa! Tuna mfano! Je, tunaweza kuanza kufundisha mtindo unaofuata, kuendeleza usanifu wa kutatua tatizo jipya, au tunaweza kwenda kunywa chai? Na nani atapeleka?
Kutambua matatizo
Kufanya kazi kwenye mradi au bidhaa ni kazi ya watu wengi. Na baada ya muda, watu huondoka na kuja, kuna miradi zaidi, na miradi yenyewe inakuwa ngumu zaidi. Njia moja au nyingine, hali kutoka kwa mzunguko ulioelezwa hapo juu (na sio tu) katika mchanganyiko fulani utatokea kutoka kwa kurudia hadi kurudia. Haya yote husababisha kupoteza muda, kuchanganyikiwa, mishipa, uwezekano wa kutoridhika kwa wateja, na hatimaye, kupoteza pesa. Ingawa sote kwa kawaida hufuata safu ile ile ya zamani, ninaamini kwamba hakuna mtu anayetaka kukumbuka matukio haya tena na tena.
Kwa hiyo, tumepitia mzunguko mmoja wa maendeleo na tunaona kwamba kuna matatizo ambayo yanahitaji kutatuliwa. Ili kufanya hivyo unahitaji:
kwa urahisi kuhifadhi matokeo ya kazi;
fanya mchakato wa kuwashirikisha wafanyikazi wapya rahisi;
kurahisisha mchakato wa kupeleka mazingira ya maendeleo;
sanidi mchakato wa toleo la mfano;
kuwa na njia rahisi ya kuthibitisha mifano;
pata chombo cha usimamizi wa hali ya mfano;
kutafuta njia ya kutoa mifano kwa uzalishaji.
Inavyoonekana ni muhimu kuja na mtiririko wa kazi ambao utakuruhusu kudhibiti mzunguko huu wa maisha kwa urahisi na kwa urahisi? Zoezi hili linaitwa MLOps
MLOps, au DevOps kwa ajili ya kujifunza kwa mashine, huruhusu sayansi ya data na timu za TEHAMA kushirikiana na kuongeza kasi ya uundaji wa miundo na utumiaji kupitia ufuatiliaji, uthibitishaji na usimamizi wa miundo ya kujifunza kwa mashine.
Unaweza somaJe! Watu wa Google wana maoni gani kuhusu haya yote? Kutoka kwa kifungu ni wazi kuwa MLOps ni jambo kubwa sana.
Zaidi katika makala yangu nitaelezea sehemu tu ya mchakato. Kwa utekelezaji, nitatumia zana ya MLflow, kwa sababu... Huu ni mradi wa chanzo-wazi, kiasi kidogo cha msimbo kinahitajika kuunganisha na kuna ushirikiano na mifumo maarufu ya ml. Unaweza kutafuta kwenye Mtandao kwa zana zingine, kama vile Kubeflow, SageMaker, Treni, n.k., na pengine kupata inayokidhi mahitaji yako vyema.
"Kujenga" MLOps kwa kutumia mfano wa kutumia zana ya MLFlow
MLFlow ni jukwaa la chanzo wazi la usimamizi wa mzunguko wa maisha wa mifano ya ml (https://mlflow.org/).
MLflow inajumuisha vipengele vinne:
Ufuatiliaji wa MLflow - inashughulikia masuala ya kurekodi matokeo na vigezo vilivyosababisha matokeo haya;
Mradi wa MLflow - hukuruhusu kufunga nambari na kuizalisha tena kwenye jukwaa lolote;
Mitindo ya MLflow - inayohusika na kupeleka mifano kwa uzalishaji;
Usajili wa MLflow - hukuruhusu kuhifadhi modeli na kudhibiti hali yao katika hazina kuu.
MLflow inafanya kazi kwenye vyombo viwili:
uzinduzi ni mzunguko kamili wa mafunzo, vigezo na metriki ambayo tunataka kujiandikisha;
Jaribio ni "mada" inayoendana.
Hatua zote za mfano zinatekelezwa kwenye mfumo wa uendeshaji wa Ubuntu 18.04.
1. Weka seva
Ili tuweze kusimamia mradi wetu kwa urahisi na kupokea taarifa zote muhimu, tutapeleka seva. Seva ya ufuatiliaji wa MLflow ina sehemu kuu mbili:
duka la nyuma - kuwajibika kwa kuhifadhi habari kuhusu mifano iliyosajiliwa (inasaidia 4 DBMSs: mysql, mssql, sqlite, na postgresql);
duka la vizalia vya programu - linalohusika na kuhifadhi mabaki (inasaidia chaguzi 7 za uhifadhi: Amazon S3, Hifadhi ya Azure Blob, Hifadhi ya Wingu la Google, seva ya FTP, Seva ya SFTP, NFS, HDFS).
Kama duka la mabaki Kwa unyenyekevu, hebu tuchukue seva ya sftp.
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
anzisha upya huduma
$ sudo systemctl restart sshd
Kama duka la nyuma Wacha tuchukue 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
Ili kuanza seva, unahitaji kusanikisha vifurushi vifuatavyo vya python (Ninapendekeza kuunda mazingira tofauti ya kawaida):
Ili matokeo ya mafunzo yetu yasipotee, vizazi vijavyo vya watengenezaji kuelewa kinachoendelea, na kwa wandugu wakubwa na wewe kuweza kuchambua mchakato wa kujifunza kwa utulivu, tunahitaji kuongeza ufuatiliaji. Kufuatilia kunamaanisha kuokoa vigezo, vipimo, vibaki vya programu na maelezo yoyote ya ziada kuhusu kuanza kwa mafunzo, kwa upande wetu, kwenye seva.
Kwa mfano, niliunda ndogo mradi kwenye github kwenye Keras kwa kugawa kila kitu kilicho ndani Karatasi ya data ya COCO. Ili kuongeza ufuatiliaji, niliunda faili mlflow_training.py.
Hapa kuna mistari ambapo mambo ya kuvutia zaidi hufanyika:
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)
Hapa self.remote_server ni kanga ndogo juu ya mbinu za kufuatilia mlflow. MlflowClient (Niliifanya kwa urahisi), kwa msaada ambao ninaunda jaribio na kuiendesha kwenye seva. Kisha, ninaonyesha mahali ambapo matokeo ya uzinduzi yanapaswa kuunganishwa (mlflow.set_tracking_uri(self.tracking_uri)). Ninawezesha ukataji miti kiotomatiki mlflow.keras.autolog(). Kwa sasa Ufuatiliaji wa MLflow unaauni ukataji otomatiki wa TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Ikiwa hujapata mfumo au maktaba yako, basi unaweza kuingia kwa uwazi kila wakati. Tunaanza mafunzo. Sajili vitambulisho na vigezo vya ingizo kwenye seva ya mbali.
Mistari kadhaa na wewe, kama kila mtu mwingine, unaweza kufikia maelezo kuhusu uzinduzi wote. Baridi?
3. Tunachora mradi
Sasa hebu tufanye iwe rahisi kuzindua mradi. Ili kufanya hivyo, ongeza faili ya MLproject na conda.yaml kwenye mzizi wa mradi.
Mradi wa ML
Unaweza kutumia docker kama mazingira yako ya wakati wa kukimbia, kwa maelezo zaidi tafadhali rejelea nyaraka.
4. Hebu tuanze mafunzo
Tunatengeneza mradi na kwenda kwenye saraka ya mradi:
git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/
Ili kuendesha unahitaji kusakinisha maktaba
pip install mlflow
pip install pysftp
Kwa sababu katika mfano ninaotumia conda_env, Anaconda lazima iwe imewekwa kwenye kompyuta yako (lakini unaweza kuzunguka hii kwa kusanikisha vifurushi vyote muhimu mwenyewe na kucheza na vigezo vya uzinduzi).
Hatua zote za maandalizi zimekamilika na tunaweza kuanza kuzindua mafunzo. Kutoka kwa mzizi wa mradi:
$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .
Baada ya kuingia amri, mazingira ya conda yataundwa moja kwa moja na mafunzo yataanza.
Katika mfano hapo juu, nilipitisha idadi ya nyakati za mafunzo, kategoria ambazo tunataka kuweka sehemu (unaweza kuona orodha kamili. hapa) na anwani ya seva yetu ya mbali.
Orodha kamili ya vigezo vinavyowezekana inaweza kupatikana katika faili ya MLproject.
Hapa tunaona orodha ya majaribio yote (juu kushoto), pamoja na taarifa juu ya kukimbia (katikati). Tunaweza kuona maelezo ya kina zaidi (vigezo, vipimo, vizalia vya programu na baadhi ya maelezo ya ziada) kwa kila uzinduzi.
Kwa kila kipimo tunaweza kuona historia ya mabadiliko
Wale. Kwa sasa tunaweza kuchanganua matokeo katika hali ya "mwongozo", na unaweza pia kusanidi uthibitishaji wa kiotomatiki kwa kutumia API ya MLflow.
6. Sajili mfano
Baada ya kuchambua mfano wetu na kuamua kuwa iko tayari kwa vita, tunaendelea kuiandikisha, kwa hili tunachagua uzinduzi tunaohitaji (kama inavyoonekana katika aya iliyotangulia) na kwenda chini.
Baada ya kutoa mfano wetu jina, ina toleo. Ukihifadhi muundo mwingine kwa jina sawa, toleo litasasishwa kiotomatiki.
Kwa kila muundo, tunaweza kuongeza maelezo na kuchagua mojawapo ya majimbo matatu (Staging, Production, Archived); baadaye, kwa kutumia API, tunaweza kufikia majimbo haya, ambayo, pamoja na matoleo, hutoa unyumbufu zaidi.
Pia tuna ufikiaji rahisi wa mifano yote
na matoleo yao
Kama katika aya iliyotangulia, shughuli zote zinaweza kufanywa kwa kutumia API.
7. Weka mfano
Katika hatua hii, tayari tunayo mfano wa mafunzo (keras). Mfano wa jinsi unavyoweza kuitumia:
Hapa kujiandikisha binafsi ni kanga ndogo tena juu ya mlflow.tracking.MlflowClient, kwa urahisi. Jambo ni kwamba ninapata seva ya mbali na kutafuta mfano hapo na jina maalum, na toleo la hivi karibuni la uzalishaji. Ifuatayo, ninapakua vizalia vya programu kwenye folda ya ./model na kuunda kielelezo kutoka kwa saraka hii mlflow.keras.load_model(local_path). Sasa tunaweza kutumia mfano wetu. Wasanidi wa CV (ML) wanaweza kuboresha muundo na kuchapisha matoleo mapya kwa urahisi.
Kwa kumalizia
Niliwasilisha mfumo unaoruhusu:
hifadhi ya kati habari kuhusu mifano ya ML, maendeleo ya mafunzo na matokeo;
haraka kupeleka mazingira ya maendeleo;
kufuatilia na kuchambua maendeleo ya kazi kwenye mifano;
ni rahisi kwa toleo na kusimamia hali ya mifano;
Ni rahisi kupeleka mifano inayotokana.
Mfano huu ni toy na hutumika kama kianzio cha kuunda mfumo wako mwenyewe, ambao unaweza kujumuisha otomatiki ya tathmini ya matokeo na usajili wa mifano (alama 5 na 6, mtawaliwa) au utaongeza toleo la hifadhidata, au labda kitu kingine? Jambo ambalo nilikuwa najaribu kusema ni kwamba unahitaji MLOps kwa ujumla, MLflow ni njia tu ya kumaliza.
Andika ni matatizo gani uliyokumbana nayo ambayo sikuyaonyesha?
Je, unaweza kuongeza nini kwenye mfumo ili kukidhi mahitaji yako?
Je, unatumia zana na mbinu gani kutatua matatizo yote au sehemu yake?
Kampuni yetu mara kwa mara huwa na matukio mbalimbali kwa wataalamu wa IT, kwa mfano: Julai 8 saa 19:00 wakati wa Moscow kutakuwa na mkutano wa CV katika muundo wa mtandaoni, ikiwa una nia, unaweza kushiriki, usajili. hapa .