MLOps - Cook book, chapter 1

MLOps - Cook book, chapter 1

Hi omnes! Ego CV elit in CRO. Incepta exsecutiva in campo CV per 3 annos nunc fuimus. Hoc tempore multum egimus, ut: nos monitores rectores ut dum pulsis non bibimus, non fumus, non telephonum loquimur, in via aspeximus, non ad somnia vel ad nubes. ; Commemoramus eos qui vicos consecratos pellunt et spatia raeda complura assumunt; quod operarii galeas, chirothecas, etc. identified operarius qui vult intrare facilitatem; Nos omnia potuimus.

Quid ego haec omnia?

In processu inceptis exsequendi, labefecit, multum labefecit, nonnullas difficultates tibi aut nota est aut in futuro cognosces.

Sit scriptor situ simulare

Putamus nos officium in iuventute comitatu "N" obtinuisse, cuius actiones cum ML relatae sunt. In consilio ML (DL, CV) laboramus, aliqua de causa ad aliud officium mutamus, plerumque intermissum accipimus, et ad nostrum vel alterius cellarium revertimur.

  1. Veritatis momentum, quo destitisti, quid hyperparametris conaris, et, praesertim, quem exitum duxerunt, aliquo modo meminisse debes. Multae optiones esse possunt qui informationes de omnibus excussionibus recondunt: in capite, confis, nota, in ambitu laborantis in nube. Incidi optionem videre cum hyperparametri in codice notatae lineae repositae sunt, generatim fugam phantasiae. Nunc finge te non ad propositum tuum rediisse, sed ad propositum illius qui societatis reliquerat et codicem hereditasti et exemplar quod vocatur model_1.pb. Ad picturam perficiendam et omnem dolorem deferat, cogitemus te etiam artifex esse inceptor.
  2. Perge. Ad codicem currendum est, nos et omnes qui cum eo laboramus ambitum creare oportet. Saepe enim ut haereditatem aliquam de causa non deserant. Hoc etiam fieri potest munus non leve. Hoc gradu tempus terere non vis, agis?
  3. Exemplar instituimus (exempli gratia car detector). Eo pervenitur ubi optimum fit - tempus est ad exitum servandum. Vocemus eam car_detection_v1.pb. Deinde exercemus alium unum - car_detection_v2.pb. Post quem collegae nostri vel ipsi magis ac magis docent, diversis architecturis utentes. Quam ob rem fasciculum artificiatorum formatum est, de quibus informationes diligenter colligendae sunt (sed hoc postea agemus, quia nunc plura de rebus habemus).
  4. OK actum nunc! Exemplar habemus! Possumusne incipimus formare proximum exemplar, architecturae enucleare ad novam quaestionem solvendam, an tea aliquam habere possumus? Et quis explicabit?

Distinguendis problems

Operatio in consilio vel productum est opus multorum hominum. Et tempus, homines relinquunt et veniunt, plura sunt incepta, et incepta ipsa fiunt magis implicata. Uno modo vel alio, condiciones ab cyclo descripto (non solum) in aliquibus compositionibus ab iteratione ad iterationem occurrent. Haec omnia in tempus terit, confusionis, nervorum, fortasse emptoris displicentiae, ac denique pecuniae amissae. Quamquam nos omnes eundem sarculum sequi soleant, haec momenta iterum atque iterum vivere neminem velle credo.

MLOps - Cook book, chapter 1

Itaque per unum cyclum evolutionis transivimus et videmus problemata quae solvenda sunt. Hoc facere debes;

  • commodius copia operis eventus;
  • processus novos operarios simplex;
  • simpliciorem reddere modum explicandi ambitus evolutionis;
  • exemplar processus versioning configurare;
  • modum habent opportunum ad exempla convalidanda;
  • exemplar publicae administrationis instrumentum inveniamus;
  • viam inveniam ad exempla tradenda ad productionem.

Videturne necesse est ut cum workflui conscendas, qui te facile et commode hanc vitam cycli administrare sineret? Hoc usu vocatur MLOps

MLOps, seu DevOps ad apparatus discendi, scientias datas et IT iunctos ad collaborandum et augendum gressum exemplaris evolutionis et instruere per vigilantiam, sanationem et regimen ad exempla discendi apparatus.

potes honorareQuid de his omnibus cogitate Google guys? Ex articulo patet MLOps rem esse admodum copiosam.

