MLOps - Buku masak, bab 1

MLOps - Buku masak, bab 1

Halo kabeh! Aku pangembang CV ing CROC. Kita wis ngetrapake proyek ing bidang CV sajrone 3 taun saiki. Sajrone wektu iki, akeh sing ditindakake, contone: ngawasi sopir supaya nalika nyopir ora ngombe, ora ngrokok, ora ngobrol ing telpon, ndeleng dalan, lan ora ngimpi utawa ing awan. ; We nyathet wong sing nyopir ing dalan khusus lan njupuk sawetara papan parkir; mesthekake yen buruh nganggo helm, sarung tangan, lsp; ngenali karyawan sing pengin mlebu fasilitas kasebut; We count kabeh kita bisa.

Kanggo apa aku nindakake kabeh iki?

Ing proses ngleksanakake proyek, kita nabrak benjolan, akeh benjolan, sawetara masalah sing sampeyan kenal utawa bakal kenal ing mangsa ngarep.

Modeling kahanan

Ayo mbayangno yen kita entuk kerja ing perusahaan enom "N", sing kegiatane ana hubungane karo ML. Kita nggarap proyek ML (DL, CV), banjur sakperangan alesan ngalih menyang proyek liyane, umume ngaso, lan bali menyang neuron kita utawa wong liya.

  1. Wayahe bebener teka, sampeyan kudu piye wae elinga ngendi sampeyan mandheg, apa hyperparameters sampeyan nyoba lan, paling Jahwéh, apa asil padha mimpin kanggo. Ana akeh opsi kanggo sing nyimpen informasi ing kabeh diluncurake: ing sirah, konfigurasi, notepad, ing lingkungan kerja ing awan. Aku kedaden kanggo ndeleng pilihan nalika hyperparameters disimpen minangka baris komentar ing kode, ing umum, pesawat saka apik. Saiki bayangake yen sampeyan bali ora menyang proyek sampeyan, nanging menyang proyek wong sing ninggalake perusahaan lan sampeyan entuk kode lan model sing diarani model_1.pb. Kanggo ngrampungake gambar lan ngirim kabeh rasa lara, ayo bayangake yen sampeyan uga spesialis pemula.
  2. Terusna. Kanggo mbukak kode kasebut, kita lan kabeh wong sing bakal nggarap kode kasebut kudu nggawe lingkungan. Asring kedadean sing sakperangan alesan padha ora ninggalake wong minangka pusaka kita. Iki uga bisa dadi tugas sing ora pati penting. Sampeyan ora pengin mbuwang wektu ing langkah iki, apa sampeyan?
  3. Kita nglatih model (contone, detektor mobil). Kita tekan titik sing dadi apik banget - wektune kanggo nyimpen asil. Ayo diarani car_detection_v1.pb. Banjur kita olahraga siji liyane - car_detection_v2.pb. Sawetara wektu mengko, kolega utawa awake dhewe mulang luwih akeh, nggunakake arsitektur sing beda-beda. Akibaté, akeh artefak dibentuk, informasi sing kudu dikumpulake kanthi teliti (nanging kita bakal nindakake iki mengko, amarga saiki kita duwe prioritas liyane).
  4. OK kabeh wis rampung Saiki! Kita duwe model! Apa kita bisa miwiti latihan model sabanjure, ngembangake arsitektur kanggo ngatasi masalah anyar, utawa bisa ngombe teh? Lan sapa sing bakal nyebarake?

Ngenali masalah

Nggarap proyèk utawa prodhuk iku gawéané akèh wong. Lan suwe-suwe, wong-wong lunga lan teka, luwih akeh proyek, lan proyek kasebut dadi luwih rumit. Salah siji cara utawa liyane, kahanan saka siklus diterangake ing ndhuwur (lan ora mung) ing kombinasi tartamtu bakal kelakon saka pengulangan kanggo pengulangan. Kabeh iki nyebabake wektu boroske, kebingungan, syaraf, bisa uga ora puas pelanggan, lan pungkasane ilang dhuwit. Senajan kita kabeh biasane tindakake rake lawas padha, Aku pracaya sing ora ana siji pengin relive iki moments liwat lan maneh.

