MLOps - Leabhar còcaireachd, caibideil 1

MLOps - Leabhar còcaireachd, caibideil 1

Hi uile! Tha mi nam leasaiche CV aig CROC. Tha sinn air a bhith a’ cur phròiseactan an gnìomh ann an raon CV airson 3 bliadhna a-nis. Rè na h-ùine seo, rinn sinn tòrr rudan, mar eisimpleir: rinn sinn sùil air draibhearan gus nach robh iad ag òl, cha robh iad a 'smocadh, nach do bhruidhinn iad air a' fòn, a 'coimhead air an rathad, agus chan ann air aislingean no air na sgòthan. ; Chlàr sinn daoine a bhios a’ draibheadh ​​ann an slighean sònraichte agus a’ gabhail grunn àiteachan pàircidh; dèanamh cinnteach gu robh clogaidean, miotagan, msaa air an luchd-obrach; comharraich neach-obrach a tha airson a dhol a-steach don ghoireas; Chunnt sinn a h-uile rud a b’ urrainn dhuinn.

Carson a tha mi a’ dèanamh seo uile?

Anns a 'phròiseas a bhith a' cur an gnìomh phròiseactan, bidh sinn a 'bualadh air cnapan, tòrr chnapan, cuid de na duilgheadasan air a bheil thu eòlach no air am fàs thu eòlach san àm ri teachd.

Dèanamaid atharrais air an t-suidheachadh

Smaoinich gun d’ fhuair sinn obair aig companaidh òg “N”, aig a bheil gnìomhan co-cheangailte ri ML. Bidh sinn ag obair air pròiseact ML (DL, CV), an uairsin airson adhbhar air choireigin bidh sinn a’ gluasad gu obair eile, mar as trice a’ gabhail fois, agus a’ tilleadh gu ar neuron fhèin no cuideigin eile.

  1. Tha mionaid na fìrinn a’ tighinn, feumaidh tu dòigh air choireigin cuimhneachadh far an do stad thu, dè na hyperparameters a dh’ fheuch thu agus, nas cudromaiche, dè na toraidhean a dh’ adhbhraich iad. Faodaidh mòran roghainnean a bhith ann airson cò a stòradh fiosrachadh air a h-uile cur air bhog: sa cheann, configs, notepad, ann an àrainneachd obrach san sgòth. Thachair mi a bhith a’ faicinn roghainn nuair a bha hyperparameters air an stòradh mar loidhnichean a chaidh aithris sa chòd, san fharsaingeachd, turas-adhair. A-nis smaoinich nach do thill thu chun phròiseact agad, ach gu pròiseact neach a dh’ fhàg a ’chompanaidh agus a shealbhaich thu còd agus modail ris an canar model_1.pb. Gus an dealbh a chrìochnachadh agus a h-uile pian a thoirt seachad, smaoinich sinn gu bheil thu cuideachd nad eòlaiche tòiseachaidh.
  2. Siuthad. Gus an còd a ruith, feumaidh sinn fhèin agus a h-uile duine a bhios ag obair leis àrainneachd a chruthachadh. Bidh e tric a 'tachairt nach do dh' fhàg iad e mar ar n-oighreachd airson adhbhar air choireigin. Faodaidh seo cuideachd a bhith na obair neo-bheag. Chan eil thu airson ùine a chaitheamh air a’ cheum seo, a bheil?
  3. Bidh sinn a’ trèanadh modail (mar eisimpleir, lorgaire càr). Bidh sinn a’ faighinn chun na h-ìre far am fàs e glè mhath - tha an t-àm ann an toradh a shàbhaladh. Canaidh sinn car_detection_v1.pb ris. An uairsin bidh sinn a’ trèanadh fear eile - car_detection_v2.pb. Greis às deidh sin, bidh ar co-obraichean no sinn fhìn a’ teagasg barrachd is barrachd, a’ cleachdadh diofar ailtirean. Mar thoradh air an sin, tha dòrlach de stuthan air an cruthachadh, feumar fiosrachadh mu dheidhinn a chruinneachadh gu faiceallach (ach nì sinn seo nas fhaide air adhart, oir airson a-nis tha barrachd chùisean prìomhachais againn).
  4. Ceart gu leòr tha e seachad a-nis! Tha modail againn! An urrainn dhuinn tòiseachadh air an ath mhodail a thrèanadh, ailtireachd a leasachadh gus fuasgladh fhaighinn air duilgheadas ùr, no an urrainn dhuinn tì a ghabhail? Agus cò a bhios ga chleachdadh?

