MLOps - аспаздық кітап, 1 тарау

MLOps - аспаздық кітап, 1 тарау

Бәріңе сәлем! Мен CROC компаниясында түйіндеме әзірлеушісімін. Біз 3 жылдан бері түйіндеме саласындағы жобаларды жүзеге асырып келеміз. Осы уақыт ішінде біз көп нәрсе жасадық, мысалы: біз жүргізушілерді көлік жүргізу кезінде ішімдік ішпеуі, темекі шекпеуі, телефонмен сөйлеспеуі, арманға немесе бұлтқа емес, жолға қарамауы үшін бақылап отырдық. ; Біз арнайы жолақтармен жүретін және бірнеше тұрақ орнын алатын адамдарды тіркедік; жұмысшылардың каска, қолғап және т.б. киюін қамтамасыз етті; объектіге кіргісі келетін қызметкерді анықтау; Біз қолымыздан келгеннің бәрін санадық.

Мұның бәрін мен не үшін істеп жатырмын?

Жобаларды жүзеге асыру барысында біз соққыларға тап болдық, көптеген төбешіктер, кейбір мәселелер сізге таныс немесе болашақта таныс болады.

Жағдайды имитациялайық

Біз қызметі ML-мен байланысты «N» жас компаниясына жұмысқа тұрдық деп елестетейік. Біз ML (DL, CV) жобасында жұмыс істейміз, содан кейін қандай да бір себептермен біз басқа жұмысқа ауысамыз, әдетте үзіліс жасаймыз және өзіміздің немесе басқа біреудің нейронына ораламыз.

  1. Ақиқат сәті келеді, сіз қай жерде тоқтағаныңызды, қандай гиперпараметрлерді қолданып көргеніңізді және, ең бастысы, олар қандай нәтижелерге әкелгенін есте сақтауыңыз керек. Барлық іске қосулардағы ақпаратты кім сақтағанының көптеген нұсқалары болуы мүмкін: басты, конфигурациялар, блокнот, бұлттағы жұмыс ортасында. Мен гиперпараметрлер кодта түсіндірме жолдар ретінде сақталған кезде опцияны көрдім, жалпы алғанда, сәнді ұшу. Енді сіз өз жобаңызға емес, компаниядан кеткен адамның жобасына оралдыңыз және модель_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 — ml үлгілерінің өмірлік циклін басқаруға арналған ашық бастапқы платформа (https://mlflow.org/).

MLflow төрт компонентті қамтиды:

  • MLflow Tracking – осы нәтижеге әкелген нәтижелер мен параметрлерді жазу мәселелерін қамтиды;
  • MLflow жобасы – кодты бумалауға және оны кез келген платформада қайта шығаруға мүмкіндік береді;
  • MLflow үлгілері – модельдерді өндіріске енгізуге жауапты;
  • MLflow Registry - үлгілерді сақтауға және олардың күйін орталықтандырылған репозиторийде басқаруға мүмкіндік береді.

MLflow екі нысанда жұмыс істейді:

  • іске қосу - бұл біз тіркегіміз келетін жаттығулардың, параметрлердің және метриканың толық циклі;
  • Эксперимент - бұл бірге жүретін «тақырып».

Мысалдың барлық қадамдары Ubuntu 18.04 операциялық жүйесінде жүзеге асырылады.

1. Серверді орналастырыңыз

Жобамызды оңай басқару және барлық қажетті ақпаратты алу үшін біз серверді орналастырамыз. MLflow бақылау серверінде екі негізгі компонент бар:

  • backend store - тіркелген үлгілер туралы ақпаратты сақтауға жауапты (4 ДҚБЖ қолдайды: 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-тағы жоба Керастағы барлық нәрсені сегменттеу үшін 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 жобасының бірнеше қасиеттері бар:

  • Name - жобаңыздың атауы;
  • Орта - менің жағдайда, 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

Сіз доккерді орындау ортасы ретінде пайдалана аласыз, қосымша мәліметтерді қараңыз құжаттама.

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 - бұл мақсатқа жету құралы.

Мен көрсетпеген қандай мәселелерге тап болғаныңызды жазыңыз?
Жүйе сіздің қажеттіліктеріңізді қанағаттандыру үшін оған не қосар едіңіз?
Барлық мәселелерді немесе бір бөлігін шешу үшін қандай құралдар мен тәсілдерді қолданасыз?

PS Мен бірнеше сілтеме қалдырамын:
github жобасы - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
Сұрақтар үшін менің жұмыс электрондық поштам - [электрондық пошта қорғалған]

Біздің компания IT мамандары үшін мерзімді түрде әртүрлі іс-шараларды өткізеді, мысалы: 8 шілдеде Мәскеу уақытымен сағат 19:00-де онлайн форматта түйіндеме кездесуі өтеді, егер сізді қызықтырса, қатыса аласыз, тіркелу осында .

Ақпарат көзі: www.habr.com

пікір қалдыру