MLOps - Buku masak, bab 1

Dadi, kita wis ngliwati siji siklus pangembangan lan kita weruh manawa ana masalah sing kudu dirampungake. Kanggo nindakake iki, sampeyan kudu:

  • gampang nyimpen asil karya;
  • nggawe proses nglibatake karyawan anyar kanthi gampang;
  • nyederhanakake proses nyebarake lingkungan pangembangan;
  • ngatur proses versi model;
  • duwe cara sing trep kanggo validasi model;
  • golek alat manajemen negara model;
  • golek cara kanggo ngirim model kanggo produksi.

Mesthine kudu nggawe alur kerja sing ngidini sampeyan ngatur siklus urip kanthi gampang lan gampang? Praktek iki diarani MLOps

MLOps, utawa DevOps kanggo pembelajaran mesin, ngidini tim ilmu data lan IT bisa kolaborasi lan nambah kecepatan pangembangan lan penyebaran model liwat pemantauan, validasi, lan pamrentah kanggo model pembelajaran mesin.

Apa sampeyan bisa macaApa sing dipikirake wong lanang Google babagan kabeh iki? Saka artikel kasebut jelas manawa MLOps minangka barang sing akeh banget.

MLOps - Buku masak, bab 1

Luwih ing artikelku aku bakal njlèntrèhaké mung bagéan saka proses. Kanggo implementasine, aku bakal nggunakake alat MLflow, amarga ... Iki minangka proyek open-source, jumlah kode cilik dibutuhake kanggo nyambung lan ana integrasi karo kerangka ml populer. Sampeyan bisa nggoleki alat liyane ing Internet, kayata Kubeflow, SageMaker, Sepur, lan liya-liyane, lan bisa uga nemokake sing luwih cocog karo kabutuhan sampeyan.

MLOps "Bangunan" nggunakake conto nggunakake alat MLFlow

MLFlow minangka platform open source kanggo manajemen siklus urip model ml (https://mlflow.org/).

MLflow kalebu papat komponen:

  • MLflow Tracking - nyakup masalah asil rekaman lan paramèter sing nyebabake asil iki;
  • Proyek MLflow - ngidini sampeyan paket kode lan ngasilake ing platform apa wae;
  • Model MLflow - tanggung jawab kanggo nyebarake model menyang produksi;
  • MLflow Registry - ngidini sampeyan nyimpen model lan ngatur negara ing repositori terpusat.

MLflow beroperasi ing rong entitas:

  • peluncuran minangka siklus lengkap latihan, paramèter lan metrik sing arep kita ndhaptar;
  • Eksperimen minangka "topik" sing mlaku bebarengan.

Kabeh langkah conto dileksanakake ing sistem operasi Ubuntu 18.04.

1. Nyebar server

Supaya kita gampang ngatur proyek lan nampa kabeh informasi sing dibutuhake, kita bakal masang server. Server pelacakan MLflow duwe rong komponen utama:

  • toko backend - tanggung jawab kanggo nyimpen informasi babagan model sing kadhaptar (ndhukung 4 DBMS: mysql, mssql, sqlite, lan postgresql);
  • toko artefak - tanggung jawab kanggo nyimpen artefak (ndhukung 7 opsi panyimpenan: Amazon S3, Azure Blob Storage, Google Cloud Storage, server FTP, SFTP Server, NFS, HDFS).

Minangka toko artefak Kanggo gamblang, ayo njupuk server sftp.

  • nggawe grup
    $ sudo groupadd sftpg
  • nambah pangguna lan nyetel sandhi kanggo dheweke
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • nyetel saperangan setelan akses
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • nambah sawetara baris menyang /etc/ssh/sshd_config
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • miwiti maneh layanan
    $ sudo systemctl restart sshd

Minangka toko backend Ayo njupuk 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

Kanggo miwiti server, sampeyan kudu nginstal paket python ing ngisor iki (Aku nyaranake nggawe lingkungan virtual sing kapisah):

pip install mlflow
pip install pysftp

Ayo miwiti server kita

$ 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. Tambah nelusuri

Supaya asil latihan kita ora ilang, generasi pangembang sing bakal teka ngerti apa sing kedadeyan, lan kanggo kanca-kanca lawas lan sampeyan bisa nganalisa proses sinau kanthi tenang, kita kudu nambah pelacakan. Nelusuri tegese nyimpen parameter, metrik, artefak lan informasi tambahan babagan wiwitan latihan, ing kasus kita, ing server.

Contone, aku nggawe cilik proyek ing github ing Keras kanggo segmenting kabeh sing ing Dhaptar data COCO. Kanggo nambah tracking, aku nggawe file mlflow_training.py.

Mangkene garis sing kedadeyan sing paling menarik:

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)

