Merge pull request 'Updated MLFlow' (#30) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#30
This commit is contained in:
commit
f857b890af
@ -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\")`"
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user