Hammaga salom! Men CROCda CV ishlab chiquvchiman. Biz 3 yildan beri CV sohasida loyihalarni amalga oshirmoqdamiz. Bu vaqt ichida biz juda ko'p ishlarni qildik, masalan: biz haydovchilarni haydash paytida ichmasliklari, chekishmasliklari, telefonda gaplashmasliklari, tushlarga yoki bulutlarga emas, balki yo'lga qarashlari uchun kuzatdik. ; Biz ishqibozlarning maxsus bo'laklarda haydashini va bir nechta to'xtash joylarini egallashini qayd etdik; ishchilarning dubulg'a, qo'lqop va boshqalar kiyishini ta'minladi; ob'ektga kirmoqchi bo'lgan xodimni aniqladi; Biz hamma narsani hisoblab chiqdik.
Bularning barchasini nima uchun qilyapman?
Loyihalarni amalga oshirish jarayonida biz to'qnashuvlarga duch keldik, juda ko'p, ba'zi muammolar sizga tanish yoki kelajakda tanish bo'ladi.
Keling, vaziyatni simulyatsiya qilaylik
Tasavvur qilaylik, biz "N" yosh kompaniyasiga ishga joylashdik, uning faoliyati ML bilan bog'liq. Biz ML (DL, CV) loyihasi ustida ishlaymiz, keyin negadir boshqa ishga o'tamiz, odatda tanaffus qilamiz va o'zimizning yoki boshqa birovning neyroniga qaytamiz.
Haqiqat vaqti keladi, siz qayerda to'xtaganingizni, qanday giperparametrlarni sinab ko'rganingizni va eng muhimi, ular qanday natijalarga olib kelganligini qandaydir tarzda eslab qolishingiz kerak. Barcha ishga tushirishlarda ma'lumotni kim saqlaganligi uchun ko'plab variantlar bo'lishi mumkin: boshda, konfiguratsiyalarda, bloknotda, bulutdagi ish muhitida. Men hiperparametrlar kodda sharhlangan satrlar sifatida saqlangan variantni, umuman olganda, hayoliy parvozni ko'rdim. Endi tasavvur qiling-a, siz loyihangizga emas, balki kompaniyani tark etgan shaxsning loyihasiga qaytdingiz va model_1.pb nomli kod va modelni meros qilib oldingiz. Rasmni to'ldirish va barcha og'riqlarni etkazish uchun siz ham boshlang'ich mutaxassis ekanligingizni tasavvur qilaylik.
Davom etishga ruxsat. Kodni ishga tushirish uchun biz va u bilan ishlaydigan har bir kishi muhit yaratishi kerak. Ko'pincha shunday bo'ladiki, negadir ular buni bizga meros qilib qoldirishmadi. Bu ham ahamiyatsiz vazifaga aylanishi mumkin. Siz bu qadamda vaqtni behuda sarflashni xohlamaysiz, shunday emasmi?
Biz modelni o'rgatamiz (masalan, avtomobil detektori). Biz juda yaxshi bo'ladigan nuqtaga etib boramiz - natijani saqlab qolish vaqti keldi. Keling, uni car_detection_v1.pb deb ataymiz. Keyin biz boshqasini o'rgatamiz - car_detection_v2.pb. Biroz vaqt o'tgach, bizning hamkasblarimiz yoki o'zimiz turli xil arxitekturalardan foydalangan holda ko'proq va ko'proq o'rgatamiz. Natijada, ma'lumotni mashaqqatli to'plash kerak bo'lgan bir qator artefaktlar hosil bo'ladi (lekin buni keyinroq qilamiz, chunki hozirda bizda ustuvor masalalar bor).
OK, endi hammasi tugadi! Bizda model bor! Keyingi modelni o'rgatish, yangi muammoni hal qilish uchun arxitekturani ishlab chiqishni boshlay olamizmi yoki choy ichishimiz mumkinmi? Va kim joylashtiradi?
Muammolarni aniqlash
Loyiha yoki mahsulot ustida ishlash ko'p odamlarning ishi. Va vaqt o'tishi bilan odamlar ketishadi va kelishadi, ko'proq loyihalar mavjud va loyihalarning o'zi murakkablashadi. Qanday bo'lmasin, yuqorida tavsiflangan tsikldagi vaziyatlar (va nafaqat) ma'lum kombinatsiyalarda iteratsiyadan iteratsiyaga qadar sodir bo'ladi. Bularning barchasi vaqtni behuda sarflashga, chalkashliklarga, asabiylashishga, ehtimol mijozlarning noroziligiga va oxir-oqibat pul yo'qotilishiga olib keladi. Garchi biz hammamiz odatda bir xil eski rakega ergashsak ham, men ishonamanki, hech kim bu daqiqalarni qayta-qayta yashashni xohlamaydi.
Shunday qilib, biz bir rivojlanish tsiklidan o'tdik va hal qilinishi kerak bo'lgan muammolar mavjudligini ko'ramiz. Buni amalga oshirish uchun sizga kerak:
ish natijalarini qulay saqlash;
yangi xodimlarni jalb qilish jarayonini soddalashtirish;
ishlab chiqish muhitini joylashtirish jarayonini soddalashtirish;
model versiyasini yaratish jarayonini sozlash;
modellarni tekshirishning qulay usuliga ega bo'lish;
davlat boshqaruvining namunaviy vositasini topish;
modellarni ishlab chiqarishga etkazish yo'lini topish.
Ko'rinib turibdiki, ushbu hayot aylanishini oson va qulay boshqarishga imkon beradigan ish jarayonini o'ylab topish kerakmi? Ushbu amaliyot MLOps deb ataladi
MLOps yoki DevOps mashinani o'rganish uchun ma'lumotlar fanlari va IT guruhlariga hamkorlik qilish va mashinani o'rganish modellarini monitoring qilish, tekshirish va boshqarish orqali modelni ishlab chiqish va joylashtirish tezligini oshirish imkonini beradi.
Mumkin hurmat qilmoqGoogle yigitlari bularning barchasi haqida qanday fikrda? Maqolada ko'rinib turibdiki, MLOps juda katta hajmli narsa.
Keyingi maqolamda men jarayonning faqat bir qismini tasvirlab beraman. Amalga oshirish uchun men MLflow vositasidan foydalanaman, chunki... Bu ochiq manbali loyiha, ulanish uchun oz miqdorda kod talab qilinadi va mashhur ml ramkalar bilan integratsiya mavjud. Siz Internetda Kubeflow, SageMaker, Trains va boshqalar kabi boshqa vositalarni qidirishingiz mumkin va ehtimol sizning ehtiyojlaringizga mos keladiganini topishingiz mumkin.
MLFlow vositasidan foydalanish misolidan foydalanib, MLOplarni "qurish"
MLFlow - ml modellarining hayot aylanishini boshqarish uchun ochiq manba platformasi (https://mlflow.org/).
MLflow to'rtta komponentni o'z ichiga oladi:
MLflow Tracking - bu natijaga olib kelgan natijalar va parametrlarni qayd etish masalalarini qamrab oladi;
MLflow loyihasi - kodni paketlash va uni istalgan platformada ko'paytirish imkonini beradi;
MLflow modellari - ishlab chiqarishga modellarni qo'llash uchun javobgardir;
MLflow Registry - markazlashtirilgan omborda modellarni saqlash va ularning holatini boshqarish imkonini beradi.
MLflow ikkita ob'ektda ishlaydi:
ishga tushirish - biz ro'yxatdan o'tmoqchi bo'lgan trening, parametrlar va ko'rsatkichlarning to'liq tsikli;
Tajriba - bu birgalikda ishlaydigan "mavzu".
Misolning barcha bosqichlari Ubuntu 18.04 operatsion tizimida amalga oshiriladi.
1. Serverni ishga tushiring
Loyihamizni osongina boshqarishimiz va barcha kerakli ma'lumotlarni olishimiz uchun biz serverni joylashtiramiz. MLflow kuzatuv serveri ikkita asosiy komponentga ega:
backend do'koni - ro'yxatdan o'tgan modellar haqidagi ma'lumotlarni saqlash uchun javob beradi (4 ta DBMSni qo'llab-quvvatlaydi: mysql, mssql, sqlite va postgresql);
artefaktlar do'koni - artefaktlarni saqlash uchun javob beradi (7 saqlash variantini qo'llab-quvvatlaydi: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP server, SFTP Server, NFS, HDFS).
Sifatda artefaktlar do'koni Oddiylik uchun sftp serverini olaylik.
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
xizmatni qayta ishga tushiring
$ sudo systemctl restart sshd
Sifatda backend do'koni Keling, postgresql ni olaylik.
$ 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
Serverni ishga tushirish uchun quyidagi python paketlarini o'rnatishingiz kerak (alohida virtual muhit yaratishni tavsiya qilaman):
Mashg'ulotlarimiz natijalari yo'qolmasligi, ishlab chiquvchilarning kelajak avlodlari nima bo'layotganini tushunishlari va katta o'rtoqlar va siz o'quv jarayonini xotirjam tahlil qila olishlari uchun biz kuzatuvni qo'shishimiz kerak. Kuzatuv parametrlarni, ko'rsatkichlarni, artefaktlarni va trening boshlanishi haqidagi qo'shimcha ma'lumotlarni, bizning holatlarimizda, serverda saqlashni anglatadi.
Misol uchun, men kichik yaratdim github-dagi loyiha Keras-da mavjud bo'lgan hamma narsani segmentlash uchun COCO ma'lumotlar to'plami. Kuzatuvni qo'shish uchun mlflow_training.py faylini yaratdim.
Mana eng qiziqarli voqealar sodir bo'lgan satrlar:
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)
Bu erda self.remote_server - mlflow.tracking usullari ustidagi kichik o'ram. MlflowClient (men buni qulaylik uchun qildim), uning yordamida men tajriba yarataman va uni serverda ishga tushiraman. Keyinchalik, ishga tushirish natijalari qayerda birlashtirilishi kerakligini ko'rsataman (mlflow.set_tracking_uri(self.tracking_uri)). Men mlflow.keras.autolog() ni avtomatik yozishni yoqaman. Hozirda MLflow Tracking TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark uchun avtomatik jurnalni qo'llab-quvvatlaydi. Agar siz o'zingizning ramka yoki kutubxonangizni topmagan bo'lsangiz, har doim aniq tizimga kirishingiz mumkin. Biz mashg'ulotlarni boshlaymiz. Masofaviy serverda teglar va kiritish parametrlarini ro'yxatdan o'tkazing.
Bir nechta satr va siz, boshqalar kabi, barcha ishga tushirishlar haqida ma'lumotga egasiz. Ajoyibmi?
3. Biz loyihani tuzamiz
Endi loyihani ishga tushirishni osonlashtiramiz. Buning uchun loyiha ildiziga MLproject va conda.yaml faylini qo'shing.
MLloyiha
Muhit - mening holatimda, conda_env Anaconda ishga tushirish uchun ishlatilganligini va qaramlik tavsifi conda.yaml faylida ekanligini ko'rsatadi;
Kirish nuqtalari - qaysi fayllar va qaysi parametrlar bilan ishlashimiz mumkinligini ko'rsatadi (ta'lim boshlanganda barcha parametrlar avtomatik ravishda qayd etiladi)
Ish vaqti muhiti sifatida docker dan foydalanishingiz mumkin, batafsil ma'lumot uchun qarang hujjatlar.
4. Keling, mashg'ulotlarni boshlaylik
Biz loyihani klonlaymiz va loyiha katalogiga o'tamiz:
git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/
Ishga tushirish uchun kutubxonalarni o'rnatishingiz kerak
pip install mlflow
pip install pysftp
Chunki conda_env ishlatadigan misolda, Anaconda sizning kompyuteringizga o'rnatilgan bo'lishi kerak (lekin siz barcha kerakli paketlarni o'zingiz o'rnatish va ishga tushirish parametrlari bilan o'ynash orqali buni hal qilishingiz mumkin).
Barcha tayyorgarlik bosqichlari tugallandi va biz treningni boshlashimiz mumkin. Loyiha ildizidan:
$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .
Buyruqni kiritgandan so'ng, avtomatik ravishda konda muhiti yaratiladi va trening boshlanadi.
Yuqoridagi misolda men o'qitish uchun davrlar sonini, biz ajratmoqchi bo'lgan toifalarni o'tkazdim (to'liq ro'yxatni ko'rishingiz mumkin) shu yerda) va masofaviy serverimiz manzili.
Mumkin bo'lgan parametrlarning to'liq ro'yxatini MLproject faylida topish mumkin.
Bu erda biz barcha tajribalar ro'yxatini (yuqori chap), shuningdek, yugurishlar haqidagi ma'lumotlarni (o'rtada) ko'ramiz. Biz har bir ishga tushirish uchun batafsil ma'lumotni (parametrlar, ko'rsatkichlar, artefaktlar va ba'zi qo'shimcha ma'lumotlar) ko'rishimiz mumkin.
Har bir ko'rsatkich uchun biz o'zgarishlar tarixini kuzatishimiz mumkin
Bular. Ayni paytda biz natijalarni "qo'lda" rejimda tahlil qilishimiz mumkin va siz MLflow API yordamida avtomatik tekshirishni ham o'rnatishingiz mumkin.
6. Modelni ro'yxatdan o'tkazing
Modelimizni tahlil qilib, u jangga tayyor deb qaror qilganimizdan so'ng, biz uni ro'yxatdan o'tkazishni davom ettiramiz, buning uchun biz kerakli ishga tushirishni tanlaymiz (oldingi xatboshida ko'rsatilganidek) va pastga tushamiz.
Modelimizga nom berganimizdan so'ng, uning versiyasi mavjud. Agar siz xuddi shu nomdagi boshqa modelni saqlasangiz, versiya avtomatik ravishda yangilanadi.
Har bir model uchun tavsif qo'shishimiz va uchta holatdan birini tanlashimiz mumkin (Staging, Production, Archived); Keyinchalik, API yordamida biz ushbu holatlarga kirishimiz mumkin, bu versiyalar bilan bir qatorda qo'shimcha moslashuvchanlikni ta'minlaydi.
Shuningdek, bizda barcha modellarga oson kirish imkoniyati mavjud
va ularning versiyalari
Oldingi paragrafda bo'lgani kabi, barcha operatsiyalar API yordamida amalga oshirilishi mumkin.
7. Modelni ishga tushiring
Ushbu bosqichda bizda allaqachon o'qitilgan (keras) model mavjud. Undan qanday foydalanishingiz mumkinligiga misol:
Bu yerda self.registry yana mlflow.tracking.MlflowClient ustidagi kichik o'ram bo'lib, qulaylik uchun. Gap shundaki, men uzoq serverga kiraman va u erda ko'rsatilgan nomga ega modelni va eng so'nggi ishlab chiqarish versiyasini qidiraman. Keyin artefaktni mahalliy sifatida ./model jildiga yuklab olaman va mlflow.keras.load_model(local_path) katalogidan modelni yarataman. Endi biz modelimizdan foydalanishimiz mumkin. CV (ML) ishlab chiquvchilari modelni osongina yaxshilashlari va yangi versiyalarini nashr etishlari mumkin.
Xulosa
Men quyidagilarga imkon beradigan tizimni taqdim etdim:
ML modellari, mashg'ulotlarning borishi va natijalari haqidagi ma'lumotlarni markazlashtirilgan holda saqlash;
rivojlanish muhitini tezda joylashtirish;
modellar bo'yicha ishlarning borishini kuzatish va tahlil qilish;
modellarning holatini versiyalash va boshqarish qulay;
Olingan modellarni joylashtirish oson.
Ushbu misol o'yinchoq bo'lib, natijalarni baholashni avtomatlashtirish va modellarni ro'yxatdan o'tkazishni o'z ichiga olishi mumkin bo'lgan o'z tizimingizni yaratish uchun boshlang'ich nuqta bo'lib xizmat qiladi (mos ravishda 5 va 6-bandlar) yoki siz ma'lumotlar to'plamining versiyalarini qo'shasiz yoki boshqa biror narsa? Men aytmoqchi bo'lgan narsa shundaki, sizga umuman MLOp kerak, MLflow - bu shunchaki maqsadga erishish vositasi.
Men ko'rsatmagan qanday muammolarga duch kelganingizni yozing?
Sizning ehtiyojlaringizni qondirish uchun tizimga nima qo'shgan bo'lardingiz?
Muammolarning barchasini yoki bir qismini hal qilish uchun qanday vositalar va yondashuvlardan foydalanasiz?
Bizning kompaniyamiz vaqti-vaqti bilan IT-mutaxassislari uchun turli tadbirlarni o'tkazadi, masalan: 8-iyul kuni Moskva vaqti bilan soat 19:00 da onlayn formatda CV uchrashuvi bo'lib o'tadi, agar qiziqsangiz, ishtirok etishingiz mumkin, ro'yxatdan o'tish. shu yerda .