Ing kene self.remote_server minangka bungkus cilik liwat cara mlflow.tracking. MlflowClient (Aku digawe kanggo penak), kanthi bantuan sing nggawe eksperimen lan mbukak ing server. Sabanjure, aku nuduhake ing ngendi asil peluncuran kudu digabung (mlflow.set_tracking_uri(self.tracking_uri)). Aku ngaktifake logging otomatis mlflow.keras.autolog(). Saiki MLflow Tracking ndhukung logging otomatis kanggo TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark. Yen sampeyan durung nemokake kerangka kerja utawa perpustakaan, mula sampeyan bisa log kanthi jelas. Kita miwiti latihan. Register tags lan paramèter input ing server remot.

Saperangan baris lan sampeyan, kaya wong liya, duwe akses menyang informasi babagan kabeh peluncuran. Kelangan?

3. Kita nggawe proyek kasebut

Saiki ayo nggawe gampang kanggo miwiti proyek kasebut. Kanggo nindakake iki, nambah file MLproject lan conda.yaml menyang ROOT project.
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}"

Proyek MLflow duwe sawetara properti:

  • Jeneng - jeneng proyek sampeyan;
  • Lingkungan - ing kasusku, conda_env nuduhake yen Anaconda digunakake kanggo mbukak lan deskripsi dependensi ana ing file conda.yaml;
  • Titik Entri - nuduhake file lan paramèter apa sing bisa kita lakoni (kabeh paramèter dicathet kanthi otomatis nalika miwiti latihan)

konda.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

Sampeyan bisa nggunakake docker minangka lingkungan runtime, kanggo rincian liyane waca dokumentasi.

4. Ayo padha miwiti latihan

Kita kloning proyek lan pindhah menyang direktori proyek:

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

Kanggo mbukak sampeyan kudu nginstal perpustakaan

pip install mlflow
pip install pysftp

Amarga ing conto aku nggunakake conda_env, Anaconda kudu diinstal ing komputer (nanging sampeyan bisa njaluk watara iki dening nginstal kabeh paket perlu dhewe lan muter karo paramèter Bukak).

Kabeh langkah persiapan wis rampung lan kita bisa miwiti latihan. Saka ROOT proyek:

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

Sawise ngetik perintah kasebut, lingkungan konda bakal digawe kanthi otomatis lan latihan bakal diwiwiti.
Ing conto ing ndhuwur, aku ngliwati jumlah epochs kanggo latihan, kategori sing arep kita segmentasi (sampeyan bisa ndeleng dhaptar lengkap kene) lan alamat server remot kita.
Dhaptar lengkap paramèter bisa ditemokake ing file MLproject.

5. Evaluasi asil sinau

Sawise ngrampungake latihan, kita bisa pindhah menyang browser menyang alamat server kita http://server_host:server_port

MLOps - Buku masak, bab 1

