From 16e072562895bd0444e321c345e0ab2a7cbda980 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 3 Oct 2024 19:07:00 +0300 Subject: [PATCH] lec5 --- README.md | 3 +- assets/mlflow/comment.txt | 1 + assets/mlflow/requirements | 2 - assets/mlflow/requirements.txt | 3 + assets/mlflow/research.ipynb | 2010 ++++++++++++++++++++++++++++++++ lectures/lec4-mlflow.odp | Bin 1335924 -> 1330727 bytes lectures/lec4-mlflow.pptx | Bin 1342588 -> 1342581 bytes 7 files changed, 2016 insertions(+), 3 deletions(-) create mode 100644 assets/mlflow/comment.txt delete mode 100644 assets/mlflow/requirements create mode 100644 assets/mlflow/requirements.txt create mode 100644 assets/mlflow/research.ipynb diff --git a/README.md b/README.md index 16007a6..37e26da 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,10 @@ | 12.09.2024 | [Изолирование окружения. Docker](./lectures/lec2-docker.odp) - [в формате pptx](./lectures/lec2-docker.pptx) | | 19.09.2024 | [Разведочный анализ данных](./lectures/lec3-eda.odp) - [в формате pptx](./lectures/lec3-eda.pptx) | | 26.09.2024 | [MLFlow](./lectures/lec3-eda.odp) - [в формате pptx](./lectures/lec4-mlflow.pptx) | +| 26.09.2024 | [MLFlow - практика](./assets/mlflow/mlflow.ipynb) | ## Лабораторные работы [Лабораторная работа 1.](./labs/lab1.md) Настройка окружения и раведочный анализ данных -## [Журнал](https://docs.google.com/spreadsheets/d/10juwyGqOhiD_czxfVziLj10aHYTaCp5oDmhesBJkxYM/edit?gid=1516016995#gid=1516016995) \ No newline at end of file +## [Журнал](https://docs.google.com/spreadsheets/d/10juwyGqOhiD_czxfVziLj10aHYTaCp5oDmhesBJkxYM/edit?gid=1516016995#gid=1516016995) \ No newline at end of file diff --git a/assets/mlflow/comment.txt b/assets/mlflow/comment.txt new file mode 100644 index 0000000..f0a4963 --- /dev/null +++ b/assets/mlflow/comment.txt @@ -0,0 +1 @@ +Model for estate \ No newline at end of file diff --git a/assets/mlflow/requirements b/assets/mlflow/requirements deleted file mode 100644 index fcbe262..0000000 --- a/assets/mlflow/requirements +++ /dev/null @@ -1,2 +0,0 @@ -mlflow==2.7.1 -scikit-learn diff --git a/assets/mlflow/requirements.txt b/assets/mlflow/requirements.txt new file mode 100644 index 0000000..971bb15 --- /dev/null +++ b/assets/mlflow/requirements.txt @@ -0,0 +1,3 @@ +numpy==2.1.1 +mlflow==2.16 +scikit-learn \ No newline at end of file diff --git a/assets/mlflow/research.ipynb b/assets/mlflow/research.ipynb new file mode 100644 index 0000000..c1ca6cf --- /dev/null +++ b/assets/mlflow/research.ipynb @@ -0,0 +1,2010 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import mlflow\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "import pandas as pd\n", + "import numpy\n", + "\n", + "from sklearn.preprocessing import StandardScaler, OrdinalEncoder, OneHotEncoder\n", + "\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.linear_model import LinearRegression\n", + "\n", + "from sklearn.metrics import mean_absolute_percentage_error, mean_absolute_error, mean_squared_error" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 539355 entries, 1979096 to 5189500\n", + "Data columns (total 12 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 price 539355 non-null int64 \n", + " 1 geo_lat 539355 non-null float32 \n", + " 2 geo_lon 539355 non-null float32 \n", + " 3 region 539355 non-null category\n", + " 4 building_type 539355 non-null category\n", + " 5 level 539355 non-null int8 \n", + " 6 levels 539355 non-null int8 \n", + " 7 rooms 539355 non-null int8 \n", + " 8 area 539355 non-null float16 \n", + " 9 kitchen_area 539355 non-null float16 \n", + " 10 object_type 539355 non-null category\n", + " 11 floor_level 539355 non-null object \n", + "dtypes: category(3), float16(2), float32(2), int64(1), int8(3), object(1)\n", + "memory usage: 21.6+ MB\n" + ] + } + ], + "source": [ + "df = pd.read_pickle('data/clean_data.pkl').sample(frac=0.1, random_state = 2) # Уменьшаем размер чтобы модель быстрее обучалась на лекции\n", + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "df = df.rename(columns={'price': 'target'})" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/andrey/work/institute/MLE/assets/mlflow/.venv_lec_mlflow/lib/python3.10/site-packages/pandas/io/formats/format.py:1458: RuntimeWarning: overflow encountered in cast\n", + " has_large_values = (abs_vals > 1e6).any()\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
targetgeo_latgeo_lonregionbuilding_typelevellevelsroomsareakitchen_areaobject_typefloor_level
1979096130000052.82109883.1130376817111366.5000010.0000001first
1833303880000055.70753937.467068311516246.000007.0000001hi
1494335195800054.98840082.783691965421317136.5000011.96093811hi
2747476146160053.29855350.3263823106355132.593759.60156211last
5027275300000042.89793447.62482540073410270.0000012.00000011mid
.......................................
2476626149000054.94380682.95787096541210148.0625014.00000011low
14874541900000055.77224037.731136334123100.0000013.0000001mid
2772844120000054.47459053.5318072722159132.093757.0000001mid
3982304230000055.37826539.05331081115249.000009.0000001first
5189500915773055.54295737.47991931817252.3125017.59375011mid
\n", + "