A 'comharrachadh dhuilgheadasan

Is e obair mòran dhaoine a bhith ag obair air pròiseact no toradh. Agus thar ùine, bidh daoine a’ falbh agus a’ tighinn, tha barrachd phròiseactan ann, agus bidh na pròiseactan fhèin a’ fàs nas iom-fhillte. Aon dòigh no dòigh eile, bidh suidheachaidhean bhon chearcall a chaidh a mhìneachadh gu h-àrd (agus chan ann a-mhàin) ann an cuid de choimeasgaidhean a’ tachairt bho ath-aithris gu ath-aithris. Bidh seo uile a’ leantainn gu caitheamh ùine, troimh-chèile, nearbhan, is dòcha mì-riarachas teachdaiche, agus aig a’ cheann thall, airgead air chall. Ged a bhios sinn uile mar as trice a’ leantainn an aon seann ràcan, tha mi a’ creidsinn nach eil duine airson na h-amannan sin ath-bheothachadh a-rithist is a-rithist.

MLOps - Leabhar còcaireachd, caibideil 1

Mar sin, tha sinn air a dhol tro aon chearcall leasachaidh agus chì sinn gu bheil duilgheadasan ann a dh’ fheumar fhuasgladh. Gus seo a dhèanamh feumaidh tu:

  • stòradh gu h-iomchaidh toraidhean obrach;
  • dèan am pròiseas com-pàirteachaidh luchd-obrach ùr sìmplidh;
  • sìmplidh a dhèanamh air a 'phròiseas a bhith a' cleachdadh àrainneachd leasachaidh;
  • rèiteachadh a 'phròiseas dreach modail;
  • dòigh fhreagarrach air modailean a dhearbhadh;
  • lorg modail inneal stiùireadh stàite;
  • lorg dòigh air modalan a lìbhrigeadh gu cinneasachadh.

A rèir coltais tha e riatanach sruth-obrach a chruthachadh a leigeadh leat an cearcall-beatha seo a riaghladh gu furasta agus gu goireasach? Canar MLOps ris a’ chleachdadh seo

Tha MLOps, no DevOps airson ionnsachadh innealan, a’ leigeil le sgiobaidhean saidheans dàta agus IT co-obrachadh agus astar leasachadh is cleachdadh mhodail a mheudachadh tro sgrùdadh, dearbhadh, agus riaghladh airson modalan ionnsachaidh innealan.

Faodaidh tu leughDè a tha Google guys a’ smaoineachadh mu dheidhinn seo uile? Bhon artaigil tha e soilleir gur e rud gu math voluminous a th’ ann am MLOps.

MLOps - Leabhar còcaireachd, caibideil 1

Nas fhaide san artaigil agam cha toir mi cunntas ach air pàirt den phròiseas. Airson a bhuileachadh, cleachdaidh mi an inneal MLflow, oir ... Is e pròiseact stòr fosgailte a tha seo, tha feum air beagan còd gus ceangal a dhèanamh agus tha amalachadh le frèaman ml mòr-chòrdte. Faodaidh tu sgrùdadh a dhèanamh air an eadar-lìn airson innealan eile, leithid Kubeflow, SageMaker, Trains, msaa, agus is dòcha fear a lorg a fhreagras air na feumalachdan agad.

MLOps “Togail” a’ cleachdadh an eisimpleir de bhith a’ cleachdadh an inneal MLFlow

