MLOps - Buku masak, bab 1

MLOps - Buku masak, bab 1

Halo sadayana! Abdi pamekar CV di CROC. Kami parantos ngalaksanakeun proyék dina widang CV salami 3 taun ayeuna. Salila ieu, urang ngalakukeun seueur hal, contona: urang ngawas supir supados nalika nyetir aranjeunna henteu nginum, henteu ngaroko, henteu ngobrol dina telepon, ningali jalan, sareng henteu dina impian atanapi awan. ; Urang ngarékam jalma anu nyetir di jalur khusus sareng nyandak sababaraha tempat parkir; mastikeun yén pagawé ngagem helm, sarung tangan, jsb; ngaidentipikasi hiji pagawe anu hayang asup ka fasilitas; Urang diitung sagalana urang bisa.

Keur naon kuring ngalakukeun ieu?

Dina prosés palaksanaan proyék, urang pencét nabrak, loba nabrak, sababaraha masalah anjeun boh wawuh atawa bakal jadi acquainted jeung di mangsa nu bakal datang.

Hayu urang simulate kaayaan

Hayu urang bayangkeun yén urang ngagaduhan padamelan di perusahaan ngora "N", anu kagiatanana aya hubunganana sareng ML. Kami damel dina proyék ML (DL, CV), teras pikeun sababaraha alesan urang ngalih ka padamelan sanés, umumna istirahat, sareng uih deui ka neuron urang atanapi batur.

  1. Momen bebeneran datang, anjeun kudu kumaha bae apal dimana anjeun dieureunkeun, naon hyperparameters anjeun diusahakeun tur, paling importantly, naon hasilna aranjeunna ngarah ka. Aya tiasa seueur pilihan pikeun anu nyimpen inpormasi dina sadaya peluncuran: dina sirah, configs, notepad, dina lingkungan kerja dina méga. Kuring kajadian ningali hiji pilihan nalika hyperparameters disimpen salaku garis commented dina kode, sacara umum, hiber of fancy. Ayeuna bayangkeun yén anjeun balik deui teu ka proyék anjeun, tapi ka proyék hiji jalma anu ninggalkeun parusahaan jeung anjeun diwariskeun kode jeung model disebut model_1.pb. Pikeun ngalengkepan gambar jeung nepikeun sagala nyeri, hayu urang ngabayangkeun yén anjeun ogé mangrupa spesialis pemula.
  2. Lajengkeun. Pikeun ngajalankeun kode, urang sareng saha waé anu bakal damel sareng éta kedah nyiptakeun lingkungan. Ieu sering kajadian nu keur sababaraha alesan maranéhna teu ninggalkeun anjeunna salaku warisan urang. Ieu ogé bisa jadi tugas non-trivial. Anjeun teu hoyong miceunan waktos dina léngkah ieu, naha anjeun?
  3. Urang ngalatih modél (contona, detektor mobil). Kami dugi ka titik dimana janten saé pisan - waktosna pikeun ngahémat hasilna. Hayu urang sebut wae car_detection_v1.pb. Lajeng urang ngalatih hiji sejen - car_detection_v2.pb. Sababaraha waktu engké, kolega urang atawa urang sorangan ngajarkeun beuki loba, ngagunakeun arsitektur béda. Hasilna, sakumpulan artefak kabentuk, informasi ngeunaan nu kudu painstakingly dikumpulkeun (tapi urang bakal ngalakukeun ieu engké, sabab pikeun ayeuna urang boga urusan leuwih prioritas).
  4. OKÉ éta sadayana réngsé Ayeuna! Urang boga model! Naha urang tiasa ngamimitian ngalatih modél salajengna, ngembangkeun arsitéktur pikeun ngarengsekeun masalah énggal, atanapi tiasa urang angkat tea? Sareng saha anu bakal nyebarkeun?

Ngidentipikasi masalah

Ngagawekeun proyék atanapi produk mangrupikeun padamelan seueur jalma. Sareng kana waktosna, jalma-jalma angkat sareng sumping, langkung seueur proyék, sareng proyék-proyék sorangan janten langkung kompleks. Hiji cara atawa sejen, kaayaan tina siklus ditétélakeun di luhur (teu ngan) dina kombinasi tangtu bakal lumangsung ti Iteration ka Iteration. Sadaya ieu ngakibatkeun waktos wasted, kabingungan, saraf, meureun dissatisfaction customer, sarta pamustunganana, leungit duit. Sanajan urang sadayana biasana nuturkeun rake heubeul sarua, Kuring yakin yén teu saurang ogé hayang relive moments ieu leuwih sarta leuwih deui.

