MLOps - Хоол хийх ном, 1-р бүлэг

MLOps - Хоол хийх ном, 1-р бүлэг

Сайн уу! Би CROC-д CV боловсруулагч. Бид CV чиглэлээр төсөл хэрэгжүүлээд 3 жил болж байна. Энэ хугацаанд бид маш олон зүйлийг хийсэн, тухайлбал: бид жолооч нарыг жолоодож байхдаа архи, тамхи татдаггүй, утсаар ярихгүй, зүүд, үүл рүү биш зам руу хардаг байхаар хяналт тавьсан. ; Бид тусгай эгнээнд явж, хэд хэдэн зогсоол эзэлдэг хүмүүсийг бүртгэсэн; ажилчдыг дуулга, бээлий гэх мэт хувцас өмссөн байх; байгууламжид орохыг хүссэн ажилтныг тодорхойлсон; Бид чадах бүхнээ тооцсон.

Би юуны төлөө энэ бүхнийг хийж байгаа юм бэ?

Төсөл хэрэгжүүлэх явцад бид овойлт, олон овойлт, таны мэддэг эсвэл ирээдүйд танил болох зарим асуудлуудыг даван туулсан.

Нөхцөл байдлыг дуурайж үзье

Бид үйл ажиллагаа нь ML-тэй холбоотой залуу "N" компанид ажилд орсон гэж төсөөлөөд үз дээ. Бид ML (DL, CV) төсөл дээр ажилладаг, дараа нь ямар нэг шалтгааны улмаас бид өөр ажилд шилжиж, ерөнхийдөө завсарлага аваад өөрийнхөө эсвэл өөр хэн нэгний нейрон руу буцдаг.

  1. Үнэний мөч ирэхэд та хаана зогссон, ямар гиперпараметрийг туршиж үзсэн, хамгийн чухал нь ямар үр дүнд хүргэсэнээ санах хэрэгтэй. Толгой, тохиргоо, тэмдэглэлийн дэвтэр, үүлэн доторх ажлын орчин зэрэг бүх нээлтийн мэдээллийг хэн хадгалах талаар олон сонголт байж болно. Гиперпараметрүүдийг кодын тайлбартай мөр болгон хадгалах сонголтыг би санамсаргүйгээр олж харлаа. Одоо та төсөлдөө биш харин компаниас гарсан хүний ​​төсөлд буцаж ирээд model_1.pb хэмээх код, загварыг өвлөн авсан гэж төсөөлөөд үз дээ. Зургийг гүйцээж, бүх зовлон зүдгүүрийг илэрхийлэхийн тулд өөрийгөө анхан шатны мэргэжилтэн гэж төсөөлөөд үз дээ.
  2. Үргэлжлүүл. Кодыг ажиллуулахын тулд бид болон түүнтэй ажиллах хүн бүр орчинг бүрдүүлэх хэрэгтэй. Ямар нэг шалтгаанаар тэд түүнийг бидний өв болгон үлдээгээгүй байх нь олонтаа тохиолддог. Энэ нь бас чухал биш ажил болж хувирдаг. Та энэ алхамд цаг үрмээргүй байна, тийм үү?
  3. Бид загвар (жишээлбэл, машины илрүүлэгч) сургадаг. Бид энэ нь маш сайн болох цэгт хүрдэг - үр дүнг хадгалах цаг болжээ. Үүнийг car_detection_v1.pb гэж нэрлэе. Дараа нь бид өөр нэгийг сургадаг - car_detection_v2.pb. Хэсэг хугацааны дараа манай хамт олон эсвэл бид өөр өөр архитектурыг ашиглан илүү ихийг заадаг. Үүний үр дүнд олон тооны олдворууд үүсдэг бөгөөд тэдгээрийн талаархи мэдээллийг маш их хичээнгүй цуглуулах ёстой (гэхдээ бид үүнийг дараа нь хийх болно, учир нь одоо бидэнд илүү нэн тэргүүний асуудал байгаа).
  4. За, одоо бүх зүйл дууслаа! Бидэнд загвар бий! Бид дараагийн загварыг сургаж, шинэ асуудлыг шийдэхийн тулд архитектур боловсруулж эхлэх үү, эсвэл цай ууж болох уу? Тэгээд хэн байрлуулах вэ?

