MLOps - Libro sa pagluto, kapitulo 1

MLOps - Libro sa pagluto, kapitulo 1

Kumusta tanan! Usa ko ka CV developer sa CROC. Kami nag-implementar sa mga proyekto sa natad sa CV sulod sa 3 ka tuig na karon. Niining panahona, daghan kamig gibuhat, pananglitan: among gibantayan ang mga drayber aron samtang nagdrayb dili sila moinom, dili manigarilyo, dili makig-estorya sa telepono, motan-aw sa dalan, ug dili sa mga damgo o sa mga panganod. ; Among girekord ang mga tawo nga nagdrayb sa gipahinungod nga mga agianan ug migamit sa daghang mga parkinganan; gisiguro nga ang mga trabahante nagsul-ob og helmet, gwantis, ug uban pa; giila ang usa ka empleyado nga gustong mosulod sa pasilidad; Giihap namo ang tanan nga among mahimo.

Para sa unsa man nako kining tanan?

Sa proseso sa pag-implementar sa mga proyekto, naigo kami sa mga bumps, daghang mga bumps, pipila sa mga problema nga imong nahibal-an o mahibal-an sa umaabot.

Atong i-simulate ang sitwasyon

Hunahunaa nga nakakuha kami trabaho sa usa ka batan-ong kompanya nga "N", kansang mga kalihokan adunay kalabotan sa ML. Nagtrabaho mi sa usa ka proyekto sa ML (DL, CV), unya sa pipila ka rason mibalhin mi sa laing trabaho, kasagarang mopahuway, ug mobalik sa neuron namo o sa laing tawo.

  1. Ang gutlo sa kamatuoran moabut, kinahanglan nimo nga hinumdoman kung diin ka mihunong, kung unsang mga hyperparameter ang imong gisulayan ug, labing hinungdanon, kung unsa ang mga sangputanan nga ilang nahimo. Mahimong adunay daghang mga kapilian kung kinsa ang nagtipig sa kasayuran sa tanan nga mga paglansad: sa ulo, mga config, notepad, sa usa ka palibot nga nagtrabaho sa panganod. Nakita nako ang usa ka kapilian sa dihang ang mga hyperparameter gitipigan ingon nga mga linya sa komentaryo sa code, sa kinatibuk-an, usa ka flight sa fancy. Karon hunahunaa nga mibalik ka dili sa imong proyekto, apan sa proyekto sa usa ka tawo nga mibiya sa kompanya ug nakapanunod ka og code ug modelo nga gitawag og model_1.pb. Aron makompleto ang hulagway ug ipasabot ang tanang kasakit, atong hunahunaon nga ikaw usa usab ka bag-ong espesyalista.
  2. Sige na nga. Aron mapadagan ang code, kami ug ang tanan nga motrabaho niini kinahanglan nga maghimo usa ka palibot. Kasagaran mahitabo nga sa pipila ka rason wala nila siya biyai isip atong kabilin. Mahimo usab kini nga usa ka dili hinungdanon nga buluhaton. Dili nimo gusto nga mag-usik ug oras sa kini nga lakang, dili ba?
  3. Gibansay namo ang usa ka modelo (pananglitan, usa ka detector sa sakyanan). Moabot kami sa punto diin kini mahimong maayo kaayo - panahon na aron i-save ang resulta. Tawgon nato ni nga car_detection_v1.pb. Unya nagbansay kami sa usa pa - car_detection_v2.pb. Paglabay sa pipila ka panahon, ang among mga kauban o kami mismo nagtudlo ug dugang, gamit ang lainlaing mga arkitektura. Ingon usa ka sangputanan, usa ka hugpong sa mga artifact ang naporma, ang kasayuran bahin sa kung diin kinahanglan nga makugihon nga kolektahon (apan buhaton namon kini sa ulahi, tungod kay sa pagkakaron adunay labi pa nga prayoridad nga mga butang).
  4. OK na ang tanan Karon! Naa mi modelo! Mahimo ba natong sugdan ang pagbansay sa sunod nga modelo, pagpalambo sa usa ka arkitektura aron masulbad ang usa ka bag-ong problema, o mahimo ba kitang moadto og tsa? Ug kinsay mag-deploy?

Pag-ila sa mga problema

Ang pagtrabaho sa usa ka proyekto o produkto trabaho sa daghang mga tawo. Ug sa paglabay sa panahon, ang mga tawo mobiya ug moabut, adunay daghang mga proyekto, ug ang mga proyekto mismo nahimong labi ka komplikado. Usa ka paagi o lain, ang mga sitwasyon gikan sa siklo nga gihulagway sa ibabaw (ug dili lamang) sa pipila nga mga kombinasyon mahitabo gikan sa pag-uli ngadto sa pag-uli. Kining tanan moresulta sa nausik nga panahon, kalibog, kakulba, posibleng pagkadiskontento sa kustomer, ug sa kataposan, pagkawala sa kuwarta. Bisan kung kasagaran natong tanan nagsunod sa parehas nga karaan nga rake, nagtuo ako nga wala’y usa nga gusto nga ibalik kini nga mga higayon nga balik-balik.