MLOps - Buku masak, bab 1

Janten, urang parantos ngalangkungan hiji siklus pangembangan sareng urang ningali aya masalah anu kedah direngsekeun. Jang ngalampahkeun ieu anjeun peryogi:

  • merenah nyimpen hasil gawé;
  • sangkan prosés ngalibetkeun pagawé anyar basajan;
  • simplify prosés deploying lingkungan ngembangkeun;
  • ngonpigurasikeun prosés versioning modél;
  • boga cara merenah pikeun ngesahkeun model;
  • manggihan model alat manajemén kaayaan;
  • manggihan cara pikeun nganteurkeun model ka produksi.

Tétéla perlu datang nepi ka workflow nu bakal ngidinan Anjeun pikeun gampang tur merenah ngatur siklus kahirupan ieu? Prakték ieu disebut MLOps

MLOps, atanapi DevOps pikeun pembelajaran mesin, ngamungkinkeun élmu data sareng tim IT pikeun kolaborasi sareng ningkatkeun laju pamekaran modél sareng panyebaran ngaliwatan monitoring, validasi, sareng pamaréntahan pikeun modél pembelajaran mesin.

bisa pikeun ngahargaanNaon anu guys Google pikir ngeunaan sakabéh ieu? Tina tulisan éta jelas yén MLOps mangrupikeun hal anu ageung.

MLOps - Buku masak, bab 1

Salajengna dina artikel abdi bakal ngajelaskeun ukur bagian tina prosés. Pikeun palaksanaan, kuring bakal nganggo alat MLflow, sabab ... Ieu proyek open-source, jumlah leutik kode anu diperlukeun pikeun nyambung jeung aya integrasi jeung kerangka ml populér. Anjeun tiasa milarian Internét pikeun alat anu sanés, sapertos Kubeflow, SageMaker, Trains, jsb, sareng panginten mendakan anu langkung cocog sareng kabutuhan anjeun.

"Gedong" MLOps ngagunakeun conto ngagunakeun alat MLFlow

MLFlow mangrupikeun platform open source pikeun manajemén siklus hirup modél ml (https://mlflow.org/).

MLflow ngawengku opat komponén:

  • MLflow Tracking - nyertakeun masalah hasil rekaman sareng parameter anu nyababkeun hasil ieu;
  • Proyék MLflow - ngamungkinkeun anjeun pikeun ngarangkep kode sareng ngahasilkeun deui dina platform naon waé;
  • MLflow Models - jawab deploying model ka produksi;
  • MLflow Registry - ngamungkinkeun anjeun pikeun nyimpen modél sareng ngatur kaayaanana dina gudang terpusat.

MLflow beroperasi dina dua éntitas:

  • peluncuran mangrupakeun siklus pinuh latihan, parameter jeung metrics ku nu urang hoyong ngadaptarkeun;
  • Ékspérimén mangrupikeun "topik" anu dijalankeun babarengan.

Sadaya léngkah conto dilaksanakeun dina sistem operasi Ubuntu 18.04.

1. Nyebarkeun server

Supados kami gampang ngatur proyék kami sareng nampi sadaya inpormasi anu diperyogikeun, kami bakal nyebarkeun server. Server tracking MLflow gaduh dua komponén utama:

  • toko backend - tanggung jawab pikeun nyimpen inpormasi ngeunaan modél anu kadaptar (ngadukung 4 DBMS: mysql, mssql, sqlite, sareng postgresql);
  • toko artefak - jawab nyimpen artefak (ngadukung 7 pilihan gudang: Amazon S3, Azure Blob Panyimpenan, Google Cloud Storage, FTP server, SFTP Server, NFS, HDFS).

salaku toko artefak Pikeun kesederhanaan, hayu urang nyandak hiji server sftp.

  • nyieun grup
    $ sudo groupadd sftpg
  • tambahkeun pangguna sareng setel kecap konci pikeun anjeunna
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • nyaluyukeun sababaraha setélan aksés
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • tambahkeun sababaraha garis kana /etc/ssh/sshd_config
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • balikan deui jasa
    $ sudo systemctl restart sshd

salaku toko backend Hayu urang nyandak 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

Pikeun ngamimitian server, anjeun kedah pasang bungkusan python di handap ieu (Kuring nyarankeun nyiptakeun lingkungan virtual anu misah):

pip install mlflow
pip install pysftp

Hayu urang mimitian server urang

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

Supados hasil latihan urang teu leungit, generasi nu bakal datang pamekar ngartos naon anu lumangsung, sarta comrades heubeul jeung anjeun bisa tenang analisa prosés pembelajaran, urang kudu nambahan tracking. Nyukcruk hartosna nyimpen parameter, métrik, artefak sareng inpormasi tambahan ngeunaan ngamimitian latihan, dina kasus urang, dina server.

Contona, kuring dijieun leutik proyék dina github on Keras pikeun segmenting sagalana nu aya dina databés COCO. Pikeun nambahkeun tracking, abdi dijieun file mlflow_training.py.

Ieu mangrupikeun garis-garis dimana hal-hal anu paling pikaresepeun lumangsung:

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)

Di dieu self.remote_server mangrupakeun wrapper leutik leuwih métode mlflow.tracking. MlflowClient (Kuring dijieun pikeun genah), kalayan bantuan nu kuring nyieun percobaan tur ngajalankeun eta dina server. Salajengna, abdi nunjukkeun dimana hasil peluncuran kudu dihijikeun (mlflow.set_tracking_uri(self.tracking_uri)). Kuring ngaktipkeun logging otomatis mlflow.keras.autolog (). Ayeuna MLflow Tracking ngadukung logging otomatis pikeun TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Upami anjeun teu acan mendakan kerangka atanapi perpustakaan anjeun, teras anjeun tiasa log in sacara eksplisit. Kami ngamimitian latihan. Ngadaptar tag sareng parameter input dina server jauh.

Sababaraha jalur sareng anjeun, sapertos sadayana, gaduh aksés kana inpormasi ngeunaan sadaya peluncuran. Keren?

3. Urang ngagambar proyék

Ayeuna hayu urang ngagampangkeun pikeun ngaluncurkeun proyék. Jang ngalampahkeun ieu, tambahkeun file MLproject sareng conda.yaml kana akar proyék.
MLproyek

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

Proyék MLflow ngagaduhan sababaraha sipat:

  • Ngaran - nami proyék anjeun;
  • Lingkungan - bisi kuring, conda_env nunjukkeun yén Anaconda dipaké pikeun ngajalankeun sarta déskripsi kagumantungan aya dina file conda.yaml;
  • Entry Points - nunjukkeun file mana sareng parameter mana anu urang tiasa jalankeun (sadaya parameter otomatis dilogam nalika ngamimitian latihan)

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

Anjeun tiasa nganggo docker salaku lingkungan runtime anjeun, pikeun langkung rinci mangga tingal dokuméntasi.

4. Hayu urang mimitian latihan

Urang clone proyék jeung buka diréktori proyék:

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

Pikeun ngajalankeun anjeun kudu masang perpustakaan

pip install mlflow
pip install pysftp

Sabab dina conto anu kuring nganggo conda_env, Anaconda kedah dipasang dina komputer anjeun (tapi anjeun tiasa ngurilingan ieu ku cara masang sadayana pakét anu diperyogikeun sareng maén sareng parameter peluncuran).

Sadaya léngkah persiapan parantos réngsé sareng urang tiasa ngamimitian ngaluncurkeun palatihan. Tina akar proyék:

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

Saatos ngalebetkeun paréntah, lingkungan konda bakal otomatis didamel sareng latihan bakal ngamimitian.
Dina conto di luhur, kuring lulus jumlah epochs pikeun latihan, kategori nu urang hoyong bagean (anjeun tiasa ningali daptar lengkep). di dieu) jeung alamat server jauh urang.
Daptar lengkep parameter anu mungkin tiasa dipendakan dina file MLproject.

5. Meunteun hasil diajar

Saatos réngsé pelatihan, urang tiasa lebet dina browser ka alamat server kami http://server_host:server_port

MLOps - Buku masak, bab 1