Асуудлыг тодорхойлох

Аливаа төсөл, бүтээгдэхүүн дээр ажиллах нь олон хүний ​​хөдөлмөр байдаг. Тэгээд цаг хугацаа өнгөрөх тусам хүмүүс гараад ирдэг, олон төсөл гарч ирдэг, төслүүд нь өөрөө илүү төвөгтэй болдог. Нэг талаараа, дээр дурдсан мөчлөгийн нөхцөл байдал (зөвхөн биш) тодорхой хослолуудад давталтаас давталт хүртэл тохиолдох болно. Энэ бүхэн нь цаг хугацаа алдах, төөрөгдөл, мэдрэл, магадгүй үйлчлүүлэгчдийн сэтгэл ханамжгүй байдал, эцэст нь мөнгөө алдахад хүргэдэг. Хэдийгээр бид бүгд ижил хуучин тармуурыг дагадаг ч хэн ч эдгээр мөчүүдийг дахин дахин давтахыг хүсэхгүй гэдэгт би итгэдэг.

MLOps - Хоол хийх ном, 1-р бүлэг

Тэгэхээр бид хөгжлийн нэг мөчлөгийг туулж, шийдвэрлэх шаардлагатай асуудлууд байгааг харж байна. Үүнийг хийхийн тулд танд хэрэгтэй:

  • ажлын үр дүнг хадгалахад тохиромжтой;
  • шинэ ажилчдыг татан оролцуулах үйл явцыг хялбаршуулах;
  • хөгжүүлэлтийн орчныг ашиглах үйл явцыг хялбарчлах;
  • загвар хувилбарын процессыг тохируулах;
  • загварыг баталгаажуулах тохиромжтой аргатай байх;
  • төрийн удирдлагын загварыг олох;
  • загваруудыг үйлдвэрлэлд хүргэх арга замыг олох.

Энэ амьдралын мөчлөгийг хялбар бөгөөд тохь тухтай удирдах боломжийг танд олгох ажлын урсгалыг бий болгох шаардлагатай байна уу? Энэ дасгалыг MLOps гэж нэрлэдэг

MLOps буюу машин сурахад зориулсан DevOps нь мэдээллийн шинжлэх ухаан болон мэдээллийн технологийн багуудад машин сургалтын загварт хяналт тавих, баталгаажуулах, удирдах замаар загвар боловсруулах, байршуулах хурдыг нэмэгдүүлэх, хамтран ажиллах боломжийг олгодог.

Та чадна уншGoogle-ийн залуус энэ бүхний талаар юу гэж бодож байна вэ? Нийтлэлээс харахад MLOps бол нэлээд том зүйл юм.

MLOps - Хоол хийх ном, 1-р бүлэг

Цаашид нийтлэлдээ би үйл явцын зөвхөн нэг хэсгийг тайлбарлах болно. Хэрэгжүүлэхийн тулд би MLflow хэрэгслийг ашиглах болно, учир нь... Энэ бол нээлттэй эхийн төсөл бөгөөд холбогдохын тулд бага хэмжээний код шаардлагатай бөгөөд алдартай ml хүрээтэй интеграцчилал байдаг. Та Kubeflow, SageMaker, Trains гэх мэт бусад хэрэгслийг интернетээс хайж олох боломжтой бөгөөд магадгүй таны хэрэгцээнд илүү тохирохыг олох боломжтой.

MLFlow хэрэглүүрийг ашиглах жишээг ашиглан MLOps-ийг "барилга"