MLOps - Cook book, chapter 1

Praeterea in articulo tantum partem processus describemus. Ad exsequendam, instrumento MLflow utar, quia... Hoc propositum est apertum fontis, parva moles codicis coniungere requiritur et integratio est cum tabulis popularibus ml. Interretialia alia instrumenta quaerere potes, ut Kubeflow, SageMaker, Impedimenta, etc., et fortasse invenire potes ut melius tuis necessitatibus conveniat.

"Aedificium" MLOps utens exemplo usus est instrumentum MLFlow

MLFlow fons est apertus suggestus pro ml exemplorum administratione vivendi (https://mlflow.org/).

MLflow continet quatuor partes:

  • MLflow Semita - comprehendit eventus recordationis eventus et parametris qui ad hunc exitum ducuntur;
  • MLflow Project - sino te ad involucrum codici et in aliquo suggestu effingere;
  • MLflow Exempla - responsalis ad exempla explicanda ad productionem;
  • MLflow Subcriptio - exempla te condere et statum suum regere in reposito centrali permittit.

MLflow operatur in duobus;

  • launchus est plenus cyclus exercitationis, parametri et metricae quibus subcriptio velimus;
  • Experimentum est "argumentum" quod simul concurrit.

Omnes gradus exempli in Ubuntu 18.04 ratio operandi implenda sunt.

1. explicandam servo

Ut nobis facile consilium nostrum cures et omnia necessaria informationes recipias, cultor explicabimus. MLflow semita server duo elementa principalia habet:

  • backend store - author informationes recondendi de exemplaribus descriptis (sustinet 4 DBMSs: mysql, mssql, sqlite, et postgresql);
  • copia artificii - responsalis artificiorum reponendarum (supportat 7 optiones repositas: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP servo, SFTP Servo, NFS, HDFS).

Quod artificium copia Pro simplici servo sumamus sftp.

  • creare coetus
    $ sudo groupadd sftpg
  • addere user et posuit in password pro eo
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • adjusting duos aditus occasus
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • paucas lineas adde ad /etc/ssh/sshd_config
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • sileo in ministerium
    $ sudo systemctl restart sshd

Quod backend copia Abeamus 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

Ut servo incipias, pythones sequentes sarcinas instituere debes (commendo enim singulas virtualis ambitus creando);

pip install mlflow
pip install pysftp

Sit scriptor satus nostro servo

$ 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. Add tracking

Ut nostrae disciplinae eventus non depereant, tincidunt generationes intelligant quae fiebant, et senioribus comitibus et te ad discentium processum placide resolvere posse, opus est addere vestigia. Semita significat salvis parametris, metricis, artificiis et quibusvis informationibus de initiis disciplinae, in nostro casu, in calculonis servi.

Exempli gratia, parvam creavi proiciamus in github * super Keras pro segmenting omne quod est in COCO dataset. Ad tracking, lima mlflow_training.py creavi.

Hic lineae sunt ubi maxime interesting res eveniunt;

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)

Hic self.remoto_servator est fasciculus parva per methodos mlflow.tracking. MlflowClient (pro opportunitate feci), cuius ope experimentum creo et in calculonis currit. Deinde indicio ubi eventus launches mergerentur (mlflow.set_tracking_uri(self.tracking_uri)). Automatice colligationem mlflow.keras.autolog(o) efficio. In statu MLflow Semita subsidia automatic logging pro TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Si compagem vel bibliothecam tuam non invenisti, tunc explicite semper potes. Disciplina incipimus. Subcriptio tags ac parametri initus in calculonis longinquis.

Duo lineae et tu, sicut ceteri, accessus ad informationem de omnibus excussis. Cool?

3. Nos trahere in project

Nunc faciamus hoc project facilem esse Lorem. Ad hoc efficiendum, MLprojectum et conda.yaml fasciculum ad radicem projectam adde.
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}"

MLflow Project plures proprietates habet:

  • Nomen - nomen propositi tui;
  • Environment - in casu meo, conda_env indicat Anaconda currendi usum esse et descriptionem dependentiae in fasciculo conda.yaml;
  • Ingressus Points - indicat quibus lima et quibus parametri currere possumus (omnia parametri sunt automatice initium cum incipiens disciplina)

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

Navale uti potes ut environment runtime, ad plura singula referre placet documentum.

