MLOps - Boky mahandro, toko 1

MLOps - Boky mahandro, toko 1

Salama daholo! Mpanamboatra CV ao amin'ny CROC aho. Efa 3 taona izao no nanatanteraka tetikasa eo amin’ny sehatry ny CV. Betsaka ny zavatra nataonay nandritra izany, ohatra: nanara-maso ny mpamily izahay mba tsy hisotrosotro, tsy nifoka sigara, tsy niresaka an-telefaonina, nijery ny lalana, fa tsy tamin’ny nofy na ny rahona. ; Noraisinay an-tsoratra ireo olona mitondra fiara amin'ny lalana voatokana ary maka toerana fiantsonan'ny fiara maromaro; niantoka fa nanao fiarovan-doha, fonon-tanana, sns ny mpiasa; nanondro mpiasa iray te hiditra ao amin'ilay trano; Noisainay izay rehetra azonay natao.

Inona no ataoko izany rehetra izany?

Eo am-panatanterahana ny tetikasa, dia midona amin'ny banga, be dia be, ny sasany amin'ireo olana efa mahazatra anao na ho fantatrao amin'ny ho avy.

Andao atao tahaka ny zava-misy

Alao sary an-tsaina fa nahazo asa tao amin'ny orinasa tanora "N", izay mifandray amin'ny ML ny asany. Miasa amin'ny tetikasa ML (DL, CV) izahay, avy eo noho ny antony sasany dia mifindra amin'ny asa hafa, amin'ny ankapobeny, maka aina, ary miverina amin'ny neuron-nay na olon-kafa.

  1. Tonga ny fotoanan'ny fahamarinana, mila tadidinao hoe taiza ianao no nijanona, inona ny hyperparameter nandramanao ary, ny tena zava-dehibe, inona no vokatr'izy ireo. Mety misy safidy maro ho an'izay mitahiry vaovao momba ny fandefasana rehetra: ao amin'ny loha, configs, notepad, amin'ny tontolo miasa ao amin'ny rahona. Sendra nahita safidy aho rehefa voatahiry ho andalana fanehoan-kevitra ao amin'ny kaody ny hyperparameters, amin'ny ankapobeny, sidina mahafinaritra. Eritrereto izao fa tsy niverina tamin'ny tetikasanao ianao, fa tamin'ny tetikasan'olona nandao ny orinasa ary nandova code sy modely antsoina hoe model_1.pb ianao. Mba hamenoana ny sary sy hampita ny fanaintainana rehetra, andeha hojerentsika fa ianao koa dia manam-pahaizana manokana.
  2. Ataovy tsy am-pihambahambana. Mba hampandehanana ny kaody dia mila mamorona tontolo iainana isika sy izay rehetra hiara-miasa aminy. Matetika izy ireo no tsy nandao azy ho lovantsika noho ny antony sasany. Mety ho lasa asa tsy misy dikany koa izany. Tsy te handany fotoana amin'ity dingana ity ianao, sa tsy izany?
  3. Manofana modely izahay (ohatra, mpitsikilo fiara). Tonga amin'ny teboka izay lasa tena tsara isika - tonga ny fotoana hamonjena ny vokatra. Aleo atao hoe car_detection_v1.pb. Avy eo dia manofana iray hafa - car_detection_v2.pb. Fotoana vitsy taty aoriana, ny mpiara-miasa na ny tenanay dia mampianatra bebe kokoa hatrany, mampiasa rafitra samihafa. Vokatr'izany dia misy andian-javakanto miforona, ny fampahalalana momba izay tsy maintsy angonina amim-pitandremana (saingy hataontsika izany any aoriana, satria amin'izao fotoana izao dia manana laharam-pahamehana bebe kokoa isika).
  4. OK dia tapitra izao! Manana modely izahay! Afaka manomboka manofana ny modely manaraka ve isika, mamolavola rafitra hamahana olana vaovao, sa afaka misotro dite? Ary iza no hametraka?

Famantarana olana

Ny asa amin'ny tetikasa na vokatra dia asan'ny olona maro. Ary rehefa mandeha ny fotoana, miala sy tonga ny olona, ​​misy tetikasa bebe kokoa, ary ny tetikasa mihitsy no lasa sarotra kokoa. Amin'ny fomba iray na hafa, ny toe-javatra avy amin'ny tsingerina voalaza etsy ambony (ary tsy izany ihany) amin'ny fitambarana sasany dia hitranga avy amin'ny famerimberenana. Izany rehetra izany dia miteraka fotoana lany, fisafotofotoana, fahatafintohinana, mety ho tsy fahafaham-po amin'ny mpanjifa, ary farany, very vola. Na dia mazàna aza isika rehetra dia manaraka rake taloha iray ihany, mino aho fa tsy misy olona te hamerina indray ireo fotoana ireo.

MLOps - Boky mahandro, toko 1

Noho izany, efa nandalo tsingerina fampandrosoana iray isika ary hita fa misy ny olana mila vahana. Mba hanaovana izany dia mila:

  • mitahiry tsara ny vokatry ny asa;
  • ataovy tsotra ny dingana fampidirana mpiasa vaovao;
  • hanamora ny fizotran'ny fametrahana tontolo iainana fampandrosoana;
  • amboary ny fizotran'ny famoahana modely;
  • manana fomba mety hanamarinana modely;
  • mitadiava fitaovana fitantanana fanjakana modely;
  • mitady fomba hanaterana modely amin'ny famokarana.

Toa ilaina ve ny mamorona workflow izay ahafahanao mitantana mora foana ity tsingerin'ny fiainana ity? Ity fanao ity dia antsoina hoe MLOps

MLOps, na DevOps ho an'ny fianarana milina, dia ahafahan'ny ekipan'ny siansa angon-drakitra sy ny IT hiara-hiasa sy hampitombo ny hafainganam-pandehan'ny famolavolana sy fametrahana modely amin'ny alàlan'ny fanaraha-maso, ny fanamarinana ary ny fitantanana ny maodely fianarana milina.

Azonao atao voninahitraInona no hevitr'ireo Google momba izany rehetra izany? Avy amin'ny lahatsoratra dia mazava fa ny MLOps dia zavatra be dia be.

MLOps - Boky mahandro, toko 1

Ao amin'ny lahatsoratro ihany no hamaritako ampahany amin'ny dingana. Ho fampiharana dia hampiasa ny fitaovana MLflow aho, satria ... Tetik'asa open-source ity, kaody kely no ilaina mba hifandraisana ary misy ny fampidirana ireo rafitra ml malaza. Azonao atao ny mikaroka fitaovana hafa ao amin'ny Internet, toy ny Kubeflow, SageMaker, Trains, sns., ary mety hahita fitaovana mifanaraka amin'ny filanao.

MLOps "Manorina" mampiasa ny ohatra amin'ny fampiasana ny fitaovana MLFlow

MLFlow dia sehatra loharano misokatra ho an'ny fitantanana ny fiainan'ny modely ml (https://mlflow.org/).

Ny MLflow dia misy singa efatra:

  • Fanaraha-maso ny MLflow - mirakitra ny olana momba ny valin'ny firaketana sy ny mari-pamantarana nahatonga an'io vokatra io;
  • Tetikasa MLflow - ahafahanao manangona kaody sy mamerina azy amin'ny sehatra rehetra;
  • Modely MLflow - tompon'andraikitra amin'ny fametrahana modely amin'ny famokarana;
  • MLflow Registry - ahafahanao mitahiry modely sy mitantana ny fanjakany ao anaty tahiry afovoany.

MLflow dia miasa amin'ny sampana roa:

  • Ny fanombohana dia fihodinana feno amin'ny fiofanana, masontsivana ary metrika izay tiantsika hisoratra anarana;
  • Ny andrana dia "lohahevitra" izay mandeha miaraka.

Ny dingana rehetra amin'ny ohatra dia ampiharina amin'ny rafitra fiasa Ubuntu 18.04.

1. Ampidiro ny mpizara

Mba hahafahantsika mitantana mora foana ny tetikasantsika sy mahazo ny fampahalalana ilaina rehetra, dia hametraka mpizara izahay. Ny mpizara mpanaraka ny MLflow dia manana singa roa lehibe:

  • fivarotana backend - tompon'andraikitra amin'ny fitahirizana vaovao momba ny modely voasoratra anarana (manohana DBMS 4: mysql, mssql, sqlite, ary postgresql);
  • fivarotana artifact - tompon'andraikitra amin'ny fitehirizana artifacts (manohana safidy fitahirizana 7: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP server, SFTP Server, NFS, HDFS).

Toy ny fivarotana artifact Ho fanatsorana, andeha haka mpizara sftp isika.

  • mamorona vondrona
    $ sudo groupadd sftpg
  • ampio mpampiasa ary asio tenimiafina ho azy
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • manitsy ny firafitry ny fidirana roa
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • ampio andalana vitsivitsy amin'ny /etc/ssh/sshd_config
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • avereno indray ny serivisy
    $ sudo systemctl restart sshd

Toy ny fivarotana backend Andao haka 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

Mba hanombohana ny mpizara dia mila mametraka ireto fonosana python manaraka ireto ianao (manoro hevitra aho hamorona tontolo virtoaly misaraka):

pip install mlflow
pip install pysftp

Andao hanomboka ny mpizara

$ 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. Ampio ny fanaraha-maso

Mba tsy ho very ny vokatry ny fanofanana, ny taranaka ho avy developer hahatakatra ny zava-nitranga, ary ho an'ny zokiolona mpiara-miasa sy ianao ho afaka mamakafaka am-pitoniana ny fizotry ny fianarana, dia mila manampy ny fanaraha-maso. Ny fanaraha-maso dia midika fa mitahiry masontsivana, metrika, artifacts ary fampahalalana fanampiny momba ny fanombohan'ny fiofanana, amin'ny tranga misy antsika, ao amin'ny server.

Ohatra, namorona kely aho tetikasa amin'ny github ao amin'ny Keras amin'ny fizarana izay rehetra ao anatiny Takelaka data COCO. Mba hanampiana ny fanaraha-maso dia namorona rakitra mlflow_training.py aho.

Ireto ny tsipika misy ny zavatra mahaliana indrindra:

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)

Eto ny self.remote_server dia fonosana kely amin'ny fomba mlflow.tracking. MlflowClient (natao ho an'ny fanamorana izany), miaraka amin'ny fanampiany dia mamorona fanandramana aho ary mihazakazaka izany amin'ny mpizara. Manaraka, asehoko hoe aiza no tokony hanambatra ny valin'ny fandefasana (mlflow.set_tracking_uri(self.tracking_uri)). Alefako ny logging mandeha ho azy mlflow.keras.autolog(). Amin'izao fotoana izao, ny MLflow Tracking dia manohana ny fidirana mandeha ho azy ho an'ny TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Raha tsy nahita ny framework na tranombokinao ianao dia afaka miditra an-tsoratra mazava foana. Manomboka fiofanana izahay. Soraty ny marika sy ny mari-pamantarana fampidirana amin'ny mpizara lavitra.