MLFlow бол мл загваруудын амьдралын мөчлөгийг удирдах нээлттэй эхийн платформ юм (https://mlflow.org/).

MLflow нь дөрвөн бүрэлдэхүүн хэсгээс бүрдэнэ.

  • MLflow Tracking - энэ үр дүнд хүргэсэн үр дүн, параметрүүдийг бүртгэх асуудлыг хамарна;
  • MLflow төсөл - кодыг багцалж, ямар ч платформ дээр хуулбарлах боломжийг олгодог;
  • MLflow загварууд - загваруудыг үйлдвэрлэлд нэвтрүүлэх үүрэгтэй;
  • MLflow Бүртгэл - загваруудыг хадгалах, тэдгээрийн төлөвийг төвлөрсөн агуулахад удирдах боломжийг олгодог.

MLflow нь хоёр байгууллага дээр ажилладаг:

  • хөөргөх нь бидний бүртгүүлэхийг хүсч буй сургалт, параметр, хэмжүүрүүдийн бүрэн мөчлөг юм;
  • Туршилт бол хамтдаа ажилладаг "сэдэв" юм.

Жишээний бүх алхмуудыг Ubuntu 18.04 үйлдлийн систем дээр хэрэгжүүлсэн.

1. Серверийг байршуулах

Төслөө хялбархан удирдаж, шаардлагатай бүх мэдээллийг хүлээн авахын тулд бид сервер байрлуулах болно. MLflow хянах сервер нь хоёр үндсэн бүрэлдэхүүн хэсэгтэй:

  • backend store - бүртгэгдсэн загваруудын талаарх мэдээллийг хадгалах үүрэгтэй (4 DBMS дэмждэг: mysql, mssql, sqlite, postgresql);
  • олдворын дэлгүүр - олдворуудыг хадгалах үүрэгтэй (7 хадгалах сонголтыг дэмждэг: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP сервер, SFTP сервер, NFS, HDFS).

Шиг олдворын дэлгүүр Энгийн болгох үүднээс sftp серверийг авч үзье.

  • бүлэг үүсгэх
    $ sudo groupadd sftpg
  • хэрэглэгч нэмж, түүнд нууц үг тохируулна уу
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • хэд хэдэн хандалтын тохиргоог тохируулах
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • /etc/ssh/sshd_config-д хэдэн мөр нэмнэ үү
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • үйлчилгээг дахин эхлүүлнэ үү
    $ sudo systemctl restart sshd

Шиг арын дэлгүүр 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

Серверийг эхлүүлэхийн тулд та дараах python багцуудыг суулгах хэрэгтэй (би тусдаа виртуал орчин үүсгэхийг зөвлөж байна):

pip install mlflow
pip install pysftp

Серверээ эхлүүлцгээе

$ 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. Хяналт нэмэх

Манай сургалтын үр дүн алдагдахгүй байх, ирээдүй хойч үеийн хөгжүүлэгчид юу болж байгааг ойлгохын тулд, ахмад нөхдүүд болон та сургалтын үйл явцыг тайвнаар шинжлэх чадвартай байхын тулд бид хянах системийг нэмэх хэрэгтэй. Мөрдөх гэдэг нь параметрүүд, хэмжигдэхүүнүүд, олдворууд болон сургалт эхлэхтэй холбоотой нэмэлт мэдээллийг манай тохиолдолд сервер дээр хадгалахыг хэлнэ.

Жишээлбэл, би жижиг зүйлийг бүтээсэн github дээрх төсөл Keras дээр байгаа бүх зүйлийг сегментчилэх COCO мэдээллийн багц. Хяналт нэмэхийн тулд би mlflow_training.py файл үүсгэсэн.

Энд хамгийн сонирхолтой зүйлс тохиолддог мөрүүд байна:

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)

Энд self.remote_server нь mlflow.tracking аргууд дээрх жижиг боодол юм. MlflowClient (би үүнийг тав тухтай байлгах үүднээс хийсэн), үүний тусламжтайгаар би туршилт хийж, сервер дээр ажиллуулдаг. Дараа нь би хөөргөх үр дүнг хаана нэгтгэхийг зааж өгнө (mlflow.set_tracking_uri(self.tracking_uri)). Би mlflow.keras.autolog() автомат бүртгэлийг идэвхжүүлдэг. Одоогоор MLflow Tracking нь TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark-ийн автомат бүртгэлийг дэмждэг. Хэрэв та өөрийн хүрээ эсвэл номын сангаа олоогүй бол та үргэлж нээлттэй нэвтэрч болно. Бид сургалтаа эхлүүлж байна. Алсын сервер дээр хаягууд болон оролтын параметрүүдийг бүртгэх.