MLOps - Libro sa pagluto, kapitulo 1

Busa, miagi kami sa usa ka siklo sa pag-uswag ug nakita namon nga adunay mga problema nga kinahanglan sulbaron. Aron mahimo kini kinahanglan nimo:

  • hamugaway nga pagtipig sa mga resulta sa trabaho;
  • himoong simple ang proseso sa pag-apil sa bag-ong mga empleyado;
  • pasimplehon ang proseso sa pagdeploy ug development environment;
  • i-configure ang proseso sa pag-bersyon sa modelo;
  • adunay usa ka sayon ​​​​nga paagi sa pag-validate sa mga modelo;
  • pagpangita og modelo nga himan sa pagdumala sa estado;
  • pagpangita og paagi sa paghatud sa mga modelo ngadto sa produksyon.

Dayag nga kinahanglan nga maghimo usa ka dagan sa trabaho nga magtugot kanimo nga dali ug dali nga madumala kini nga siklo sa kinabuhi? Kini nga praktis gitawag ug MLOps

Ang MLOps, o DevOps alang sa pagkat-on sa makina, nagtugot sa mga data science ug IT teams nga magtinabangay ug madugangan ang dagan sa pagpalambo ug pag-deploy sa modelo pinaagi sa pagmonitor, pag-validate, ug pagdumala alang sa mga modelo sa pagkat-on sa makina.

Mahimo nimo basahaUnsa ang gihunahuna sa mga tawo sa Google bahin niining tanan? Gikan sa artikulo klaro nga ang MLOps usa ka dako nga butang.

MLOps - Libro sa pagluto, kapitulo 1

Dugang pa sa akong artikulo akong ihulagway ang bahin lamang sa proseso. Alang sa pagpatuman, akong gamiton ang himan sa MLflow, tungod kay... Kini usa ka open-source nga proyekto, usa ka gamay nga kantidad sa code ang gikinahanglan aron makonektar ug adunay panagsama sa mga sikat nga ml nga mga balangkas. Makapangita ka sa Internet alang sa ubang mga himan, sama sa Kubeflow, SageMaker, Trains, ug uban pa, ug tingali makakita og usa nga mas haum sa imong mga panginahanglan.

"Pagtukod" nga MLOps gamit ang pananglitan sa paggamit sa MLFlow tool

Ang MLFlow usa ka open source nga plataporma alang sa pagdumala sa lifecycle sa mga modelo sa ml (https://mlflow.org/).

Ang MLflow naglakip sa upat ka mga sangkap:

  • Pagsubay sa MLflow - naglangkob sa mga isyu sa pagrekord sa mga resulta ug mga parameter nga misangpot niini nga resulta;
  • MLflow Project - nagtugot kanimo sa pag-package sa code ug pagkopya niini sa bisan unsang plataporma;
  • Mga Modelo sa MLflow - responsable sa pag-deploy sa mga modelo sa produksiyon;
  • MLflow Registry - nagtugot kanimo sa pagtipig sa mga modelo ug pagdumala sa ilang estado sa usa ka sentralisadong repositoryo.

Ang MLflow naglihok sa duha ka entidad:

  • Ang paglansad usa ka tibuuk nga siklo sa pagbansay, mga parameter ug mga sukatan diin gusto namon nga magparehistro;
  • Ang usa ka eksperimento usa ka "topiko" nga naghiusa.

Ang tanan nga mga lakang sa pananglitan gipatuman sa Ubuntu 18.04 operating system.

1. I-deploy ang server

Aron dali namong madumala ang among proyekto ug makadawat sa tanang gikinahanglang impormasyon, mag-deploy kami og server. Ang server sa pagsubay sa MLflow adunay duha ka panguna nga sangkap:

  • backend store - responsable sa pagtipig sa impormasyon mahitungod sa mga rehistradong modelo (nagsuporta sa 4 DBMSs: mysql, mssql, sqlite, ug postgresql);
  • tindahan sa artifact - responsable sa pagtipig sa mga artifact (nagsuporta sa 7 nga mga kapilian sa pagtipig: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP server, SFTP Server, NFS, HDFS).

Isip usa ka tindahan sa artifact Alang sa kayano, atong kuhaon ang sftp server.

  • paghimo og grupo
    $ sudo groupadd sftpg
  • pagdugang ug user ug pagbutang ug password para niya
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • pag-adjust sa pipila ka mga setting sa pag-access
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • pagdugang og pipila ka linya sa /etc/ssh/sshd_config
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • i-restart ang serbisyo
    $ sudo systemctl restart sshd

Isip usa ka backend nga tindahan Atong kuhaon ang 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

Aron masugdan ang server, kinahanglan nimo nga i-install ang mosunud nga mga pakete sa python (girekomenda ko ang paghimo usa ka lahi nga virtual nga palibot):

pip install mlflow
pip install pysftp

Atong sugdan ang atong server

$ 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. Idugang ang pagsubay

Aron ang mga resulta sa among pagbansay dili mawala, ang umaabot nga mga henerasyon sa mga developers nga masabtan kung unsa ang nahitabo, ug alang sa mga tigulang nga kauban ug ikaw nga makahimo sa kalma nga pag-analisar sa proseso sa pagkat-on, kinahanglan namon nga idugang ang pagsubay. Ang pagsubay nagpasabut sa pagtipig sa mga parameter, sukatan, artifact ug bisan unsang dugang nga kasayuran bahin sa pagsugod sa pagbansay, sa among kaso, sa server.

Pananglitan, naghimo ko og gamay proyekto sa github sa Keras alang sa pagbahin sa tanan nga naa sa Mga datos sa COCO. Aron makadugang pagsubay, naghimo ko og file mlflow_training.py.

Ania ang mga linya diin ang labing makapaikag nga mga butang mahitabo:

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)

Dinhi ang self.remote_server usa ka gamay nga wrapper sa mlflow.tracking nga mga pamaagi. MlflowClient (Gihimo ko kini alang sa kasayon), uban sa tabang nga naghimo ako usa ka eksperimento ug gipadagan kini sa server. Sunod, gipakita nako kung diin ang mga resulta sa paglansad kinahanglan i-merge (mlflow.set_tracking_uri(self.tracking_uri)). Gi-enable nako ang automatic logging mlflow.keras.autolog(). Sa pagkakaron ang MLflow Tracking nagsuporta sa awtomatikong pag-log alang sa TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Kung wala nimo makit-an ang imong balangkas o librarya, mahimo ka kanunay nga mag-log nga klaro. Nagsugod kami sa pagbansay. Irehistro ang mga tag ug input parameter sa hilit nga server.

Pipila ka linya ug ikaw, sama sa uban, adunay access sa impormasyon bahin sa tanang paglansad. Bugnaw?

3. Atong gilaraw ang proyekto

Karon himoon nato nga sayon ​​ang paglansad sa proyekto. Aron mahimo kini, idugang ang MLproject ug conda.yaml nga file sa gamut sa proyekto.
MLproyekto

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}"

Ang MLflow Project adunay daghang mga kabtangan:

  • Ngalan - ang ngalan sa imong proyekto;
  • Environment - sa akong kaso, conda_env nagpakita nga Anaconda gigamit sa pagdagan ug ang dependency deskripsyon anaa sa conda.yaml file;
  • Mga Punto sa Pag-entry - nagpaila kung unsang mga file ug kung unsang mga parameter ang mahimo naton pagdagan (ang tanan nga mga parameter awtomatiko nga na-log sa pagsugod sa pagbansay)

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

Mahimo nimong gamiton ang docker isip imong runtime environment, para sa dugang nga mga detalye palihog tan-awa dokumentasyon.

4. Magsugod ta sa pagbansay

Among gi-clone ang proyekto ug adto sa direktoryo sa proyekto:

git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/

Aron makadagan kinahanglan nimo nga i-install ang mga librarya

pip install mlflow
pip install pysftp

Kay sa panig-ingnan nga akong gigamit conda_env, Anaconda kinahanglan nga i-install sa imong computer (apan mahimo nimo kini malibot pinaagi sa pag-install sa tanan nga kinahanglan nga mga pakete sa imong kaugalingon ug pagdula sa mga parameter sa paglansad).

Ang tanan nga mga lakang sa pag-andam nahuman ug mahimo na naton sugdan ang paglansad sa pagbansay. Gikan sa gamut sa proyekto:

$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .

Human sa pagsulod sa sugo, usa ka conda nga palibot ang awtomatik nga himoon ug ang pagbansay magsugod.
Sa pananglitan sa ibabaw, gipasa nako ang gidaghanon sa mga panahon alang sa pagbansay, ang mga kategorya nga gusto namon nga bahinon (makita nimo ang tibuuk nga lista dinhi) ug ang adres sa among remote server.
Ang usa ka kompleto nga lista sa posible nga mga parameter makita sa MLproject file.

5. Timbang-timbanga ang mga resulta sa pagkat-on

Human makompleto ang pagbansay, makaadto kami sa browser sa adres sa among server http://server_host:server_port

MLOps - Libro sa pagluto, kapitulo 1

