Hamıya salam! Mən CROC-da CV tərtibatçısıyam. Artıq 3 ildir ki, CV sahəsində layihələr həyata keçiririk. Bu müddət ərzində biz çox şeylər etdik, məsələn: sürücülərə nəzarət etdik ki, maşın sürərkən içki içməsinlər, siqaret çəkməsinlər, telefonla danışmasınlar, yuxulara və buludlara deyil, yola baxsınlar. ; Biz xüsusi zolaqlarda maşın sürən və bir neçə parkinq yeri tutan insanları qeydə aldıq; işçilərin dəbilqə, əlcək və s. taxmasını təmin etdi; obyektə daxil olmaq istəyən işçini müəyyən etmək; Əlimizdən gələni saydıq.
Bütün bunları nə üçün edirəm?
Layihələrin həyata keçirilməsi prosesində biz tıxaclara, çoxlu tıxaclara, ya tanış olduğunuz, ya da gələcəkdə tanış olacağınız bəzi problemlərə rast gəlirik.
Vəziyyəti simulyasiya edək
Təsəvvür edək ki, fəaliyyəti ML ilə əlaqəli olan gənc “N” şirkətində işə düzəldik. Biz ML (DL, CV) layihəsi üzərində işləyirik, sonra nədənsə başqa işə keçirik, ümumiyyətlə fasilə veririk və özümüzün və ya başqasının neyronuna qayıdırıq.
Həqiqət anı gəlir, harada dayandığınızı, hansı hiperparametrləri sınadığınızı və ən əsası hansı nəticələrə səbəb olduğunu xatırlamaq lazımdır. Bütün buraxılışlarda məlumatı kimin saxladığı üçün bir çox seçim ola bilər: başda, konfiqurasiyada, notepadda, buludda iş mühitində. Hiperparametrlərin kodda şərh edilmiş sətirlər kimi saxlandığı bir seçimlə rastlaşdım, ümumiyyətlə, fantaziya uçuşu. İndi təsəvvür edin ki, siz öz layihənizə deyil, şirkətdən ayrılan şəxsin layihəsinə qayıtdınız və sizə model_1.pb adlı kod və modeli miras aldınız. Şəkili tamamlamaq və bütün ağrıları çatdırmaq üçün təsəvvür edək ki, siz həm də başlanğıc mütəxəssissiniz.
Davam et. Kodu işlətmək üçün biz və onunla işləyəcək hər kəs bir mühit yaratmalıyıq. Çox vaxt olur ki, nədənsə onu bizə miras qoymayıblar. Bu, həm də əhəmiyyətsiz bir işə çevrilə bilər. Bu addımda vaxt itirmək istəmirsiniz, elə deyilmi?
Biz bir model hazırlayırıq (məsələn, avtomobil detektoru). Çox yaxşı olacağı nöqtəyə çatırıq - nəticəni saxlamaq vaxtıdır. Gəlin buna car_detection_v1.pb deyək. Sonra başqa birini məşq edirik - car_detection_v2.pb. Bir müddət sonra həmkarlarımız və ya özümüz müxtəlif arxitekturalardan istifadə edərək getdikcə daha çox dərs deyirik. Nəticədə, bir dəstə artefakt yaranır, onlar haqqında məlumat əziyyətlə toplanmalıdır (lakin bunu daha sonra edəcəyik, çünki indi daha çox prioritet məsələlər var).
Tamam, indi hər şey bitdi! Modelimiz var! Növbəti modeli öyrətməyə, yeni problemi həll etmək üçün arxitektura hazırlamağa başlaya bilərik, yoxsa gedib çay içə bilərik? Və kim yerləşdirəcək?
Problemlərin müəyyən edilməsi
Layihə və ya məhsul üzərində işləmək bir çox insanın işidir. Və zaman keçdikcə insanlar gedib-gəlirlər, daha çox layihələr var və layihələrin özü də mürəkkəbləşir. Bu və ya digər şəkildə, yuxarıda təsvir edilən dövrdən (yalnız deyil) müəyyən birləşmələrdə vəziyyətlər iterasiyadan iterasiyaya qədər baş verəcəkdir. Bütün bunlar vaxt itkisi, çaşqınlıq, əsəblər, ola bilsin ki, müştəri narazılığı və nəticədə pul itkisi ilə nəticələnir. Hamımız adətən eyni köhnə dırmıqla getsək də, inanıram ki, heç kim bu anları təkrar-təkrar yaşamaq istəmir.
Beləliklə, biz bir inkişaf tsiklindən keçdik və görürük ki, həll edilməli olan problemlər var. Bunu etmək üçün sizə lazımdır:
iş nəticələrini rahat saxlamaq;
yeni işçilərin cəlb edilməsi prosesini sadələşdirmək;
inkişaf mühitinin yerləşdirilməsi prosesini sadələşdirmək;
Görünür, bu həyat dövrünü asanlıqla və rahat şəkildə idarə etməyə imkan verəcək bir iş axını ilə gəlmək lazımdır? Bu təcrübə MLOps adlanır
MLOps və ya maşın öyrənməsi üçün DevOps, məlumat elminə və İT komandalarına əməkdaşlıq etməyə və maşın öyrənmə modelləri üçün monitorinq, yoxlama və idarəetmə vasitəsilə modelin inkişafı və yerləşdirmə sürətini artırmağa imkan verir.
Siz edə bilərsiniz şərəfləndirməkGoogle adamları bütün bunlar haqqında nə düşünür? Məqalədən aydın olur ki, MLOps olduqca həcmli bir şeydir.
Daha sonra məqaləmdə prosesin yalnız bir hissəsini təsvir edəcəyəm. Həyata keçirmək üçün mən MLflow alətindən istifadə edəcəyəm, çünki... Bu açıq mənbəli layihədir, qoşulmaq üçün az miqdarda kod tələb olunur və məşhur ml çərçivələri ilə inteqrasiya var. İnternetdə Kubeflow, SageMaker, Trains və s. kimi digər alətləri axtara və bəlkə də ehtiyaclarınıza daha uyğun olanı tapa bilərsiniz.
MLFlow alətindən istifadə nümunəsindən istifadə edərək MLOp-ların "tikilməsi"
MLFlow ml modellərinin həyat dövrünün idarə edilməsi üçün açıq mənbə platformasıdır (https://mlflow.org/).
MLflow dörd komponentdən ibarətdir:
MLflow İzləmə - nəticələrin və bu nəticəyə səbəb olan parametrlərin qeyd edilməsi məsələlərini əhatə edir;
MLflow Layihəsi - kodu paketləməyə və istənilən platformada çoxaltmağa imkan verir;
MLflow Registry - modelləri saxlamağa və onların vəziyyətini mərkəzləşdirilmiş depoda idarə etməyə imkan verir.
MLflow iki obyektdə işləyir:
işə salınma qeydiyyatdan keçmək istədiyimiz təlim, parametrlər və ölçülərin tam dövrüdür;
Təcrübə birlikdə işləyən "mövzu"dur.
Nümunənin bütün addımları Ubuntu 18.04 əməliyyat sistemində həyata keçirilir.
1. Serveri yerləşdirin
Layihəmizi asanlıqla idarə etməyimiz və bütün lazımi məlumatları əldə etməyimiz üçün bir server yerləşdirəcəyik. MLflow izləmə serverinin iki əsas komponenti var:
backend mağazası - qeydiyyatdan keçmiş modellər haqqında məlumatın saxlanmasına cavabdehdir (4 DBMS dəstəkləyir: mysql, mssql, sqlite və postgresql);
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
xidməti yenidən başladın
$ sudo systemctl restart sshd
Kimi arxa mağaza Postgresql-i götürək.
$ 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
Serveri işə salmaq üçün aşağıdakı python paketlərini quraşdırmalısınız (ayrıca virtual mühit yaratmağı məsləhət görürəm):
Təlimimizin nəticələrinin itirilməməsi, gələcək nəsil tərtibatçıların nə baş verdiyini anlaması və yaşlı yoldaşların və sizin öyrənmə prosesini sakitcə təhlil edə bilməniz üçün izləmə əlavə etməliyik. İzləmə parametrləri, ölçüləri, artefaktları və təlimin başlaması ilə bağlı hər hansı əlavə məlumatı, bizim vəziyyətimizdə serverdə saxlamaq deməkdir.
Məsələn, mən kiçik yaratdım github-da layihə İçindəki hər şeyi bölmək üçün Keras-da COCO məlumat dəsti. İzləmə əlavə etmək üçün mlflow_training.py faylı yaratdım.
Ən maraqlı hadisələrin baş verdiyi sətirləri təqdim edirik:
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)
Burada self.remote_server mlflow.tracking üsulları üzərində kiçik bir sarğıdır. MlflowClient (mən bunu rahatlıq üçün etdim), onun köməyi ilə bir təcrübə yaradıram və onu serverdə işə salıram. Sonra, işə salma nəticələrinin harada birləşdirilməli olduğunu göstərirəm (mlflow.set_tracking_uri(self.tracking_uri)). Mən mlflow.keras.autolog() avtomatik girişini aktivləşdirirəm. Hal-hazırda MLflow İzləmə TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark üçün avtomatik girişi dəstəkləyir. Çərçivənizi və ya kitabxananızı tapmamısınızsa, hər zaman açıq şəkildə daxil ola bilərsiniz. Təlimlərə başlayırıq. Uzaq serverdə etiketləri və daxiletmə parametrlərini qeyd edin.
Bir neçə sətir və siz, hər kəs kimi, bütün buraxılışlar haqqında məlumat əldə edə bilərsiniz. Əla?
3. Layihəni tərtib edirik
İndi layihəni işə salmağı asanlaşdıraq. Bunun üçün MLproject və conda.yaml faylını layihənin kökünə əlavə edin.
MLlayihə
Siz docker-i iş vaxtı mühitiniz kimi istifadə edə bilərsiniz, daha ətraflı məlumat üçün müraciət edin sənədləşdirmə.
4. Gəlin məşqə başlayaq
Layihəni klonlayırıq və layihə qovluğuna gedirik:
git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/
Çalıştırmaq üçün kitabxanaları quraşdırmalısınız
pip install mlflow
pip install pysftp
Çünki conda_env istifadə etdiyim nümunədə, Anaconda kompüterinizdə quraşdırılmalıdır (lakin bütün lazımi paketləri özünüz quraşdıraraq və işə salma parametrləri ilə oynayaraq bunun öhdəsindən gələ bilərsiniz).
Bütün hazırlıq mərhələləri tamamlandı və biz təlimə başlaya bilərik. Layihənin kökündən:
$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .
Komanda daxil olduqdan sonra avtomatik olaraq konda mühiti yaradılacaq və təlim başlayacaq.
Yuxarıdakı nümunədə mən təlim üçün dövrlərin sayını, bölmək istədiyimiz kateqoriyaları keçdim (tam siyahıya baxa bilərsiniz) burada) və uzaq serverimizin ünvanı.
Mümkün parametrlərin tam siyahısı MLproject faylında tapıla bilər.
Burada bütün eksperimentlərin siyahısını (yuxarı solda), həmçinin qaçışlar haqqında məlumatı (ortada) görürük. Hər buraxılış üçün daha ətraflı məlumatı (parametrlər, ölçülər, artefaktlar və bəzi əlavə məlumatlar) görə bilərik.
Hər bir metrik üçün biz dəyişikliklərin tarixini müşahidə edə bilərik
Bunlar. Hazırda biz nəticələri “əl” rejimində təhlil edə bilərik və siz MLflow API-dən istifadə edərək avtomatik yoxlamanı da qura bilərsiniz.
6. Modeli qeydiyyatdan keçirin
Modelimizi təhlil etdikdən və döyüşə hazır olduğuna qərar verdikdən sonra onu qeydiyyata almağa davam edirik, bunun üçün bizə lazım olan buraxılışı seçirik (əvvəlki paraqrafda göstərildiyi kimi) və enirik.
Modelimizə ad verdikdən sonra onun bir versiyası var. Eyni adlı başqa bir modeli yadda saxlasanız, versiya avtomatik olaraq yenilənəcək.
Hər bir model üçün təsvir əlavə edə və üç vəziyyətdən birini seçə bilərik (Staging, Production, Archived); sonradan API-dən istifadə edərək bu vəziyyətlərə daxil ola bilərik ki, bu da versiya ilə yanaşı əlavə çeviklik təmin edir.
Həmçinin bütün modellərə asanlıqla çıxışımız var
və onların versiyaları
Əvvəlki paraqrafda olduğu kimi, bütün əməliyyatlar API-dən istifadə etməklə edilə bilər.
7. Modeli yerləşdirin
Bu mərhələdə artıq təlim keçmiş (keras) modelimiz var. Onu necə istifadə edə biləcəyinizə dair bir nümunə:
Burada self.registr daha rahatlıq üçün mlflow.tracking.MlflowClient üzərində kiçik bir sarğıdır. Məsələ ondadır ki, mən uzaq serverə daxil oluram və orada göstərilən adı və ən son istehsal versiyası olan modeli axtarıram. Sonra mən artefaktı yerli olaraq ./model qovluğuna yükləyirəm və bu mlflow.keras.load_model(local_path) qovluğundan modeli qururam. İndi modelimizdən istifadə edə bilərik. CV (ML) tərtibatçıları modeli asanlıqla təkmilləşdirə və yeni versiyaları dərc edə bilərlər.
Nəticədə
Mən imkan verən bir sistem təqdim etdim:
ML modelləri, təlimin gedişatı və nəticələri haqqında məlumatları mərkəzləşdirilmiş şəkildə saxlamaq;
inkişaf mühitini tez yerləşdirmək;
modellər üzrə işlərin gedişatına nəzarət etmək və təhlil etmək;
modellərin vəziyyətini versiyalaşdırmaq və idarə etmək rahatdır;
Yaranan modelləri yerləşdirmək asandır.
Bu nümunə oyuncaqdır və nəticələrin qiymətləndirilməsinin avtomatlaşdırılması və modellərin qeydiyyatı (müvafiq olaraq 5 və 6-cı bəndlər) daxil ola bilən öz sisteminizi qurmaq üçün başlanğıc nöqtəsi kimi xidmət edir və ya siz verilənlər toplusunun versiyalarını əlavə edəcəksiniz, yoxsa başqa bir şey? Deməyə çalışdığım məqam odur ki, sizə bütövlükdə MLOp lazımdır, MLflow sadəcə məqsədə çatmaq üçün bir vasitədir.
Mən göstərmədiyim hansı problemlərlə qarşılaşdığınızı yazın?
Sistem ehtiyaclarınıza cavab vermək üçün ona nə əlavə edərdiniz?
Problemlərin hamısını və ya bir hissəsini həll etmək üçün hansı vasitələrdən və yanaşmalardan istifadə edirsiniz?
Şirkətimiz vaxtaşırı İT mütəxəssisləri üçün müxtəlif tədbirlərə ev sahibliyi edir, məsələn: 8 iyul Moskva vaxtı ilə saat 19:00-da onlayn formatda CV görüşü olacaq, maraqlanırsınızsa, iştirak edə bilərsiniz, qeydiyyatdan keçin. burada .