From 13a0ff903588f39c1c9a422c4cced916521ffd11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Zi=C4=99tkiewicz?= Date: Mon, 9 May 2022 09:54:34 +0200 Subject: [PATCH] Updated MLFlow --- IUM_08.MLFlow.ipynb | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/IUM_08.MLFlow.ipynb b/IUM_08.MLFlow.ipynb index 77cb6fd..97e6ec6 100644 --- a/IUM_08.MLFlow.ipynb +++ b/IUM_08.MLFlow.ipynb @@ -12,7 +12,7 @@ "
\n", "

Inżynieria uczenia maszynowego

\n", "

8. MLFlow [laboratoria]

\n", - "

Tomasz Ziętkiewicz (2021)

\n", + "

Tomasz Ziętkiewicz (2022)

\n", "
\n", "\n", "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" @@ -35,7 +35,9 @@ " - Bardziej kompleksowe rozwiązanie: 4 komponenty, pierwszy z nich ma funkcjonalność podobną do Sacred\n", " - Działa \"z każdym\" językiem. A tak naprawdę: Python, R, Java + CLI API + REST API\n", " - Popularna wśród pracodawców - wyniki wyszukiwania ofert pracy: 20 ofert (https://pl.indeed.com/), 36 ofert (linkedin). Sacred: 0\n", - " - Integracja z licznymi bibliotekami / chmurami\n" + " - Integracja z licznymi bibliotekami / chmurami\n", + " - Rozwiązanie OpenSource, stworzone przez firmę Databricks\n", + " - Dostępna [odpłatna wersja \"Managed\"](https://databricks.com/product/managed-mlflow) (w ordóżnieniu od \"self-hosted\")\n" ] }, { @@ -676,6 +678,13 @@ "! cd IUM_08/examples/; mlflow ui" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Instancja na naszym serwerze: http://tzietkiewicz.vm.wmi.amu.edu.pl:5000/#/" + ] + }, { "cell_type": "markdown", "metadata": { @@ -898,7 +907,8 @@ " - domyślnie zostanie uruchomione polecenie zdefiniowane w \"entry point\" `main`. Żeby uruchomić inny \"entry point\", możemy użyć parametru `-e`, np:\n", " ```bash\n", " mlflow run sklearn_elasticnet_wine -e test\n", - " ```" + " ```\n", + " - Parametry do naszego polecenia możemy przekazywać przy pomocy flagi `-P`" ] }, { @@ -1009,7 +1019,7 @@ " - *conda.yaml* - opis środowiska potrzebnego do załadowania modelu\n", " - *model.pkl* - plik z zserializowanym modelem\n", "\n", - "Tylko plik *MLmodel* jest specjalnym plikiem MLflow - reszta zależy od konkrentego \"falovor\"\n" + "Tylko plik *MLmodel* jest specjalnym plikiem MLflow - reszta zależy od konkrentego \"flavour\"\n" ] }, { @@ -1381,17 +1391,17 @@ }, "source": [ "## Zadania\n", - "1. [2 pkt] Dodaj do joba treningowego wywołania MLflow, tak, żeby przy każdym uruchomieniu stworzyć i zarchiwizować katalog z modelem. Plik MLmodel powinien on zawierać pola:\n", + "1. [2 pkt] Dodaj do joba treningowego wywołania MLflow, tak, żeby przy każdym uruchomieniu stworzyć i zarchiwizować katalog z modelem. Plik MLmodel powinien zawierać pola:\n", " - signature\n", " - input_example\n", "\n", - " Folder powinien również zawierać środowisko - conda lub docker, umożliwiająceo uruchomienie projektu.\n", + " Folder powinien również zawierać definicję środowiska - conda lub docker, umożliwiającego uruchomienie projektu.\n", "\n", "2. [6 pkt] Wybierz jedną osobę z grupy. Załóżmy, że Twoje ID to s123456 a jej s654321. Stwórz na Jenkinsie projekt `s123456-predict-s654321`, w którym:\n", " - pobierzesz artefakt z zapisanym modelem z joba osoby s654321\n", - " - dokonasz na nim predykcji danych wejściowych podanych w formacie json jako parametr zadania Jenkinsowego. Domyślną wartością tego parametry niech będą przykładowe dane wejściowe z `input_example`\n", + " - dokonasz na nim predykcji danych wejściowych podanych w formacie json jako parametr zadania Jenkinsowego. Domyślną wartością tego parametru niech będą przykładowe dane wejściowe z `input_example`\n", " \n", - "3. [1 pkt] Zarejestruj swój model w MLflow registry (dan do połączenia z rejstrem podam po jego pomyślnym skonfigurowaniu, nie później niż w środę 19.05.2021\n", + "3. [1 pkt] Zarejestruj swój model w MLflow registry\n", "\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" ] @@ -1408,13 +1418,13 @@ "\n", "- Podgląd w przeglądarce: http://tzietkiewicz.vm.wmi.amu.edu.pl/#/\n", " - user: `student`\n", - " - hasło: Podane na MS Teams\n", + " - hasło: IUM@2021\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", + "- Żeby klient MLflow działający w kontenerze docker mógł zapisywać i pdczytywać artefakty, muszą Państwo podmonotwać katalog `/tmp/mlruns`. Moż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\")`" ]