Хэдэн шугамаар та бусад хүмүүсийн нэгэн адил бүх хөөргөлтийн талаархи мэдээллийг авах боломжтой. Сайхан байна уу?

3. Бид төслийг боловсруулдаг

Одоо төслийг эхлүүлэхэд хялбар болгоё. Үүнийг хийхийн тулд MLproject болон conda.yaml файлыг төслийн үндэс рүү нэмнэ.
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 төсөл нь хэд хэдэн шинж чанартай байдаг:

  • Нэр - таны төслийн нэр;
  • Хүрээлэн буй орчин - миний хувьд, conda_env нь Anaconda-г ажиллуулахад ашигладаг бөгөөд хамаарлын тодорхойлолт нь conda.yaml файлд байгааг харуулж байна;
  • Нэвтрэх цэгүүд - ямар файл, ямар параметрээр ажиллах боломжтойг заана (сургалт эхлэх үед бүх параметрүүдийг автоматаар бүртгэнэ)

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

Та docker-ыг ажиллах цагийн орчин болгон ашиглаж болно, дэлгэрэнгүй мэдээллийг эндээс авна уу баримт бичиг.

4. Бэлтгэлээ эхлүүлцгээе

Бид төслийг хуулбарлаж, төслийн лавлах руу очно:

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

Ажиллуулахын тулд та номын санг суулгах хэрэгтэй

pip install mlflow
pip install pysftp

Учир нь Миний conda_env ашигладаг жишээн дээр Анаконда таны компьютер дээр суулгасан байх ёстой (гэхдээ та шаардлагатай бүх багцуудыг өөрөө суулгаж, эхлүүлэх параметрүүдээр тоглох замаар үүнийг даван туулах боломжтой).

Бэлтгэлийн бүх үе шат дууссан бөгөөд бид сургалтаа эхлүүлж болно. Төслийн үндэсээс:

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

Командыг оруулсны дараа автоматаар конда орчин үүсэж сургалт эхэлнэ.
Дээрх жишээн дээр би сургалтын үе шатуудын тоо, бидний сегментлэхийг хүсч буй ангиллыг дамжуулсан (та бүрэн жагсаалтыг харах боломжтой) энд) болон манай алсын серверийн хаяг.
Боломжит параметрүүдийн бүрэн жагсаалтыг MLproject файлаас олж болно.

5. Сургалтын үр дүнг үнэлэх

Сургалт дууссаны дараа бид хөтөч дээр серверийнхээ хаяг руу орж болно http://server_host:server_port

MLOps - Хоол хийх ном, 1-р бүлэг

Энд бид бүх туршилтуудын жагсаалтыг (зүүн дээд талд), мөн гүйлтийн талаархи мэдээллийг (дунд талд) харж болно. Бид хөөргөх бүрийн дэлгэрэнгүй мэдээллийг (параметр, хэмжүүр, олдвор болон зарим нэмэлт мэдээлэл) харах боломжтой.

MLOps - Хоол хийх ном, 1-р бүлэг

Хэмжилт бүрийн хувьд бид өөрчлөлтийн түүхийг ажиглаж болно

MLOps - Хоол хийх ном, 1-р бүлэг

Тэдгээр. Одоогоор бид үр дүнг "гарын авлага" горимд шинжлэх боломжтой бөгөөд та MLflow API ашиглан автомат баталгаажуулалтыг тохируулах боломжтой.

6. Загварыг бүртгүүлнэ үү

Загвартаа дүн шинжилгээ хийж, тулалдаанд бэлэн болсон гэж шийдсэний дараа бид үүнийг бүртгэж, үүний тулд шаардлагатай хөөргөлтийг сонгоод (өмнөх догол мөрөнд үзүүлсэн шиг) доошоо бууна.