Tha MLFlow na àrd-ùrlar stòr fosgailte airson riaghladh cuairt-beatha de mhodalan ml (https://mlflow.org/).

Tha ceithir pàirtean aig MLflow:

  • Rianachd MLflow - a’ còmhdach na cùisean mu bhith a’ clàradh thoraidhean agus paramadairean a lean gu an toradh seo;
  • Pròiseact MLflow - a’ leigeil leat còd a phacadh agus ath-riochdachadh air àrd-ùrlar sam bith;
  • Modalan MLflow - cunntachail airson modalan a chuir gu cinneasachadh;
  • Clàradh MLflow - a ’toirt cothrom dhut modalan a stòradh agus an stàit aca a riaghladh ann an stòr meadhanaichte.

Tha MLflow ag obair air dà bhuidheann:

  • tha cur air bhog na chearcall iomlan de thrèanadh, paramadairean agus meatrach leis a bheil sinn airson clàradh;
  • Tha deuchainn na “cuspair” a tha a’ ruith còmhla.

Tha a h-uile ceum den eisimpleir air a bhuileachadh air siostam-obrachaidh Ubuntu 18.04.

1. Cuir a-mach am frithealaiche

Gus an urrainn dhuinn ar pròiseact a riaghladh gu furasta agus am fiosrachadh riatanach uile fhaighinn, cuiridh sinn frithealaiche an sàs. Tha dà phrìomh phàirt aig frithealaiche tracadh MLflow:

  • stòr backend - le uallach airson fiosrachadh a stòradh mu mhodalan clàraichte (a ’toirt taic do 4 DBMSs: mysql, mssql, sqlite, agus postgresql);
  • stòr artifact - le uallach airson artifacts a stòradh (a ’toirt taic do 7 roghainnean stòraidh: Amazon S3, Azure Blob Storage, Google Cloud Storage, frithealaiche FTP, SFTP Server, NFS, HDFS).

Mar a stòr artifact Airson sìmplidh, gabhamaid frithealaiche sftp.

  • cruthaich buidheann
    $ sudo groupadd sftpg
  • cuir cleachdaiche ris agus suidhich facal-faire dha
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • ag atharrachadh suidheachadh ruigsinneachd no dhà
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • cuir beagan loidhnichean ri /etc/ssh/sshd_config
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • ath-thòisich an t-seirbheis
    $ sudo systemctl restart sshd

Mar a stòr cùil Gabhamaid 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

Gus am frithealaiche a thòiseachadh, feumaidh tu na pacaidean python a leanas a stàladh (tha mi a’ moladh àrainneachd bhrìgheil air leth a chruthachadh):

pip install mlflow
pip install pysftp

Tòisichidh sinn ar frithealaiche

$ 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. Cuir tracadh

Gus nach tèid toraidhean an trèanaidh againn a chall, gum bi ginealaichean de luchd-leasachaidh san àm ri teachd a 'tuigsinn dè bha a' tachairt, agus airson seann chompanaich agus thu fhèin a bhith comasach air mion-sgrùdadh socair a dhèanamh air a 'phròiseas ionnsachaidh, feumaidh sinn tracadh a chur ris. Tha tracadh a’ ciallachadh a bhith a’ sàbhaladh paramadairean, metrics, artifacts agus fiosrachadh a bharrachd mu thoiseach trèanaidh, anns a’ chùis againn, air an t-seirbheisiche.

Mar eisimpleir, chruthaich mi fear beag pròiseact air github air Keras airson a h-uile dad a th’ ann a sgaradh Stòr-dàta COCO. Gus tracadh a chuir ris, chruthaich mi faidhle mlflow_training.py.

Seo na loidhnichean far a bheil na rudan as inntinniche a’ tachairt:

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)

An seo tha self.remote_server na inneal-lìonaidh beag thairis air na dòighean mlflow.tracking. MlflowClient (rinn mi e airson goireasachd), le cuideachadh a chruthaicheas mi deuchainn agus ga ruith air an fhrithealaiche. An ath rud, tha mi a’ comharrachadh far am bu chòir na toraidhean cur air bhog a chur còmhla (mlflow.set_tracking_uri (self.tracking_uri)). Bidh mi a’ comasachadh logadh fèin-ghluasadach mlflow.keras.autolog(). An-dràsta tha MLflow Tracking a’ toirt taic do logadh fèin-ghluasadach airson TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Mura h-eil thu air am frèam no an leabharlann agad a lorg, faodaidh tu an-còmhnaidh logadh a-steach gu soilleir. Tha sinn a’ tòiseachadh air trèanadh. Clàraich tagaichean agus crìochan cuir a-steach air an fhrithealaiche iomallach.

