1
0
forked from pms/ium

Updated MLFlow

This commit is contained in:
Tomasz Ziętkiewicz 2022-05-09 09:54:34 +02:00
parent a7527539c5
commit 13a0ff9035

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\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",
"\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\")`"
]