MLOps - Aşpaz kitabı, 1-ci fəsil

MLOps - Aşpaz kitabı, 1-ci fəsil

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.

  1. 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.
  2. 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?
  3. 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).
  4. 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.

MLOps - Aşpaz kitabı, 1-ci fəsil

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;
  • modelin versiyalaşdırılması prosesini konfiqurasiya etmək;
  • modelləri təsdiqləmək üçün əlverişli bir yol var;
  • model dövlət idarəetmə alətini tapmaq;
  • modelləri istehsala çatdırmağın bir yolunu tapın.

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.

MLOps - Aşpaz kitabı, 1-ci fəsil

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 Modelləri - modellərin istehsala tətbiqinə cavabdehdir;
  • 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);
  • artefakt mağazası - artefaktların saxlanmasına cavabdehdir (7 saxlama variantını dəstəkləyir: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP server, SFTP Server, NFS, HDFS).

Kimi artefakt mağazası Sadəlik üçün sftp serverini götürək.

  • qrup yaradın
    $ sudo groupadd sftpg
  • istifadəçi əlavə edin və onun üçün parol təyin edin
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • bir neçə giriş parametrlərinin tənzimlənməsi
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • /etc/ssh/sshd_config-ə bir neçə sətir əlavə edin
    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):

pip install mlflow
pip install pysftp

Gəlin serverimizi işə salaq

$ mlflow server  
                 --backend-store-uri postgresql://mlflow_user:mlflow@localhost/mlflow_db 
                 --default-artifact-root sftp://mlflowsftp:mlflow@sftp_host/upload  
                --host server_host 
                --port server_port

2. İzləmə əlavə edin

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ə

name: flow_segmentation
conda_env: conda.yaml

entry_points:
  main:
    parameters:
        categories: {help: 'list of categories from coco dataset'}
        epochs: {type: int, help: 'number of epochs in training'}

        lr: {type: float, default: 0.001, help: 'learning rate'}
        batch_size: {type: int, default: 8}
        model_name: {type: str, default: 'Unet', help: 'Unet, PSPNet, Linknet, FPN'}
        backbone_name: {type: str, default: 'resnet18', help: 'exampe resnet18, resnet50, mobilenetv2 ...'}

        tracking_uri: {type: str, help: 'the server address'}
        experiment_name: {type: str, default: 'My_experiment', help: 'remote and local experiment name'}
    command: "python mlflow_training.py 
            --epochs={epochs}
            --categories={categories}
            --lr={lr}
            --tracking_uri={tracking_uri}
            --model_name={model_name}
            --backbone_name={backbone_name}
            --batch_size={batch_size}
            --experiment_name={experiment_name}"

MLflow Layihəsi bir neçə xüsusiyyətə malikdir:

  • Ad - layihənizin adı;
  • Ətraf mühit - mənim vəziyyətimdə, conda_env göstərir ki, Anaconda işə salınmaq üçün istifadə olunur və asılılıq təsviri conda.yaml faylındadır;
  • Giriş nöqtələri - hansı faylları və hansı parametrlərlə işləyə biləcəyimizi göstərir (təlim başladıqda bütün parametrlər avtomatik olaraq qeyd olunur)

conda.yaml

name: flow_segmentation
channels:
  - defaults
  - anaconda
dependencies:
  - python==3.7
  - pip:
    - mlflow==1.8.0
    - pysftp==0.2.9
    - Cython==0.29.19
    - numpy==1.18.4
    - pycocotools==2.0.0
    - requests==2.23.0
    - matplotlib==3.2.1
    - segmentation-models==1.0.1
    - Keras==2.3.1
    - imgaug==0.4.0
    - tqdm==4.46.0
    - tensorflow-gpu==1.14.0

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.

5. Öyrənmə nəticələrini qiymətləndirin

Təlimi başa vurduqdan sonra brauzerdə serverimizin ünvanına gedə bilərik http://server_host:server_port

MLOps - Aşpaz kitabı, 1-ci fəsil

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.

MLOps - Aşpaz kitabı, 1-ci fəsil

Hər bir metrik üçün biz dəyişikliklərin tarixini müşahidə edə bilərik

MLOps - Aşpaz kitabı, 1-ci fəsil

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.

MLOps - Aşpaz kitabı, 1-ci fəsil

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.

MLOps - Aşpaz kitabı, 1-ci fəsil

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.

MLOps - Aşpaz kitabı, 1-ci fəsil

Həmçinin bütün modellərə asanlıqla çıxışımız var

MLOps - Aşpaz kitabı, 1-ci fəsil

və onların versiyaları

MLOps - Aşpaz kitabı, 1-ci fəsil

Ə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ə:

class SegmentationModel:
    def __init__(self, tracking_uri, model_name):

        self.registry = RemoteRegistry(tracking_uri=tracking_uri)
        self.model_name = model_name
        self.model = self.build_model(model_name)

    def get_latest_model(self, model_name):
        registered_models = self.registry.get_registered_model(model_name)
        last_model = self.registry.get_last_model(registered_models)
        local_path = self.registry.download_artifact(last_model.run_id, 'model', './')
        return local_path

    def build_model(self, model_name):
        local_path = self.get_latest_model(model_name)

        return mlflow.keras.load_model(local_path)

    def predict(self, image):
        image = self.preprocess(image)
        result = self.model.predict(image)
        return self.postprocess(result)

    def preprocess(self, image):
        image = cv2.resize(image, (256, 256))
        image = image / 255.
        image = np.expand_dims(image, 0)
        return image

    def postprocess(self, result):
        return result

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?

P.S. Bir neçə link buraxacağam:
github layihəsi - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Suallar üçün iş e-poçtum - [e-poçt qorunur]

Ş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 .

Mənbə: www.habr.com

Добавить комментарий