Andalana roa ary ianao, tahaka ny olon-drehetra, dia afaka mahazo vaovao momba ny fandefasana rehetra. Mangatsiaka?

3. Manamboatra ny tetikasa izahay

Andao izao hanamora ny fanombohana ny tetikasa. Mba hanaovana izany, ampio ny rakitra MLproject sy conda.yaml amin'ny fotony tetikasa.
MLproject

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

Ny MLflow Project dia manana fananana maromaro:

  • Anarana - ny anaran'ny tetikasanao;
  • Tontolo iainana - raha ny ahy, conda_env dia manondro fa Anaconda no ampiasaina ary ny famaritana ny fiankinan-doha dia ao amin'ny conda.yaml rakitra;
  • Entry Points - manondro izay rakitra sy izay masontsivana azontsika atao (ny paramètre rehetra dia miditra ho azy rehefa manomboka fiofanana)

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

Azonao atao ny mampiasa docker ho toy ny tontolo iainanao, raha mila fanazavana fanampiny azafady jereo tahirin-kevitra.

4. Andeha isika hanomboka fiofanana

Mamoaka ny tetikasa izahay ary mankamin'ny lahatahiry tetikasa:

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

Mba hampandehanana dia mila mametraka tranomboky ianao

pip install mlflow
pip install pysftp