4. Sit scriptor satus disciplina

Nos clone inceptum et ad indicem indicii imus:

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

Currere debes ut install libraries

pip install mlflow
pip install pysftp

Quod in exemplo quo utor conda_env, Anaconda in computatro tuo institui debet (sed hoc circumire potes, insertis omnibus necessariis fasciculis te ipsum et cum parametris launchendis).

Omnes gradus praeparatorii perficiuntur et institutionem agere incipimus. Ex radice exerti;

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

Post imperium intrantes ambitus conda sponte creabitur et institutio incipiet.
In exemplo supra, numerum epochae ad exercitationem transmisi, praedicamenta in quae segmentum volumus (videre plenam indicem hic) et oratio servi nostri remoti.
Integrum indicem parametri possibilium in MLprojecti tabula inveniri potest.

5. Censeo cognita eventus

Post peractam institutionem in navigatro ire possumus inscriptione servi nostri http://server_host:server_port

MLOps - Cook book, chapter 1

Hic inspicitur indicem omnium experimentorum (top left), tum informationum decurrit (medii). Plures informationes (parametros, metricas, artificia, et aliquas informationes additionals) in singulis deducendis inspicere possumus.

MLOps - Cook book, chapter 1

Utraque metrica historia mutationum notare possumus

MLOps - Cook book, chapter 1

Illae. In momento, eventus "manualis" in modo resolvere possumus, et in validatione automatico uti MLflow API statuere potes.

6. Register exemplum

Postquam exemplar nostrum resolvimus et paratum esse censuimus ad praelium, progredimur ad subcriptio eius, ad hoc eligamus deductionem, quae opus est (ut in paragrapho praecedente demonstratum est) et descendimus.

MLOps - Cook book, chapter 1

Post nomen exemplar demus, versionem habet. Si aliud exemplar eiusdem nominis servas, versio statim upgraded erit.

MLOps - Cook book, chapter 1

Singulis exemplaribus descriptionem addere possumus et unum ex tribus civitatibus eligere (Staging, Production, Archived), deinde, API adhibito, his civitatibus accedere possumus, quae, una cum versione, flexibilitatem additionalem praebet.

MLOps - Cook book, chapter 1

Facilem etiam accessum habemus ad omnia exempla

MLOps - Cook book, chapter 1

et versiones

MLOps - Cook book, chapter 1

Sicut in paragrapho praecedente, omnes operationes API utentes fieri possunt.

7. explicandam exemplum

In hac scaena exemplar iam exercitatum habemus. Exemplum quomodo possis uti;

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

Hic self.registry iterum parvum fasciculum super mlflow.tracking.MlflowClient, commodum est. Punctum est me accedere ad ministratorem remotum et exspectem ibi exemplar cum nomine certo et recentissima versione productionis. Deinceps artificium localiter ad ./model folder depono et exemplar ex hoc directorio mlflow.keras.load_model(local_path construo). Exemplar autem nostrum uti possumus. CV (ML) tincidunt exemplar facile emendare et novas versiones edere possunt.

Ad summam:

Ratio me praesentavit, quae admittit;

  • centraliter informationes circa ML exempla reponunt, institutio progressus et eventus;
  • celeriter explicandam ambitum explicandum;
  • monitor et progressus operis in exemplaribus resolvere;
  • commodum est versioni et exemplorum rempublicam administrare;
  • Facile est exempla consequentia explicari.

Hoc exemplum ludibrio est et quasi principium praebet ad aedificandum systema proprium tuum, quod includere potest automationem aestimationis proventuum et adnotationem exemplorum (punctorum 5 et 6, respective) vel versionem datastarum addere vel fortasse aliquid aliud? Punctum facere conanti est quod opus totum MLOps, MLflow est medium ad finem.

Scribere quas difficultates tibi offendit me non ostendisse?
Quid vis addere ad rationem ut necessitates tuas occurrat?
Quae instrumenta et accessiones uteris ad solvendum omnem vel partem problematum?

PS Dimitto duos nexus:
github project - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Mihi opus epistulam quaestiones - [Inscriptio protected]

Societas nostra periodice exercituum varias eventus pro IT specialitas, exempli gratia: die 8 Iulii ad 19:00 Moscuae tempus erit CV occurrit in forma online, si interest, interesse potes, adnotatione hic .

Source: www.habr.com