MLOps - Кук китеби, 1-бөлүм

MLOps - Кук китеби, 1-бөлүм

Баарына салам! Мен CROCта CV иштеп чыгуучумун. 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, маалымат илимине жана IT командаларына биргелешип иштөөгө жана машинаны үйрөнүү моделдерин көзөмөлдөө, текшерүү жана башкаруу аркылуу моделди иштеп чыгуу жана жайылтуу темпин жогорулатууга мүмкүндүк берет.

алат ардакGoogle жигиттери мунун баары жөнүндө эмне деп ойлошот? Макаладан MLOps абдан чоң нерсе экени көрүнүп турат.

MLOps - Кук китеби, 1-бөлүм

Андан ары менин макаламда мен процесстин бир бөлүгүн гана сүрөттөйм. Ишке ашыруу үчүн мен MLflow куралын колдоном, анткени... Бул ачык булактуу долбоор, туташуу үчүн аз сандагы код талап кылынат жана популярдуу ml алкактары менен интеграция бар. Сиз Интернеттен Kubeflow, SageMaker, Trains ж.б. сыяктуу башка куралдарды издеп, балким, сиздин муктаждыктарыңызга туура келгенин таба аласыз.

MLFlow куралын колдонуунун мисалын колдонуп, MLOps "куруу"

MLFlow - бул ml моделдерин башкаруу үчүн ачык булак платформасы (https://mlflow.org/).

MLflow төрт компонентти камтыйт:

  • MLflow Tracking - бул натыйжага алып келген жыйынтыктарды жана параметрлерди жазуу маселелерин камтыйт;
  • MLflow долбоору - кодду пакеттөө жана аны каалаган платформада кайра чыгарууга мүмкүндүк берет;
  • MLflow Models - моделдерди өндүрүшкө жайылтуу үчүн жооптуу;
  • MLflow реестри - борборлоштурулган репозиторийде моделдерди сактоого жана алардын абалын башкарууга мүмкүндүк берет.

MLflow эки объектте иштейт:

  • ишке киргизүү - бул тренингдин, параметрлердин жана метрикалардын толук цикли, алар аркылуу биз каттагыбыз келет;
  • Эксперимент - бул чогуу иштеген "тема".

Мисалдагы бардык кадамдар Ubuntu 18.04 операциялык тутумунда ишке ашырылат.

1. Серверди жайгаштырыңыз

Долбоорубузду оңой башкаруу жана бардык керектүү маалыматты алуу үчүн биз серверди орнотобуз. MLflow көзөмөлдөө серверинде эки негизги компонент бар:

  • backend дүкөнү - катталган моделдер жөнүндө маалыматты сактоо үчүн жооптуу (4 DBMS колдойт: mysql, mssql, sqlite жана postgresql);
  • артефакт дүкөнү - артефакттарды сактоо үчүн жооптуу (7 сактоо опциясын колдойт: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP сервери, SFTP Server, 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 долбоору бир нече касиеттерге ээ:

  • Аты - долбооруңуздун аталышы;
  • Курчап турган чөйрө - менин учурда, conda_env Анаконданы иштетүү үчүн колдонулганын жана көз карандылыктын сүрөттөлүшү 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дө онлайн форматта CV жолугушуу болот, эгер кызыксаңыз катыша аласыз, катталуу бул жерде .

Source: www.habr.com

Комментарий кошуу