Баарына салам! Мен CROCта CV иштеп чыгуучумун. 3 жылдан бери резюме жаатында долбоорлорду ишке ашырып жатабыз. Бул убакыттын ичинде биз көп нерселерди жасадык, мисалы: айдоочуларды айдап баратканда ичимдик айдабашы, тамеки тартпашы, телефон менен сүйлөшпөшү, түшкө же булуттарга эмес, жолду карашы үчүн көзөмөлгө алып турдук. ; Биз атайын тилкелерде айдап, бир нече унаа токтотуучу жайларды ээлеген адамдарды жаздык; жумушчулардын каска, кол кап ж.б. кийүүсүн камсыз кылган; объектке кирүүнү каалаган кызматкерди аныктоо; Колубуздан келгендин баарын санадык.
Мен мунун баарын эмне үчүн кылып жатам?
Долбоорлорду ишке ашыруу процессинде биз бир топ мүчүлүштүктөрдү, кээ бир көйгөйлөрдү сиз же тааныш болгон же келечекте таанышып чыгабыз.
Келгиле, кырдаалды симуляция кылалы
Келгиле, биз иш-аракети ML менен байланышкан жаш "N" компаниясына жумушка орноштук деп элестетип көрөлү. Биз ML (DL, CV) долбоорунун үстүндө иштейбиз, андан кийин кандайдыр бир себептерден улам биз башка жумушка өтүп, жалпысынан тыныгуу алып, өзүбүздүн же башка бирөөнүн нейронуна кайтып келебиз.
Чындыктын учуру келет, сиз кайсы жерде токтогонуңузду, кандай гиперпараметрлерди сынап көргөнүңүздү жана эң негизгиси, алар кандай натыйжаларга алып келгенин эстешиңиз керек. Бардык ишке киргизүүдө маалыматты ким сактаган үчүн көптөгөн варианттар болушу мүмкүн: башта, конфигурацияларда, блокнотто, булуттагы жумушчу чөйрөдө. Мен кокусунан гиперпараметрлер коддо комментарийленген саптар катары сакталган вариантты көрдүм, жалпысынан, укмуштуудай учуу. Эми сиз өзүңүздүн долбооруңузга эмес, компаниядан кеткен адамдын долбооруна кайтып келдиңиз жана модел_1.pb деп аталган код менен моделди мурастап алдыңыз деп элестетиңиз. Сүрөттү толуктоо жана бардык ооруну жеткирүү үчүн, сиз дагы башталгыч адис экениңизди элестетели.
Уланта бер. Кодду иштетүү үчүн биз жана аны менен иштей тургандардын бардыгы чөйрөнү түзүшүбүз керек. Көбүнчө эмнегедир аны бизге мурас катары калтырышкан жок. Бул да маанилүү эмес иш болуп калышы мүмкүн. Бул кадамга убакыт короткуңуз келбейт, туурабы?
Биз моделди (мисалы, унаа детекторун) үйрөтөбүз. Биз абдан жакшы болуп калат чекитине чейин - бул натыйжаны сактап калуу үчүн убакыт келди. Аны car_detection_v1.pb деп атайлы. Андан кийин биз дагы бир үйрөтөбүз - car_detection_v2.pb. Бир нече убакыт өткөндөн кийин, биздин кесиптештер же өзүбүз ар кандай архитектураларды колдонуу менен көбүрөөк окутуп жатабыз. Натыйжада, артефакттардын бир тобу түзүлөт, алар жөнүндө маалымат тырышчаактык менен чогултулушу керек (бирок биз муну кийинчерээк жасайбыз, анткени азыр бизде артыкчылыктуу маселелер бар).
Макул, азыр баары бүттү! Бизде модель бар! Кийинки моделди үйрөтүп, жаңы көйгөйдү чечүү үчүн архитектураны иштеп чыга алабызбы же чай ичсек болобу? Анан ким жиберет?
Көйгөйлөрдү аныктоо
Долбоордун же буюмдун үстүндө иштөө көптөгөн адамдардын иши. Ал эми убакыттын өтүшү менен адамдар кетип, келишет, долбоорлор көбөйүп, долбоорлордун өзү татаалдашып кетет. Тигил же бул, жогоруда сүрөттөлгөн циклден (жана гана эмес) белгилүү бир айкалыштарда жагдайлар итерациядан итерацияга чейин пайда болот. Мунун баары убакытты, баш аламандыкты, нервдерди, балким, кардарлардын нааразычылыгын жана акыр-аягы, акчаны жоготууга алып келет. Биз баарыбыз бир эле эски тырмоо менен жүрсөк да, мен эч ким бул көз ирмемдерди кайра-кайра кайталагысы келбейт деп ишенем.
Ошентип, биз өнүгүүнүн бир циклинен өттүк жана чечүүнү талап кылган көйгөйлөр бар экенин көрүп жатабыз. Бул үчүн сизге керек:
иштин натыйжаларын ыңгайлуу сактоо;
жаңы кызматкерлерди тартуу процессин жөнөкөйлөтүү;
иштеп чыгуу чөйрөсүн жайылтуу процессин жөнөкөйлөтүү;
моделдин версия процессин конфигурациялоо;
моделдерди текшерүү үчүн ыңгайлуу жолу бар;
үлгү мамлекеттик башкаруу куралын табуу;
моделдерди өндүрүшкө жеткирүүнүн жолун табуу.
Кыязы, бул жашоо циклин оңой жана ыңгайлуу башкарууга мүмкүндүк бере турган иш процессин ойлоп табуу керек окшойт? Бул практика MLOps деп аталат
MLOps, же машина үйрөнүү үчүн DevOps, маалымат илимине жана IT командаларына биргелешип иштөөгө жана машинаны үйрөнүү моделдерин көзөмөлдөө, текшерүү жана башкаруу аркылуу моделди иштеп чыгуу жана жайылтуу темпин жогорулатууга мүмкүндүк берет.
алат ардакGoogle жигиттери мунун баары жөнүндө эмне деп ойлошот? Макаладан MLOps абдан чоң нерсе экени көрүнүп турат.
Андан ары менин макаламда мен процесстин бир бөлүгүн гана сүрөттөйм. Ишке ашыруу үчүн мен MLflow куралын колдоном, анткени... Бул ачык булактуу долбоор, туташуу үчүн аз сандагы код талап кылынат жана популярдуу ml алкактары менен интеграция бар. Сиз Интернеттен Kubeflow, SageMaker, Trains ж.б. сыяктуу башка куралдарды издеп, балким, сиздин муктаждыктарыңызга туура келгенин таба аласыз.
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 серверин алалы.
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 пакеттерин орнотуу керек (мен өзүнчө виртуалдык чөйрө түзүүнү сунуштайм):
Биздин окутуунун натыйжалары жоголуп кетпеши үчүн, иштеп чыгуучулардын келечек муундары эмне болуп жатканын түшүнүшү үчүн, ал эми улуу жолдоштор жана сиздер окуу процессин сабырдуулук менен талдай алышыңыз үчүн, биз байкоону кошуубуз керек. Көз салуу - бул параметрлерди, метрикаларды, артефакттарды жана окутуунун башталышы жөнүндө кошумча маалыматты, биздин учурда серверде сактоо.
Мисалы, мен кичинекей түздүм 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
Курчап турган чөйрө - менин учурда, conda_env Анаконданы иштетүү үчүн колдонулганын жана көз карандылыктын сүрөттөлүшү conda.yaml файлында экенин көрсөтөт;
Кирүү пункттары - кайсы файлдарды жана кайсы параметрлерди иштете аларыбызды көрсөтөт (бардык параметрлер машыгууну баштаганда автоматтык түрдө катталат)
Сиз докерди иштөө чөйрөсү катары колдонсоңуз болот, кененирээк маалымат алуу үчүн кайрылыңыз документтер.
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 файлынан тапса болот.
Бул жерде биз бардык эксперименттердин тизмесин көрөбүз (жогорку сол), ошондой эле чуркоо боюнча маалыматты (ортодо). Биз ар бир ишке киргизүү үчүн кеңири маалыматты (параметрлер, метрика, артефакттар жана кээ бир кошумча маалымат) көрө алабыз.
Ар бир метрика үчүн биз өзгөрүүлөрдүн тарыхын байкай алабыз
Ошол. Учурда биз натыйжаларды “кол” режиминде талдай алабыз, ошондой эле MLflow API аркылуу автоматтык текшерүүнү орното аласыз.
6. Моделди каттаңыз
Моделибизди талдап чыгып, ал согушка даяр деп чечкенден кийин, биз аны каттоого киришебиз, бул үчүн биз керектүү учурууну тандап (мурунку абзацта көрсөтүлгөндөй) жана ылдый түшөбүз.
Моделибизге ат бергенден кийин, анын версиясы бар. Эгер сиз ушул эле аталыштагы башка моделди сактасаңыз, версия автоматтык түрдө жаңыртылат.
Ар бир модель үчүн биз сүрөттөмө кошуп, үч абалдын бирин тандай алабыз (Staging, Production, Archived); Кийинчерээк, API аркылуу биз бул мамлекеттерге кире алабыз, алар версиялоо менен бирге кошумча ийкемдүүлүктү камсыздайт.
Бизде бардык моделдерге оңой жетүү мүмкүнчүлүгү бар
жана алардын версиялары
Мурунку абзацтагыдай эле, бардык операциялар API аркылуу аткарылышы мүмкүн.
7. Моделди жайылтыңыз
Бул этапта бизде буга чейин үйрөтүлгөн (керас) модели бар. Сиз аны кантип колдонсоңуз боло турган мисал:
Бул жерде self.registry дагы ынгайлуулугу үчүн, mlflow.tracking.MlflowClient үстүнөн кичинекей орогуч болуп саналат. Кеп, мен алыскы серверге кирем жана ал жерде көрсөтүлгөн аталышы жана акыркы өндүрүш версиясы бар моделди издейм. Андан кийин, мен артефактты жергиликтүү түрдө ./model папкасына жүктөйм жана бул каталогдон моделди түзөм mlflow.keras.load_model(local_path). Эми биз моделибизди колдоно алабыз. CV (ML) иштеп чыгуучулары моделди оңой жакшыртып, жаңы версияларды чыгара алышат.
Жыйынтык
Мен мүмкүндүк берүүчү системаны сунуштадым:
ML моделдери, окутуунун жүрүшү жана натыйжалары жөнүндө маалыматты борборлоштурулган сактоо;
тез өнүктүрүү чөйрөсүн жайылтуу;
моделдер боюнча иштин жүрүшүнө мониторинг жүргүзүү жана талдоо;
бул моделдердин абалын версияга жана башкарууга ыңгайлуу;
Алынган моделдерди жайылтуу оңой.
Бул мисал оюнчук болуп саналат жана өзүңүздүн системаңызды куруу үчүн баштапкы чекит катары кызмат кылат, ал жыйынтыктарды баалоону автоматташтыруу жана моделдерди каттоону камтышы мүмкүн (тиешелүүлүгүнө жараша 5 жана 6-пункттар) же сиз маалымат топтомдорунун версиясын кошосузбу же дагы башка нерсе? Мен айткым келген нерсе, сизге жалпысынан MLOps керек, MLflow - бул максатка жетүү үчүн гана каражат.
Мен көрсөтпөгөн кандай көйгөйлөргө туш болгонун жазыңыз?
Сиздин муктаждыктарыңызды канааттандыруу үчүн системага эмнелерди кошот элеңиз?
Маселелердин баарын же бир бөлүгүн чечүү үчүн кандай куралдарды жана ыкмаларды колдоносуз?
Биздин компания мезгил-мезгили менен IT адистери үчүн ар кандай иш-чараларды өткөрүп турат, мисалы: 8-июль күнү Москва убактысы боюнча саат 19:00дө онлайн форматта CV жолугушуу болот, эгер кызыксаңыз катыша аласыз, катталуу бул жерде .