Di dieu urang ningali daptar sadaya percobaan (kénca luhur), ogé inpormasi ngeunaan jalan (tengah). Urang tiasa ningali inpormasi anu langkung lengkep (parameter, métrik, artefak sareng sababaraha inpormasi tambahan) pikeun tiap peluncuran.

MLOps - Buku masak, bab 1

Pikeun unggal métrik urang tiasa niténan sajarah parobahan

MLOps - Buku masak, bab 1

Jelema. Ayeuna, urang tiasa nganalisis hasil dina modeu "manual", sareng anjeun ogé tiasa nyetél validasi otomatis nganggo API MLflow.

6. Ngadaptar modél

Saatos urang nganalisa modél urang sareng mutuskeun yén éta siap perang, urang neruskeun ngadaptarkeunana, pikeun ieu urang pilih peluncuran anu urang peryogikeun (sapertos anu dipidangkeun dina paragraf sateuacana) sareng turun.

MLOps - Buku masak, bab 1

Saatos kami masihan nami modél urang, éta ngagaduhan versi. Upami anjeun simpen modél anu sanés nganggo nami anu sami, versina bakal otomatis ditingkatkeun.

MLOps - Buku masak, bab 1

Pikeun unggal modél, urang tiasa nambihan pedaran sareng milih salah sahiji tina tilu nagara (Pementasan, Produksi, Diarsipkeun); salajengna, nganggo API, urang tiasa ngaksés nagara-nagara ieu, anu, sareng versi, nyayogikeun kalenturan tambahan.

MLOps - Buku masak, bab 1

Urang ogé boga aksés gampang ka sadaya model

MLOps - Buku masak, bab 1

jeung versi maranéhanana

MLOps - Buku masak, bab 1

Sapertos dina paragraf sateuacana, sadaya operasi tiasa dilakukeun nganggo API.

7. Nyebarkeun modél

Dina tahap ieu, urang geus boga model terlatih (keras). Conto kumaha anjeun tiasa nganggo:

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

Di dieu self.registry deui wrapper leutik leuwih mlflow.tracking.MlflowClient, keur genah. Intina nyaéta kuring ngaksés server jauh sareng milarian modél anu aya nami anu ditunjuk, sareng versi produksi panganyarna. Salajengna, abdi ngundeur artefak lokal ka folder ./model tur ngawangun modél ti diréktori ieu mlflow.keras.load_model (local_path). Ayeuna urang tiasa nganggo modél urang. Pamekar CV (ML) tiasa sacara gampil ningkatkeun modél sareng nyebarkeun vérsi énggal.

dina kacindekan

Kuring dibere sistem anu ngamungkinkeun:

  • centrally nyimpen informasi ngeunaan model ML, kamajuan latihan jeung hasil;
  • gancang nyebarkeun lingkungan pangwangunan;
  • ngawas jeung nganalisis kamajuan gawé dina model;
  • éta merenah pikeun versi jeung ngatur kaayaan model;
  • Gampang nyebarkeun model anu dihasilkeun.

Conto ieu mangrupikeun cocooan sareng janten titik awal pikeun ngawangun sistem anjeun nyalira, anu tiasa kalebet automation evaluasi hasil sareng pendaptaran modél (titik 5 sareng 6, masing-masing) atanapi anjeun bakal nambihan vérsi set data, atanapi panginten anu sanés? Titik anu kuring nyobian nyaéta yén anjeun peryogi MLOps sacara gembleng, MLflow mangrupikeun sarana pikeun tujuan.

Tulis masalah naon anjeun encountered yén kuring teu némbongkeun?
Naon anu anjeun badé tambahkeun kana sistem pikeun nyumponan kabutuhan anjeun?
Alat sareng pendekatan naon anu anjeun anggo pikeun ngarengsekeun sadayana atanapi sabagian tina masalah?

PS Kuring bakal ninggalkeun sababaraha tumbu:
proyék github - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Email padamelan abdi kanggo patarosan - [email dijaga]

Perusahaan kami périodik ngayakeun rupa-rupa acara pikeun spesialis IT, contona: dina 8 Juli jam 19:00 waktos Moskow bakal aya patepang CV dina format online, upami anjeun resep, anjeun tiasa ngiringan, pendaptaran. di dieu .

sumber: www.habr.com

Tambahkeun komentar