diff --git a/IUM_08.MLFlow.ipynb b/IUM_08.MLFlow.ipynb index 09c9cc2..ad0dd22 100644 --- a/IUM_08.MLFlow.ipynb +++ b/IUM_08.MLFlow.ipynb @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 80, "metadata": { "slideshow": { "slide_type": "slide" @@ -117,7 +117,8 @@ "logging.basicConfig(level=logging.WARN)\n", "logger = logging.getLogger(__name__)\n", "\n", - "#mlflow.set_tracking_uri(\"http://localhost:5001\")\n", + "mlflow.set_tracking_uri(\"http://localhost:5000\")\n", + "mlflow.set_experiment(\"s123456\")\n", "\n", "def eval_metrics(actual, pred):\n", " rmse = np.sqrt(mean_squared_error(actual, pred))\n", @@ -156,7 +157,10 @@ " l1_ratio = float(sys.argv[2]) if len(sys.argv) > 2 else 0.5\n", " #l1_ratio = 0.5\n", "\n", - " with mlflow.start_run():\n", + " with mlflow.start_run() as run:\n", + " print(\"MLflow run experiment_id: {0}\".format(run.info.experiment_id))\n", + " print(\"MLflow run artifact_uri: {0}\".format(run.info.artifact_uri))\n", + "\n", " lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42)\n", " lr.fit(train_x, train_y)\n", "\n", @@ -187,14 +191,14 @@ " # There are other ways to use the Model Registry, which depends on the use case,\n", " # please refer to the doc for more information:\n", " # https://mlflow.org/docs/latest/model-registry.html#api-workflow\n", - " mlflow.sklearn.log_model(lr, \"model\", registered_model_name=\"ElasticnetWineModel\", signature=signature)\n", + " mlflow.sklearn.log_model(lr, \"wines-model\", registered_model_name=\"ElasticnetWineModel\", signature=signature)\n", " else:\n", " mlflow.sklearn.log_model(lr, \"model\", signature=signature)" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 81, "metadata": { "slideshow": { "slide_type": "slide" @@ -205,14 +209,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elasticnet model (alpha=0.500000, l1_ratio=0.500000):\r\n", - " RMSE: 0.7931640229276851\r\n", - " MAE: 0.6271946374319586\r\n", - " R2: 0.10862644997792614\r\n" + "total 4\n", + "drwxrwxr-x 3 tomek tomek 4096 maj 19 21:31 1\n", + "INFO: 's123456' does not exist. Creating a new experiment\n", + "MLflow run experiment_id: 2\n", + "MLflow run artifact_uri: /tmp/mlruns/2/c15feb5df335490ba990ddd4dd977c1b/artifacts\n", + "Elasticnet model (alpha=0.500000, l1_ratio=0.500000):\n", + " RMSE: 0.7931640229276851\n", + " MAE: 0.6271946374319586\n", + " R2: 0.10862644997792614\n", + "Registered model 'ElasticnetWineModel' already exists. Creating a new version of this model...\n", + "2021/05/19 22:34:48 INFO mlflow.tracking._model_registry.client: Waiting up to 300 seconds for model version to finish creation. Model name: ElasticnetWineModel, version 2\n", + "Created version '2' of model 'ElasticnetWineModel'.\n" ] } ], "source": [ + "! ls -l /tmp/mlruns\n", "### Wtyrenujmy model z domyślnymi wartościami parametrów\n", "! cd ./IUM_08/examples/; python sklearn_elasticnet_wine/train.py" ] @@ -1374,6 +1387,29 @@ "\n", "4. [6 pkt] Stwórz na Jenkinsie projekt `s123456-predict-s654321-from-registry`, który zrealizuje to samo zadanie co `s123456-predict-s654321`, ale tym razem pobierze model z rejestru MLflow zamiast z artefaktów Jenkinsa" ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Dane do konfiguracji MLflow registry\n", + "\n", + "- Podgląd w przeglądarce: http://tzietkiewicz.vm.wmi.amu.edu.pl/#/\n", + " - user: `student`\n", + " - hasło: Podane na MS Teams\n", + "\n", + "- Tracking URI:\n", + " - Python: `mlflow.set_tracking_uri(\"http://172.17.0.1:5000\")`\n", + " - CLI: `export MLFLOW_TRACKING_URI=http://172.17.0.1:5000`\n", + " \n", + "- Żeby klient MLflow działający w kontenerze docker mógł zapisywać i pdczytywać artefakty, muszą Państwo podmonotwać katalog /tmp/mlrunsMożna to zrobić za pomocą flagi `-v`, którą można przekazać tak, jak pokazano tutaj: https://www.jenkins.io/doc/book/pipeline/docker/#caching-data-for-containers\n", + "- Proszę ustawić nazwę eksperymentu na numer indeksu, dzięki temu każdy z Państwa będzie widział swoje eksperymenty oddzielnie:\n", + "`mlflow.set_experiment(\"s123456\")`" + ] } ], "metadata": {