Ing kene kita ndeleng dhaptar kabeh eksperimen (kiwa ndhuwur), uga informasi babagan lari (tengah). Kita bisa ndeleng informasi sing luwih rinci (parameter, metrik, artefak lan sawetara informasi tambahan) kanggo saben peluncuran.

MLOps - Buku masak, bab 1

Kanggo saben metrik kita bisa mirsani sajarah owah-owahan

MLOps - Buku masak, bab 1

Sing. Ing wayahe, kita bisa nganalisa asil ing mode "manual", lan sampeyan uga bisa nyetel validasi otomatis nggunakake API MLflow.

6. Register model

Sawise nganalisa model lan mutusake yen wis siyap kanggo perang, kita nerusake ndhaptar, kanggo iki kita milih peluncuran sing dibutuhake (kaya sing ditampilake ing paragraf sadurunge) lan mudhun.

MLOps - Buku masak, bab 1

Sawise menehi jeneng model kita, ana versi. Yen sampeyan nyimpen model liyane kanthi jeneng sing padha, versi kasebut bakal dianyari kanthi otomatis.

MLOps - Buku masak, bab 1

Kanggo saben model, kita bisa nambah katrangan lan milih salah siji saka telung negara (Pementasan, Produksi, Arsip); banjur, nggunakake API, kita bisa ngakses negara kasebut, sing, bebarengan karo versi, nyedhiyakake keluwesan tambahan.

MLOps - Buku masak, bab 1

Kita uga duwe akses gampang kanggo kabeh model

MLOps - Buku masak, bab 1

lan versi sing

MLOps - Buku masak, bab 1

Kaya ing paragraf sadurunge, kabeh operasi bisa ditindakake kanthi nggunakake API.

7. Nyebar model

Ing tataran iki, kita wis duwe model terlatih (keras). Conto carane sampeyan bisa nggunakake:

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

Kene self.registry maneh pambungkus cilik liwat mlflow.tracking.MlflowClient, kanggo penak. Titik iku aku ngakses server remot lan golek model ana karo jeneng kasebut, lan versi produksi paling anyar. Sabanjure, aku ngundhuh artefak lokal menyang folder ./model lan mbangun model saka direktori iki mlflow.keras.load_model(local_path). Saiki kita bisa nggunakake model kita. Pangembang CV (ML) bisa kanthi gampang nambah model lan nerbitake versi anyar.

Ing kesimpulan

Aku nampilake sistem sing ngidini:

  • pusat nyimpen informasi babagan model ML, kemajuan latihan lan asil;
  • cepet nyebarake lingkungan pangembangan;
  • ngawasi lan nganalisa kemajuan karya ing model;
  • iku trep kanggo versi lan ngatur negara model;
  • Iku gampang kanggo masang model asil.

Conto iki minangka dolanan lan dadi titik wiwitan kanggo mbangun sistem sampeyan dhewe, sing bisa uga kalebu otomatisasi evaluasi asil lan registrasi model (titik 5 lan 6, masing-masing) utawa sampeyan bakal nambah versi dataset, utawa bisa uga liya ? Titik sing dakkarepake yaiku sampeyan butuh MLOps sakabèhé, MLflow mung minangka sarana kanggo mungkasi.

Tulis masalah apa sing sampeyan temoni sing ora dakdeleng?
Apa sing bakal ditambahake menyang sistem supaya bisa nyukupi kabutuhan sampeyan?
Apa alat lan pendekatan sing sampeyan gunakake kanggo ngatasi kabeh utawa sebagian masalah?

PS Aku bakal ninggalake sawetara link:
proyek github- https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Email kerjaku kanggo pitakonan - [email dilindhungi]

Perusahaan kita sacara periodik dadi tuan rumah macem-macem acara kanggo spesialis IT, contone: ing 8 Juli ing 19:00 wektu Moskow bakal ana CV meetup ing format online, yen sampeyan kasengsem, sampeyan bisa melu, registrasi. kene .

Source: www.habr.com

Add a comment