Sreath no dhà agus tha cothrom agad fhèin, mar a h-uile duine eile, air fiosrachadh mu gach cur air bhog. Tarraingeach?

3. Bidh sinn a 'dealbhadh a' phròiseict

A-nis leig dhuinn a dhèanamh furasta am pròiseact a chuir air bhog. Gus seo a dhèanamh, cuir am faidhle MLproject agus conda.yaml ri freumh a’ phròiseict.
Pròiseact ML

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

Tha grunn fheartan aig Pròiseact MLflow:

  • Ainm - ainm a 'phròiseict agad;
  • Àrainneachd - anns a 'chùis agam, tha conda_env a' comharrachadh gu bheil Anaconda air a chleachdadh airson ruith agus tha an tuairisgeul eisimeileachd anns an fhaidhle conda.yaml;
  • Puingean Inntrigidh - a’ comharrachadh dè na faidhlichean agus leis na paramadairean as urrainn dhuinn a ruith (tha na paramadairean uile air an clàradh gu fèin-ghluasadach nuair a thòisicheas tu air trèanadh)

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

Faodaidh tu docker a chleachdadh mar an àrainneachd ùine ruith agad, airson tuilleadh fiosrachaidh thoir sùil air sgrìobhainnean.

4. Feuch an tòisich sinn air trèanadh

Bidh sinn a’ clonadh a’ phròiseict agus a’ dol gu eòlaire a’ phròiseict:

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

Gus ruith feumaidh tu leabharlannan a stàladh

pip install mlflow
pip install pysftp

Air sgàth anns an eisimpleir a chleachdas mi conda_env, feumaidh Anaconda a bhith air a chuir a-steach air do choimpiutair (ach gheibh thu timcheall air seo le bhith a’ stàladh a h-uile pasgan riatanach thu fhèin agus a ’cluich leis na paramadairean tòiseachaidh).

Tha a h-uile ceum ullachaidh air a chrìochnachadh agus is urrainn dhuinn tòiseachadh air an trèanadh a chuir air bhog. Bho fhreumh a’ phròiseict:

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

Às deidh dhut a dhol a-steach don àithne, thèid àrainneachd conda a chruthachadh gu fèin-ghluasadach agus tòisichidh an trèanadh.
Anns an eisimpleir gu h-àrd, chaidh mi seachad air an àireamh de amannan trèanaidh, na roinnean anns a bheil sinn airson a roinn (chì thu an liosta slàn an seo) agus seòladh ar frithealaiche iomallach.
Gheibhear liosta iomlan de pharamadairean a dh’ fhaodadh a bhith ann am faidhle MLproject.

5. Dèan measadh air toraidhean ionnsachaidh

Às deidh dhuinn an trèanadh a chrìochnachadh, is urrainn dhuinn a dhol sa bhrobhsair gu seòladh ar frithealaiche http://server_host:server_port

MLOps - Leabhar còcaireachd, caibideil 1

An seo chì sinn liosta de na deuchainnean gu lèir (clì gu h-àrd), a bharrachd air fiosrachadh mu ruith (meadhan). Chì sinn fiosrachadh nas mionaidiche (parameters, meatrach, stuthan agus beagan fiosrachaidh a bharrachd) airson gach cur air bhog.

MLOps - Leabhar còcaireachd, caibideil 1

Airson gach meatrach chì sinn eachdraidh nan atharrachaidhean

MLOps - Leabhar còcaireachd, caibideil 1

An fheadhainn sin. Aig an àm seo, is urrainn dhuinn na toraidhean a sgrùdadh ann am modh “leabhar-làimhe", agus faodaidh tu cuideachd dearbhadh fèin-ghluasadach a stèidheachadh a’ cleachdadh an MLflow API.

6. Clàr a 'mhodail

Às deidh dhuinn mion-sgrùdadh a dhèanamh air a ’mhodal againn agus co-dhùnadh gu bheil e deiseil airson blàr, thèid sinn air adhart gus a chlàradh, airson seo bidh sinn a’ taghadh an fhoillseachadh a dh ’fheumas sinn (mar a chithear sa pharagraf roimhe) agus a’ dol sìos.