SATRIA Ao amin'ny ohatra ampiasaiko conda_env, Anaconda dia tsy maintsy apetraka amin'ny solosainao (fa azonao atao ny miala amin'izany amin'ny alàlan'ny fametrahana ny fonosana ilaina rehetra ary milalao miaraka amin'ny paramètre fanombohana).

Vita avokoa ny dingana fanomanana rehetra ary afaka manomboka ny fiofanana isika. Avy amin'ny fototry ny tetikasa:

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

Aorian'ny fidirana amin'ny baiko dia hatsangana ho azy ny tontolo conda ary hanomboka ny fiofanana.
Ao amin'ny ohatra etsy ambony dia nandalo ny isan'ny vanim-potoana fanofanana aho, ireo sokajy izay tiantsika hozaraina (azonao jerena ny lisitra feno eto) ary ny adiresin'ny mpizara lavitra anay.
Ny lisitra feno amin'ny masontsivana azo atao dia hita ao amin'ny rakitra MLproject.

5. Tombanana ny vokatry ny fianarana

Rehefa vita ny fiofanana dia afaka miditra amin'ny navigateur mankany amin'ny adiresin'ny mpizara http://server_host:server_port

MLOps - Boky mahandro, toko 1

Hitantsika eto ny lisitry ny andrana rehetra (ambony havia), ary koa ny fampahalalana momba ny hazakazaka (afovoany). Afaka mijery fampahalalana amin'ny antsipiriany bebe kokoa izahay (parameter, metrika, artifacts ary fampahalalana fanampiny) isaky ny fandefasana.

