Updated MLFlow

This commit is contained in:
Tomasz Ziętkiewicz 2022-05-09 09:54:34 +02:00
parent a7527539c5
commit 13a0ff9035
1 changed files with 20 additions and 10 deletions

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 8. <i>MLFlow</i> [laboratoria]</h2> \n", "<h2> 8. <i>MLFlow</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2022)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![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", " - 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", " - 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", " - 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" "! 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", "cell_type": "markdown",
"metadata": { "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", " - 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", " ```bash\n",
" mlflow run sklearn_elasticnet_wine -e test\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", " - *conda.yaml* - opis środowiska potrzebnego do załadowania modelu\n",
" - *model.pkl* - plik z zserializowanym modelem\n", " - *model.pkl* - plik z zserializowanym modelem\n",
"\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": [ "source": [
"## Zadania\n", "## 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", " - signature\n",
" - input_example\n", " - input_example\n",
"\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", "\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", "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", " - 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", " \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", "\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" "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", "\n",
"- Podgląd w przeglądarce: http://tzietkiewicz.vm.wmi.amu.edu.pl/#/\n", "- Podgląd w przeglądarce: http://tzietkiewicz.vm.wmi.amu.edu.pl/#/\n",
" - user: `student`\n", " - user: `student`\n",
" - hasło: Podane na MS Teams\n", " - hasło: IUM@2021\n",
"\n", "\n",
"- Tracking URI:\n", "- Tracking URI:\n",
" - Python: `mlflow.set_tracking_uri(\"http://172.17.0.1:5000\")`\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", " - CLI: `export MLFLOW_TRACKING_URI=http://172.17.0.1:5000`\n",
" \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", "- 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\")`" "`mlflow.set_experiment(\"s123456\")`"
] ]