MLOps - Leabhar còcaireachd, caibideil 1

Às deidh dhuinn ainm a thoirt don mhodail againn, tha dreach aige. Ma shàbhaileas tu modail eile leis an aon ainm, thèid an dreach ùrachadh gu fèin-ghluasadach.

MLOps - Leabhar còcaireachd, caibideil 1

Airson gach modail, is urrainn dhuinn tuairisgeul a chuir ris agus aon de thrì stàitean a thaghadh (Staging, Production, Archived); às deidh sin, a’ cleachdadh an API, gheibh sinn cothrom air na stàitean sin, a tha, còmhla ri dreachdadh, a’ toirt seachad sùbailteachd a bharrachd.

MLOps - Leabhar còcaireachd, caibideil 1

Tha cothrom furasta againn cuideachd air a h-uile modal

MLOps - Leabhar còcaireachd, caibideil 1

agus na dreachan aca

MLOps - Leabhar còcaireachd, caibideil 1

Mar a bha sa pharagraf roimhe, faodar a h-uile gnìomh a dhèanamh a’ cleachdadh an API.

7. Cleachd am modail

Aig an ìre seo, tha modal trèanaidh (keras) againn mu thràth. Eisimpleir de mar a chleachdas tu e:

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

An seo tha self.registry a-rithist na phasgan beag thairis air mlflow.tracking.MlflowClient, airson goireasachd. Is e a’ phuing gu bheil mi a’ faighinn cothrom air frithealaiche iomallach agus a’ coimhead airson modail an sin leis an ainm ainmichte, agus an dreach riochdachaidh as ùire. An uairsin, luchdaichidh mi sìos an artifact gu h-ionadail chun phasgan ./model agus togaidh mi am modail bhon eòlaire seo mlflow.keras.load_model (local_path). A-nis is urrainn dhuinn ar modail a chleachdadh. Faodaidh luchd-leasachaidh CV (ML) am modail a leasachadh gu furasta agus dreachan ùra fhoillseachadh.

Ann an co-dhùnadh

Thaisbean mi siostam a leigeas:

  • stòradh sa mheadhan fiosrachadh mu mhodalan ML, adhartas trèanaidh agus toraidhean;
  • cuir gu luath àrainneachd leasachaidh;
  • sùil agus sgrùdadh a dhèanamh air adhartas obair air modailean;
  • tha e goireasach dreach agus riaghladh staid mhodailean;
  • Tha e furasta na modalan a thig às a chleachdadh.

Is e dèideag a th’ anns an eisimpleir seo agus tha e na thoiseach tòiseachaidh airson do shiostam fhèin a thogail, a dh’ fhaodadh a bhith a’ toirt a-steach fèin-ghluasad de mheasadh thoraidhean agus clàradh mhodalan (puingean 5 agus 6, fa leth) no an cuir thu dreach de stòran-dàta, no is dòcha rudeigin eile? Is e a’ phuing a bha mi a’ feuchainn ri dhèanamh gu bheil feum agad air MLOps gu h-iomlan, chan eil ann an MLflow ach dòigh air crìochnachadh.

Sgrìobh dè na duilgheadasan a thachair dhut nach do nochd mi?
Dè a chuireadh tu ris an t-siostam gus toirt air na feumalachdan agad a choileanadh?
Dè na h-innealan agus dòighean-obrach a bhios tu a’ cleachdadh gus fuasgladh fhaighinn air na duilgheadasan gu lèir no pàirt dhiubh?

PS Fàgaidh mi ceangal no dhà:
pròiseact github - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Am post-d obrach agam airson ceistean - [post-d fo dhìon]

Bidh a ’chompanaidh againn bho àm gu àm a’ cumail grunn thachartasan airson eòlaichean IT, mar eisimpleir: air 8 Iuchar aig 19: 00 àm Moscow bidh coinneamh CV ann an cruth air-loidhne, ma tha ùidh agad, faodaidh tu pàirt a ghabhail, clàradh an seo .

Source: www.habr.com

Cuir beachd ann