MLOps - Boky mahandro, toko 1

Ho an'ny metrika tsirairay dia afaka mandinika ny tantaran'ny fiovana isika

MLOps - Boky mahandro, toko 1

Ireo. Amin'izao fotoana izao, afaka mamakafaka ny valiny amin'ny fomba "manual" izahay, ary azonao atao koa ny manangana fanamarinana mandeha ho azy amin'ny alàlan'ny MLflow API.

6. Soraty ny modely

Rehefa avy nandinika ny maodely izahay ary nanapa-kevitra fa vonona amin'ny ady, dia miroso amin'ny fisoratana anarana izahay, noho izany dia misafidy ny fandefasana izay ilaintsika (araka ny aseho amin'ny andalana teo aloha) ary midina.

MLOps - Boky mahandro, toko 1

Rehefa nomena anarana ny modely misy antsika dia manana dikan-teny izy io. Raha mitahiry modely hafa mitovy anarana ianao, dia havaozina ho azy ny dikan-teny.

MLOps - Boky mahandro, toko 1

Ho an'ny maodely tsirairay dia afaka manampy famaritana isika ary misafidy iray amin'ireo fanjakana telo (Staging, Production, Archived); avy eo, amin'ny fampiasana ny API, dia afaka miditra amin'ireo fanjakana ireo isika, izay, miaraka amin'ny versioning, dia manome fahafaha-manao fanampiny.

MLOps - Boky mahandro, toko 1

Afaka miditra mora amin'ny modely rehetra ihany koa izahay

MLOps - Boky mahandro, toko 1

sy ny dikan-dry zareo

MLOps - Boky mahandro, toko 1

Toy ny tamin'ny andalana teo aloha, ny asa rehetra dia azo atao amin'ny alàlan'ny API.

7. Apetraho ny modely

Amin'ity dingana ity dia efa manana modely (keras) voaofana izahay. Ohatra iray amin'ny fampiasanao azy:

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

Eto indray ny self.registry dia fonosina kely eo ambonin'ny mlflow.tracking.MlflowClient, ho fanamorana. Ny teboka dia ny fidirana amin'ny mpizara lavitra aho ary mitady modely misy ny anarana voatondro, ary ny dikan-teny famokarana farany. Avy eo, alaiko ao amin'ny lahatahiry ./modely ny artifact ary amboary avy amin'ity lahatahiry mlflow.keras.load_model(local_path) ity ny modely. Afaka mampiasa ny modelintsika isika izao. Ny mpamorona CV (ML) dia afaka manatsara mora foana ny modely ary mamoaka dikan-teny vaovao.

Ho famaranana

Nanolotra rafitra aho izay mamela:

  • mitahiry vaovao momba ny maodely ML, ny fivoaran'ny fiofanana ary ny vokatra;
  • mametraka haingana tontolo iainana fampandrosoana;
  • manara-maso sy mandinika ny fivoaran'ny asa amin'ny modely;
  • mety ny dikan-teny sy ny fitantanana ny toetry ny modely;
  • Mora ny mametraka ireo modely vokarina.

Ity ohatra ity dia kilalao ary miasa ho toy ny teboka fanombohana amin'ny fananganana ny rafitrao manokana, izay mety ahitana automatique ny fanombanana ny vokatra sy ny fisoratana anarana modely (teboka 5 sy 6, tsirairay avy) na ianao dia hanampy versioning ny datasets, na mety zavatra hafa ? Ny teboka niezahako natao dia ny hoe mila MLOps ianao amin'ny ankapobeny, ny MLflow dia fomba iray hamaranana fotsiny.

Soraty izay olana sedrainao izay tsy nasehoko?
Inona no hanampy anao amin'ny rafitra mba hahafeno ny filanao?
Inona no fitaovana sy fomba fiasa ampiasainao hamahana ny olana rehetra na ampahany?

PS Hamela rohy roa aho:
tetikasa github - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Ny mailaka momba ny asako ho an'ny fanontaniana - [email voaaro]

Ny orinasanay dia mampiantrano hetsika isan-karazany ho an'ny manam-pahaizana momba ny IT, ohatra: amin'ny 8 Jolay amin'ny 19:00 ora ao Moskoa dia hisy ny fihaonana CV amin'ny endrika an-tserasera, raha liana ianao dia afaka mandray anjara, fisoratana anarana. eto .

Source: www.habr.com

Add a comment