539355 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " target geo_lat geo_lon region building_type level levels \\\n", + "1979096 1300000 52.821098 83.113037 6817 1 1 1 \n", + "1833303 8800000 55.707539 37.467068 3 1 15 16 \n", + "1494335 1958000 54.988400 82.783691 9654 2 13 17 \n", + "2747476 1461600 53.298553 50.326382 3106 3 5 5 \n", + "5027275 3000000 42.897934 47.624825 4007 3 4 10 \n", + "... ... ... ... ... ... ... ... \n", + "2476626 1490000 54.943806 82.957870 9654 1 2 10 \n", + "1487454 19000000 55.772240 37.731136 3 3 4 12 \n", + "2772844 1200000 54.474590 53.531807 2722 1 5 9 \n", + "3982304 2300000 55.378265 39.053310 81 1 1 5 \n", + "5189500 9157730 55.542957 37.479919 3 1 8 17 \n", + "\n", + " rooms area kitchen_area object_type floor_level \n", + "1979096 3 66.50000 10.000000 1 first \n", + "1833303 2 46.00000 7.000000 1 hi \n", + "1494335 1 36.50000 11.960938 11 hi \n", + "2747476 1 32.59375 9.601562 11 last \n", + "5027275 2 70.00000 12.000000 11 mid \n", + "... ... ... ... ... ... \n", + "2476626 1 48.06250 14.000000 11 low \n", + "1487454 3 100.00000 13.000000 1 mid \n", + "2772844 1 32.09375 7.000000 1 mid \n", + "3982304 2 49.00000 9.000000 1 first \n", + "5189500 2 52.31250 17.593750 11 mid \n", + "\n", + "[539355 rows x 12 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(df.drop('target', axis=1), df['target'], test_size=0.25, random_state=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['region', 'building_type', 'object_type', 'floor_level']" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat_features = X_train.select_dtypes(include=['category','object']).columns.to_list()\n", + "cat_features" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['geo_lat', 'geo_lon', 'level', 'levels', 'rooms', 'area', 'kitchen_area']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_features = X_train.select_dtypes(include=['number']).columns.to_list()\n", + "num_features" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "https://scikit-learn.org/stable/api/sklearn.preprocessing.html - разные способы кодирования и скалирования" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "s_scaler = StandardScaler()\n", + "l_encoder = OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=999) # unknown_value нужно выбирать с умом\n", + "regressor = RandomForestRegressor(n_estimators=20, max_depth=10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Column transformer" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# Для удобной работы со столбцами\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', s_scaler, num_features), # преобразования для числовых признаков\n", + " ('cat', l_encoder, cat_features), # преобразования для категориальных признаков\n", + " ],\n", + " remainder='drop' ) # Удаляем столбцы, которые не затронуты преобразования" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Pipeline(steps=[('preprocessor',\n",
+       "                 ColumnTransformer(transformers=[('num', StandardScaler(),\n",
+       "                                                  ['geo_lat', 'geo_lon',\n",
+       "                                                   'level', 'levels', 'rooms',\n",
+       "                                                   'area', 'kitchen_area']),\n",
+       "                                                 ('cat',\n",
+       "                                                  OrdinalEncoder(handle_unknown='use_encoded_value',\n",
+       "                                                                 unknown_value=999),\n",
+       "                                                  ['region', 'building_type',\n",
+       "                                                   'object_type',\n",
+       "                                                   'floor_level'])])),\n",
+       "                ('model',\n",
+       "                 RandomForestRegressor(max_depth=10, n_estimators=20))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "Pipeline(steps=[('preprocessor',\n", + " ColumnTransformer(transformers=[('num', StandardScaler(),\n", + " ['geo_lat', 'geo_lon',\n", + " 'level', 'levels', 'rooms',\n", + " 'area', 'kitchen_area']),\n", + " ('cat',\n", + " OrdinalEncoder(handle_unknown='use_encoded_value',\n", + " unknown_value=999),\n", + " ['region', 'building_type',\n", + " 'object_type',\n", + " 'floor_level'])])),\n", + " ('model',\n", + " RandomForestRegressor(max_depth=10, n_estimators=20))])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "pipeline = Pipeline(steps=[('preprocessor', preprocessor), \n", + " ('model', regressor)])\n", + "\n", + "pipeline.fit(X_train, y_train)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'mae': np.float64(1276343.108894747),\n", + " 'mape': np.float64(0.35471390164231303),\n", + " 'mse': np.float64(174567675833231.12)}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions = pipeline.predict(X_test) \n", + "\n", + "metrics = {}\n", + "metrics[\"mae\"] = mean_absolute_error(y_test, predictions) \n", + "metrics[\"mape\"] = mean_absolute_percentage_error(y_test, predictions)\n", + "metrics[\"mse\"] = mean_squared_error(y_test, predictions)\n", + "\n", + "metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# Работаем с MLflow локально\n", + "TRACKING_SERVER_HOST = \"127.0.0.1\"\n", + "TRACKING_SERVER_PORT = 5000\n", + "\n", + "registry_uri = f\"http://{TRACKING_SERVER_HOST}:{TRACKING_SERVER_PORT}\"\n", + "tracking_uri = f\"http://{TRACKING_SERVER_HOST}:{TRACKING_SERVER_PORT}\"\n", + "\n", + "mlflow.set_tracking_uri(tracking_uri) \n", + "mlflow.set_registry_uri(registry_uri) \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# название тестового эксперимента, запуска (run) внутри него, имени, под которым модель будет регистрироваться\n", + "EXPERIMENT_NAME = \"estate_project\"\n", + "RUN_NAME = \"baseline model\"\n", + "REGISTRY_MODEL_NAME = \"estate_model_rf\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Логируем вручную" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/andrey/work/institute/MLE/assets/mlflow/.venv_lec_mlflow/lib/python3.10/site-packages/mlflow/types/utils.py:407: UserWarning: Hint: Inferred schema contains integer column(s). Integer columns in Python cannot represent missing values. If your input data contains missing values at inference time, it will be encoded as floats and will cause a schema enforcement error. The best way to avoid this problem is to infer the model schema based on a realistic data sample (training dataset) that includes missing values. Alternatively, you can declare integer columns as doubles (float64) whenever these columns may have missing values. See `Handling Integers With Missing Values `_ for more details.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "# Обязательно логируем сигнатуру модели и пример входных данных. Подготовим их\n", + "from mlflow.models import infer_signature\n", + "\n", + "signature = infer_signature(model_input = X_train.head(5))\n", + "input_example = X_train.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# Будем логировать requirements и артефакт - текстовый файл\n", + "req_file = 'requirements.txt'\n", + "art = 'comment.txt'" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# Параметры, котороые будут залогированы, можем задавать вручную или полностью взять из модели\n", + "#params_dict = {'n_estimators': 10, 'max_depth': 10}\n", + "params_dict = pipeline.get_params()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024/10/03 18:59:13 INFO mlflow.tracking._tracking_service.client: 🏃 View run baseline model at: http://127.0.0.1:5000/#/experiments/1/runs/24e41bb582554f42953fe6dc2b6b190e.\n", + "2024/10/03 18:59:13 INFO mlflow.tracking._tracking_service.client: 🧪 View experiment at: http://127.0.0.1:5000/#/experiments/1.\n" + ] + } + ], + "source": [ + "# Когда создаем новый эксперимент, то: \n", + "experiment_id = mlflow.create_experiment(EXPERIMENT_NAME)\n", + "\n", + "# Впоследствии. чтобы добавлять запуски в этот же эксепримент мы должны получить его id:\n", + "#experiment_id = mlflow.get_experiment_by_name(EXPERIMENT_NAME).experiment_id\n", + "\n", + "with mlflow.start_run(run_name=RUN_NAME, experiment_id=experiment_id) as run:\n", + " # получаем уникальный идентификатор запуска эксперимента\n", + " run_id = run.info.run_id \n", + " mlflow.sklearn.log_model(pipeline, \n", + " artifact_path=\"models\",\n", + " signature=signature,\n", + " input_example=input_example,\n", + " pip_requirements=req_file\n", + " )\n", + " mlflow.log_metrics(metrics)\n", + " mlflow.log_artifact(art)\n", + " mlflow.log_params(params_dict)\n", + "\n", + "run = mlflow.get_run(run_id) \n", + "assert (run.info.status =='FINISHED')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Удаление runs, experiments\n", + "\n", + "Использовать осторожно" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "experiment_id = mlflow.get_experiment_by_name(EXPERIMENT_NAME).experiment_id\n", + "#mlflow.delete_experiment(experiment_id)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
run_idexperiment_idstatusartifact_uristart_timeend_timemetrics.maemetrics.mapemetrics.mseparams.preprocessor__cat__handle_unknown...params.model__max_samplesparams.preprocessor__transformersparams.model__monotonic_cstparams.model__warm_startparams.preprocessor__remaindertags.mlflow.usertags.mlflow.source.typetags.mlflow.runNametags.mlflow.source.nametags.mlflow.log-model.history
024e41bb582554f42953fe6dc2b6b190e1FINISHEDmlflow-artifacts:/1/24e41bb582554f42953fe6dc2b...2024-10-03 15:59:12.732000+00:002024-10-03 15:59:13.921000+00:001.276343e+060.3547141.745677e+14use_encoded_value...None[('num', StandardScaler(), ['geo_lat', 'geo_lo...NoneFalsedropandreyLOCALbaseline model/home/andrey/work/institute/MLE/assets/mlflow/...[{\"run_id\": \"24e41bb582554f42953fe6dc2b6b190e\"...
\n", + "

1 rows × 57 columns

\n", + "
" + ], + "text/plain": [ + " run_id experiment_id status \\\n", + "0 24e41bb582554f42953fe6dc2b6b190e 1 FINISHED \n", + "\n", + " artifact_uri \\\n", + "0 mlflow-artifacts:/1/24e41bb582554f42953fe6dc2b... \n", + "\n", + " start_time end_time \\\n", + "0 2024-10-03 15:59:12.732000+00:00 2024-10-03 15:59:13.921000+00:00 \n", + "\n", + " metrics.mae metrics.mape metrics.mse \\\n", + "0 1.276343e+06 0.354714 1.745677e+14 \n", + "\n", + " params.preprocessor__cat__handle_unknown ... params.model__max_samples \\\n", + "0 use_encoded_value ... None \n", + "\n", + " params.preprocessor__transformers \\\n", + "0 [('num', StandardScaler(), ['geo_lat', 'geo_lo... \n", + "\n", + " params.model__monotonic_cst params.model__warm_start \\\n", + "0 None False \n", + "\n", + " params.preprocessor__remainder tags.mlflow.user tags.mlflow.source.type \\\n", + "0 drop andrey LOCAL \n", + "\n", + " tags.mlflow.runName tags.mlflow.source.name \\\n", + "0 baseline model /home/andrey/work/institute/MLE/assets/mlflow/... \n", + "\n", + " tags.mlflow.log-model.history \n", + "0 [{\"run_id\": \"24e41bb582554f42953fe6dc2b6b190e\"... \n", + "\n", + "[1 rows x 57 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mlflow.search_runs(\n", + " #experiment_ids=[experiment_id],\n", + " experiment_names=[EXPERIMENT_NAME],\n", + " # filter_string='status = \"FAILED\"'\n", + " #filter_string='metrics.mae > 1'\n", + " \n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#mlflow.delete_run('74d2a7a40c07413c9cf65df841164356')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Автологирование\n", + "После включения будет срабатывать на каждом обучении модели (на методе fit()).\n", + "\n", + "Есть плюсы, есть и минусы. Предлагается сделать прогон и сравнить с результатами вручную " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024/10/03 18:59:14 WARNING mlflow.utils.autologging_utils: MLflow sklearn autologging is known to be compatible with 0.24.1 <= scikit-learn <= 1.5.1, but the installed version is 1.5.2. If you encounter errors during autologging, try upgrading / downgrading scikit-learn to a compatible version, or try upgrading MLflow.\n", + "2024/10/03 19:02:16 WARNING mlflow.utils.autologging_utils: MLflow autologging encountered a warning: \"/home/andrey/work/institute/MLE/assets/mlflow/.venv_lec_mlflow/lib/python3.10/site-packages/mlflow/types/utils.py:407: UserWarning: Hint: Inferred schema contains integer column(s). Integer columns in Python cannot represent missing values. If your input data contains missing values at inference time, it will be encoded as floats and will cause a schema enforcement error. The best way to avoid this problem is to infer the model schema based on a realistic data sample (training dataset) that includes missing values. Alternatively, you can declare integer columns as doubles (float64) whenever these columns may have missing values. See `Handling Integers With Missing Values `_ for more details.\"\n", + "2024/10/03 19:02:40 WARNING mlflow.utils.autologging_utils: MLflow autologging encountered a warning: \"/home/andrey/work/institute/MLE/assets/mlflow/.venv_lec_mlflow/lib/python3.10/site-packages/mlflow/types/utils.py:407: UserWarning: Hint: Inferred schema contains integer column(s). Integer columns in Python cannot represent missing values. If your input data contains missing values at inference time, it will be encoded as floats and will cause a schema enforcement error. The best way to avoid this problem is to infer the model schema based on a realistic data sample (training dataset) that includes missing values. Alternatively, you can declare integer columns as doubles (float64) whenever these columns may have missing values. See `Handling Integers With Missing Values `_ for more details.\"\n", + "2024/10/03 19:02:42 INFO mlflow.tracking._tracking_service.client: 🏃 View run auto at: http://127.0.0.1:5000/#/experiments/1/runs/2ced09116c264623b89d8df7fe33cb10.\n", + "2024/10/03 19:02:42 INFO mlflow.tracking._tracking_service.client: 🧪 View experiment at: http://127.0.0.1:5000/#/experiments/1.\n" + ] + } + ], + "source": [ + "mlflow.sklearn.autolog()\n", + "\n", + "with mlflow.start_run(run_name='auto', experiment_id=experiment_id) as run:\n", + " pipeline.fit(X_train, y_train)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# Отключаем автологирование\n", + "mlflow.sklearn.autolog(disable=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Model #2\n", + "Обучим вторую \"маленькую\" модель\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "regressor2 = RandomForestRegressor(n_estimators=10, max_depth=6)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Pipeline(steps=[('preprocessor',\n",
+       "                 ColumnTransformer(transformers=[('num', StandardScaler(),\n",
+       "                                                  ['geo_lat', 'geo_lon',\n",
+       "                                                   'level', 'levels', 'rooms',\n",
+       "                                                   'area', 'kitchen_area']),\n",
+       "                                                 ('cat',\n",
+       "                                                  OrdinalEncoder(handle_unknown='use_encoded_value',\n",
+       "                                                                 unknown_value=999),\n",
+       "                                                  ['region', 'building_type',\n",
+       "                                                   'object_type',\n",
+       "                                                   'floor_level'])])),\n",
+       "                ('model', RandomForestRegressor(max_depth=6, n_estimators=10))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "Pipeline(steps=[('preprocessor',\n", + " ColumnTransformer(transformers=[('num', StandardScaler(),\n", + " ['geo_lat', 'geo_lon',\n", + " 'level', 'levels', 'rooms',\n", + " 'area', 'kitchen_area']),\n", + " ('cat',\n", + " OrdinalEncoder(handle_unknown='use_encoded_value',\n", + " unknown_value=999),\n", + " ['region', 'building_type',\n", + " 'object_type',\n", + " 'floor_level'])])),\n", + " ('model', RandomForestRegressor(max_depth=6, n_estimators=10))])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipeline = Pipeline(steps=[('preprocessor', preprocessor), \n", + " ('model', regressor2)])\n", + "\n", + "pipeline.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'mae': np.float64(1536543.887713661),\n", + " 'mape': np.float64(0.42528854535519156),\n", + " 'mse': np.float64(210549541556055.7)}" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions = pipeline.predict(X_test) \n", + "metrics = {}\n", + "metrics[\"mae\"] = mean_absolute_error(y_test, predictions) \n", + "metrics[\"mape\"] = mean_absolute_percentage_error(y_test, predictions)\n", + "metrics[\"mse\"] = mean_squared_error(y_test, predictions)\n", + "\n", + "metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024/10/03 19:02:51 INFO mlflow.tracking._tracking_service.client: 🏃 View run smaller_model at: http://127.0.0.1:5000/#/experiments/1/runs/20f66bd4c3754a04b5e47ecc0f577e76.\n", + "2024/10/03 19:02:51 INFO mlflow.tracking._tracking_service.client: 🧪 View experiment at: http://127.0.0.1:5000/#/experiments/1.\n" + ] + } + ], + "source": [ + "# !!! Проверить название прогона а также все логируемые параметры и артефакты, что они соответствуют второй \"маленькой\" модели. \n", + "\n", + "\n", + "RUN_NAME = 'smaller_model'\n", + "# Когда создаем новый эксперимент, то: \n", + "#experiment_id = mlflow.create_experiment(EXPERIMENT_NAME)\n", + "\n", + "# Впоследствии. чтобы добавлять запуски в этот же эксепримент мы должны получить его id:\n", + "experiment_id = mlflow.get_experiment_by_name(EXPERIMENT_NAME).experiment_id\n", + "\n", + "with mlflow.start_run(run_name=RUN_NAME, experiment_id=experiment_id) as run:\n", + " # получаем уникальный идентификатор запуска эксперимента\n", + " run_id = run.info.run_id \n", + " mlflow.sklearn.log_model(pipeline, \n", + " artifact_path=\"models\",\n", + " signature=signature,\n", + " input_example=input_example,\n", + " pip_requirements=req_file\n", + " )\n", + " mlflow.log_metrics(metrics)\n", + " mlflow.log_artifact(art)\n", + " mlflow.log_params(pipeline.get_params())\n", + "\n", + "run = mlflow.get_run(run_id) \n", + "assert (run.info.status =='FINISHED')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024/10/03 19:02:51 INFO mlflow.tracking._tracking_service.client: 🏃 View run no_model at: http://127.0.0.1:5000/#/experiments/1/runs/6f6fe970eb74485d866e918b733f8f61.\n", + "2024/10/03 19:02:51 INFO mlflow.tracking._tracking_service.client: 🧪 View experiment at: http://127.0.0.1:5000/#/experiments/1.\n" + ] + } + ], + "source": [ + "# No model\n", + "# Логировать можно только артефакты, без модели. Например, залогироавть графики после этапа EDA\n", + "\n", + "RUN_NAME = 'no_model'\n", + "experiment_id = mlflow.get_experiment_by_name(EXPERIMENT_NAME).experiment_id\n", + "\n", + "with mlflow.start_run(run_name=RUN_NAME, experiment_id=experiment_id) as run:\n", + " run_id = run.info.run_id \n", + " mlflow.log_artifact(art)\n", + "\n", + "\n", + "run = mlflow.get_run(run_id) \n", + "assert (run.info.status =='FINISHED')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Registered model 'estate_model_rf' already exists. Creating a new version of this model...\n", + "2024/10/03 19:03:14 INFO mlflow.store.model_registry.abstract_store: Waiting up to 300 seconds for model version to finish creation. Model name: estate_model_rf, version 1\n", + "Created version '1' of model 'estate_model_rf'.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_id = '' # Указываем run id\n", + "mlflow.register_model(f\"runs:/{run_id}/models\", REGISTRY_MODEL_NAME)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Registered model 'estate_model_rf' already exists. Creating a new version of this model...\n", + "2024/10/03 19:03:14 INFO mlflow.store.model_registry.abstract_store: Waiting up to 300 seconds for model version to finish creation. Model name: estate_model_rf, version 2\n", + "Created version '2' of model 'estate_model_rf'.\n", + "2024/10/03 19:03:14 INFO mlflow.tracking._tracking_service.client: 🏃 View run register_at_run at: http://127.0.0.1:5000/#/experiments/1/runs/ed64a91759ed43c99329810d066ea95a.\n", + "2024/10/03 19:03:14 INFO mlflow.tracking._tracking_service.client: 🧪 View experiment at: http://127.0.0.1:5000/#/experiments/1.\n" + ] + } + ], + "source": [ + "# Можно регистрировать сразу при создании прогона\n", + "\n", + "experiment_id = mlflow.get_experiment_by_name(EXPERIMENT_NAME).experiment_id\n", + "\n", + "with mlflow.start_run(run_name='register_at_run', experiment_id=experiment_id) as run:\n", + " # получаем уникальный идентификатор запуска эксперимента\n", + " run_id = run.info.run_id \n", + " mlflow.sklearn.log_model(pipeline, \n", + " artifact_path=\"models\",\n", + " signature=signature,\n", + " input_example=input_example,\n", + " pip_requirements=req_file,\n", + " registered_model_name = REGISTRY_MODEL_NAME # Указываем для какой модели регистрируем\n", + " )\n", + " mlflow.log_metrics(metrics)\n", + " mlflow.log_artifact(art)\n", + " mlflow.log_params(pipeline.get_params())\n", + "\n", + "run = mlflow.get_run(run_id) \n", + "assert (run.info.status =='FINISHED')" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "], name='estate_model_rf', tags={}>" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Можно найти зарегистрированные модели\n", + "model_reg = mlflow.search_registered_models()\n", + "model_reg[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "model_name = REGISTRY_MODEL_NAME\n", + "model_version = 1\n", + "\n", + "model_loaded = mlflow.sklearn.load_model(model_uri=f\"models:/{model_name}/{model_version}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3438055.97819847])" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_loaded.predict(X_test.iloc[0:1])" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(3062900)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_test.iloc[0]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv_labs_proj", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lectures/lec4-mlflow.odp b/lectures/lec4-mlflow.odp index 07b329c5bed5f54debea1af50ff71bed2820f966..2c90b78ba0a4b1ab0d697454df1aba50d5c74afd 100644 GIT binary patch delta 32197 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 U7)nkOB5Q_22UjTl_7#Eu1vCht+W-In delta 37402 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 delta 17411 zcmZu&1z1(h)+RlK^Z}IaF6jm(B&3mUX^@tNLnGZBLb|)Vq(Qp7QMyw={152&e|qmd z&$Ay`@2oX5d-lAu)~wn4;#%SES^-5~8Ws)+g@AwnWoyG*fr0@I3;7#E3eAlC{R=C; zUQm)iL)UhUCiHUE5u)6Q7KikiDQOxEW8w}F~RPLUeI_usg{q#Kzo}BzdCwlQV%0y zZ%%XgRGWtP`KpwtF=l|=$dt+?>bY(Y~& z#D&_6`F!yFJ?vertNYID4-MNY-B3pT1sEMbdDw<`D1Gu)hB{fdfftxY8N@xMLQcMO zyvLHj80X8>Rox@LPSVo1(-kIq8wBi1T6k`q-gi;u_1T%G`yFgk^&`nTtT~NJ@yf|@ z0yps@o=(+7s;YMHUQf|p9ZA$#nZ6E|Ac&%Ad}hYJO;102c6eko)?CKBR{DO)-5rLl z^9@#c#agZ(sXzco(C`v6#sCEPgmrB*Xeg*f7$~T}#=Pna4AV-8AdcR8MT#&iSY?PlstA~W9=KA}pImR&YFM@g$t$*9h`Bq{-ypoJoYYGTr6?btAV zI@KEJpDIGeb&Q{Br;Y>PTL-gnv4C=N-*O=(10*xQsSSc%0hxV-rN%5Pb*~^`5}R#( zCq79EQ-7RASw-qdg94_Yt>g_i5eNH@o~¨cY+n(VIzgzHn-<38bVL2-r+4Wj4MF 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 aHu#DA@3n}*9U>2dCES73PsZOp)ct=LXN!vf