Dinhi atong makita ang usa ka lista sa tanang mga eksperimento (ibabaw sa wala), ingon man ang impormasyon sa mga dagan (tunga). Makita namo ang mas detalyadong impormasyon (parameter, metrics, artifacts ug pipila ka dugang nga impormasyon) para sa matag paglusad.

MLOps - Libro sa pagluto, kapitulo 1

Alang sa matag metric atong maobserbahan ang kasaysayan sa mga kausaban

MLOps - Libro sa pagluto, kapitulo 1

Mga. Sa pagkakaron, mahimo namong analisahon ang mga resulta sa β€œmanual” mode, ug mahimo ka usab nga mag-set up og automatic validation gamit ang MLflow API.

6. Irehistro ang modelo

Pagkahuman namo pag-analisar sa among modelo ug nakahukom nga andam na kini alang sa gubat, nagpadayon kami sa pagparehistro niini, alang niini among gipili ang paglansad nga among gikinahanglan (sama sa gipakita sa miaging parapo) ug nanaog.

MLOps - Libro sa pagluto, kapitulo 1

Human namo hatagan ug ngalan ang among modelo, aduna kini bersyon. Kung magtipig ka ug lain nga modelo nga adunay parehas nga ngalan, ang bersyon awtomatiko nga ma-upgrade.

MLOps - Libro sa pagluto, kapitulo 1

Alang sa matag modelo, makadugang kami usa ka paghulagway ug makapili usa sa tulo nga mga estado (Staging, Production, Archived); pagkahuman, gamit ang API, mahimo naton ma-access kini nga mga estado, nga, kauban ang pag-bersyon, naghatag dugang nga kadali.

MLOps - Libro sa pagluto, kapitulo 1

Adunay usab kami dali nga pag-access sa tanan nga mga modelo

MLOps - Libro sa pagluto, kapitulo 1

ug ang ilang mga bersyon

MLOps - Libro sa pagluto, kapitulo 1

Sama sa miaging parapo, ang tanan nga mga operasyon mahimo gamit ang API.

7. I-deploy ang modelo

Niini nga yugto, aduna na kitay nabansay nga (keras) nga modelo. Usa ka pananglitan kung giunsa nimo kini magamit:

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

Dinhi ang self.registry usa na usab ka gamay nga wrapper sa mlflow.tracking.MlflowClient, para sa kasayon. Ang punto mao nga nag-access ako sa usa ka hilit nga server ug nangita usa ka modelo didto nga adunay gipiho nga ngalan, ug ang pinakabag-o nga bersyon sa produksiyon. Sunod, akong i-download ang artifact sa lokal sa ./model folder ug pagtukod sa modelo gikan niini nga direktoryo mlflow.keras.load_model(local_path). Karon magamit na nato ang atong modelo. Ang mga developer sa CV (ML) dali nga makapauswag sa modelo ug makapatik sa bag-ong mga bersyon.

Sa konklusyon

Gipresentar nako ang usa ka sistema nga nagtugot:

  • sentral nga pagtipig og impormasyon bahin sa mga modelo sa ML, pag-uswag sa pagbansay ug mga resulta;
  • dali nga ipakaylap ang usa ka palibot sa pag-uswag;
  • pag-monitor ug pag-analisar sa pag-uswag sa trabaho sa mga modelo;
  • kini kombenyente sa bersyon ug pagdumala sa kahimtang sa mga modelo;
  • Sayon ang pag-deploy sa mga resulta nga mga modelo.

Kini nga pananglitan usa ka dulaan ug nagsilbi nga punto sa pagsugod sa pagtukod sa imong kaugalingon nga sistema, nga mahimong maglakip sa automation sa pagtimbang-timbang sa mga resulta ug pagrehistro sa mga modelo (mga punto 5 ug 6, matag usa) o idugang nimo ang pag-bersyon sa mga dataset, o tingali lain pa? Ang punto nga akong gipaningkamutan nga buhaton mao nga kinahanglan nimo ang mga MLOps sa kinatibuk-an, ang MLflow usa ra ka paagi aron matapos.

Isulat kung unsang mga problema ang imong nasugatan nga wala nako gipakita?
Unsa ang imong idugang sa sistema aron matubag ang imong mga panginahanglan?
Unsa nga mga himan ug pamaagi ang imong gigamit sa pagsulbad sa tanan o bahin sa mga problema?

PS magbilin ko ug duha ka link:
github nga proyekto - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Ang akong email sa trabaho alang sa mga pangutana - [protektado sa email]

Ang among kompanya matag karon ug unya nag-host sa lainlaing mga panghitabo alang sa mga espesyalista sa IT, pananglitan: sa Hulyo 8 sa 19:00 nga oras sa Moscow adunay usa ka CV meetup sa usa ka online nga format, kung interesado ka, mahimo ka makaapil, pagrehistro dinhi .

Source: www.habr.com

Idugang sa usa ka comment