MLOps - Хоол хийх ном, 1-р бүлэг

Бид загвартаа нэр өгсний дараа энэ нь хувилбартай болно. Хэрэв та ижил нэртэй өөр загвар хадгалвал хувилбар автоматаар шинэчлэгдэх болно.

MLOps - Хоол хийх ном, 1-р бүлэг

Загвар бүрийн хувьд бид тайлбар нэмж, гурван төлөвийн аль нэгийг нь сонгох боломжтой (Staging, Production, Archived); Дараа нь API ашиглан бид эдгээр төлөвт хандах боломжтой бөгөөд энэ нь хувилбарын хамт нэмэлт уян хатан байдлыг хангадаг.

MLOps - Хоол хийх ном, 1-р бүлэг

Мөн бид бүх загварт хялбар хандах боломжтой

MLOps - Хоол хийх ном, 1-р бүлэг

болон тэдгээрийн хувилбарууд

MLOps - Хоол хийх ном, 1-р бүлэг

Өмнөх догол мөрийн нэгэн адил бүх үйлдлийг API ашиглан хийж болно.

7. Загварыг байрлуул

Энэ үе шатанд бид аль хэдийн бэлтгэгдсэн (керас) загвартай болсон. Үүнийг хэрхэн ашиглаж болох жишээ:

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

Энд self.registry нь илүү хялбар болгох үүднээс mlflow.tracking.MlflowClient дээрх жижиг боодол юм. Гол нь би алсын серверт нэвтэрч тэндээс заасан нэртэй загвар, хамгийн сүүлийн үеийн үйлдвэрлэлийн хувилбарыг хайж байна. Дараа нь би олдворыг ./model хавтас руу татаж аваад mlflow.keras.load_model(local_path) сангаас загварыг бүтээнэ. Одоо бид загвараа ашиглаж болно. CV (ML) хөгжүүлэгчид загварыг хялбархан сайжруулж, шинэ хувилбаруудыг нийтлэх боломжтой.

Эцэст нь хэлэхэд

Би дараахь боломжийг олгодог системийг танилцуулсан.

  • ML загвар, сургалтын явц, үр дүнгийн талаарх мэдээллийг төвлөрсөн байдлаар хадгалах;
  • хөгжлийн орчныг хурдан байршуулах;
  • загвар дээрх ажлын явцыг хянах, дүн шинжилгээ хийх;
  • загваруудын төлөвийг өөрчлөх, удирдахад тохиромжтой;
  • Үүссэн загваруудыг байрлуулахад хялбар байдаг.

Энэ жишээ нь тоглоом бөгөөд үр дүнг үнэлэх автоматжуулалт, загварыг бүртгэх (5 ба 6-р зүйл) багтаасан өөрийн системийг бий болгох эхлэлийн цэг болж өгдөг, эсвэл та өгөгдлийн багцын хувилбарыг нэмэх эсвэл өөр зүйл хийх боломжтой юу? Миний хэлэхийг оролдсон зүйл бол танд бүхэлд нь MLOps хэрэгтэй, MLflow бол зорилгодоо хүрэх хэрэгсэл юм.

Надад харуулаагүй ямар асуудал тулгарснаа бичнэ үү?
Таны хэрэгцээг хангахын тулд системд юу нэмэх вэ?
Асуудлыг бүхэлд нь эсвэл хэсэгчлэн шийдвэрлэхийн тулд та ямар арга хэрэгсэл, аргыг ашигладаг вэ?

Жич: Би хэд хэдэн холбоос үлдээх болно:
github төсөл - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Асуулт авах бол миний ажлын имэйл - [имэйлээр хамгаалагдсан]

Манай компани мэдээллийн технологийн мэргэжилтнүүдэд зориулсан төрөл бүрийн арга хэмжээг үе үе зохион байгуулдаг, тухайлбал: 8-р сарын 19-нд Москвагийн цагаар 00:XNUMX цагт онлайн хэлбэрээр CV уулзалт болно, хэрэв та сонирхож байвал оролцох боломжтой, бүртгүүлэх боломжтой. энд .

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх