Compare commits

..

No commits in common. "master" and "master" have entirely different histories.

17 changed files with 5603 additions and 5725 deletions

View File

@ -8,8 +8,8 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"# Informacje organizacyjne " "<h2> 0. <i>Informacje organizacyjne</i> [laboratoria]</h2> \n"
] ]
}, },
{ {
@ -35,10 +35,9 @@
}, },
"source": [ "source": [
"## Przedmiot\n", "## Przedmiot\n",
"- *Kod przedmiotu*: 06-S4IN01-F01005\n", "- Kod przedmiotu: 06-DIUMUI0\n",
"- *Nazwa*: Inżynieria Uczenia Maszynowego\n", "- Nazwa: Inżynieria Uczenia Maszynowego\n",
"- *Sylabus*: https://sylabus.amu.edu.pl/pl/document/8610785e-e63b-4a20-989c-cb8ed17f884b.pdf\n", "- Sylabus: Sylabus-AITech-InzynieriaUczeniaMaszynowego.pdf"
"- *Autorzy materiałów*: **Tomasz Ziętkiewicz**, Paweł Skórzewski"
] ]
}, },
{ {

View File

@ -8,9 +8,8 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"### 13 marca 2024\n", "<h2> 1. <i>Wprowadzenie</i> [laboratoria]</h2> "
"# 1. Wprowadzenie"
] ]
}, },
{ {

View File

@ -2,11 +2,14 @@
"cells": [ "cells": [
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"### 13 marca 2024\n", "<h2> 2. <i>Dane</i> [laboratoria]</h2> "
"# 2. Dane"
] ]
}, },
{ {

View File

@ -8,9 +8,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 20 marca 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 3. Systemy ciągłej integracji na przykładzie narzędzia Jenkins " "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 3. <i>System ciągłej integracji na przykładzie Jenkins</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
] ]
}, },
{ {
@ -272,7 +277,7 @@
" steps {\n", " steps {\n",
" //Wypisz wartość parametru w konsoli (To nie jest polecenie bash, tylko groovy!)\n", " //Wypisz wartość parametru w konsoli (To nie jest polecenie bash, tylko groovy!)\n",
" echo \"INPUT_TEXT: ${INPUT_TEXT}\"\n", " echo \"INPUT_TEXT: ${INPUT_TEXT}\"\n",
" //Wywołaj w konsoli komendę \"figlet\", która generuje ASCII-art\n", " //Wywołaj w konsoli komendę \"figlet\", która generuje ASCI-art\n",
" sh \"figlet \\\"${INPUT_TEXT}\\\" | tee output.txt\"\n", " sh \"figlet \\\"${INPUT_TEXT}\\\" | tee output.txt\"\n",
" }\n", " }\n",
" }\n", " }\n",
@ -463,18 +468,18 @@
" - możesz wygenerować potrzebny kod za pomocą generatorów w \"Pipeline Syntax\")\n", " - możesz wygenerować potrzebny kod za pomocą generatorów w \"Pipeline Syntax\")\n",
" - dodaj paremetr typu \"Build selector for Copy artifact\", w którym będziesz mógł ustalić z którego builda zadania s123456-create-dataset chcesz skopiować artefakt. Wartość tego parametru będziesz musiał przekazać jako parametr `which build` -> \"Specified by a build parameter\"\n", " - dodaj paremetr typu \"Build selector for Copy artifact\", w którym będziesz mógł ustalić z którego builda zadania s123456-create-dataset chcesz skopiować artefakt. Wartość tego parametru będziesz musiał przekazać jako parametr `which build` -> \"Specified by a build parameter\"\n",
" - przykładowy kod copyArtifact:\n", " - przykładowy kod copyArtifact:\n",
"\n", " ```groovy\n",
" copyArtifacts fingerprintArtifacts: true, projectName: 'MY_PROJECT', selector: buildParameter('BUILD_SELECTOR')\n", " copyArtifacts fingerprintArtifacts: true, projectName: 'MY_PROJECT', selector: buildParameter('BUILD_SELECTOR')\n",
"\n", " ```\n",
" - przykładowy kod definicji parametru:\n", " - przykładowy kod definicji parametru:\n",
"\n", " ```groovy\n",
" properties([parameters([\n", " properties([parameters([\n",
" buildSelector(\n", " buildSelector(\n",
" defaultSelector: lastSuccessful(),\n", " defaultSelector: lastSuccessful(),\n",
" description: 'Which build to use for copying artifacts',\n", " description: 'Which build to use for copying artifacts',\n",
" name: 'BUILD_SELECTOR')\n", " name: 'BUILD_SELECTOR')\n",
" ])])\n", " ])])\n",
"\n", " ```\n",
" 3. Wywoła skrypt shella (krok \"sh: Shell Script\"). \n", " 3. Wywoła skrypt shella (krok \"sh: Shell Script\"). \n",
" - Domyślnie tutaj znajdzie się wywołanie naszego skryptu liczącego statystyki.\n", " - Domyślnie tutaj znajdzie się wywołanie naszego skryptu liczącego statystyki.\n",
" - Ze względu na brakujące zależności, na razie wystarczy, że ten skrypt będzie \"liczył\" ilość linii w wejściowym pliku (polecenie \"wc -l\"). \n", " - Ze względu na brakujące zależności, na razie wystarczy, że ten skrypt będzie \"liczył\" ilość linii w wejściowym pliku (polecenie \"wc -l\"). \n",

View File

@ -8,9 +8,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 27 marca 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 4. Konteneryzacja" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 4. <i>Konteneryzacja</i> [laboratoria]</h2> \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)"
] ]
}, },
{ {
@ -38,11 +43,15 @@
"## 1. Konteneryzacja\n", "## 1. Konteneryzacja\n",
"- Konteneryzacja to metoda tworzenia lekkich, odizolowanych środowisk uruchomieniowych\n", "- Konteneryzacja to metoda tworzenia lekkich, odizolowanych środowisk uruchomieniowych\n",
"- Różnica między konteneryzacją a maszynami wirtualnymi:\n", "- Różnica między konteneryzacją a maszynami wirtualnymi:\n",
" - Wirtualizacja na poziomie systemu operacyjnego, a nie sprzętu\n", " - Wirtualizacja na poziomie systemu operacyjnego a nie sprzętu\n",
" - Konteneryzacja jest lżejsza: kontener używa tego samego jądra (*kernel*) co system hosta - mniejszy narzut\n", " - Konteneryzacja jest lżejsza: kontener używa tego samego jądra (kernel) co system hosta - mniejszy narzut\n",
" - Konteneryzacja zapewnia gorszy stopień izolacji od hosta\n", " - Konteneryzacja zapewnia gorszy stopień izolacji od hosta\n",
" - Dzięki dostępnym narzędziom i infrastrukturze kontenery są łatwiejsze w utrzymywaniu i bardziej przenośne\n", " - Dzięki dostępnym narzędziom i infrastrukturze kontenery są łatwiejsze w utrzymywaniu i bardziej przenośne\n",
"- Kontenery ułatwiają rozwój, uruchamianie i dostarczanie aplikacji." "- Ułatwiają:\n",
" - rozwój,\n",
" - uruchamianie\n",
" - i dostarczanie\n",
"aplikacji."
] ]
}, },
{ {
@ -71,9 +80,10 @@
"source": [ "source": [
"## 1.1 Docker\n", "## 1.1 Docker\n",
"- Najpopularniejszy obecnie system konteneryzacji\n", "- Najpopularniejszy obecnie system konteneryzacji\n",
"- Działa w m.in. na systemach Linux, Windows i Mac OS\n", "- Działa w m.in. na systemach Linux, Windows i Max OS\n",
"- Udostępnia narzędzia i serwisy ułatwiające korzystanie, zarządzanie i dzielenie się kontenerami\n", "- Udostępnia narzędzia i serwisy ułatwiające korzystanie, zarządzanie i dzielenie się kontenerami\n",
"- Docker umożliwia stworzenie paczki zawierającej sam program jak i środowisko, w którym ma być on uruchomiony\n", "- Docker umożliwia stworzenie paczki zawierającej sam program jak i środowisko, w którym ma być on uruchomiony\n",
" \n",
"- Dokumentacja: https://docs.docker.com/get-started/\n", "- Dokumentacja: https://docs.docker.com/get-started/\n",
"</br><img style=\"height: 50px;\" src=\"img/environments/docker.png\"/>" "</br><img style=\"height: 50px;\" src=\"img/environments/docker.png\"/>"
] ]
@ -103,10 +113,10 @@
}, },
"source": [ "source": [
"## 1.2 Jak zacząć?\n", "## 1.2 Jak zacząć?\n",
" - Na komputerach w laboratoriach: https://laboratoria.wmi.amu.edu.pl/problemy/docker\n", " - Na komputerach w laboratoriach: https://laboratoria.wmi.amu.edu.pl/en/issues/docker/\n",
" - Lokalnie: [instalacja](https://docs.docker.com/engine/install/)\n", " - Lokalnie: [instalacja](https://docs.docker.com/engine/install/)\n",
" - Możliwa zarówno pod Linux, Windows i MacOS.\n", " - Możliwa zarówno pod Linux, Windows i MacOS.\n",
" - Kontenery linuxowe można uruchamiać również pod Windowsem - za pomocą Docker Desktop lub WSL 2 (Windows Subsystem for Linux). Pod spodem oba używają maszyny wirtualnej (Hyper-V) z Linuxem, w której uruchamiane są kontenery ([tak to działa w teorii](https://www.docker.com/blog/docker-hearts-wsl-2), a [tak to można uruchomić](https://dev.to/bowmanjd/install-docker-on-windows-wsl-without-docker-desktop-34m9))" " - Kontenery Linuxowe można uruchamiać również pod Windowsem (za pomocą Docker Desktop lub WSL 2 (Windows Subsystem for Linux). Pod spodem oba używają maszyny wirtualnej (Hyper-V) z Linuxem, w której uruchamiane są kontenery [link](https://www.docker.com/blog/docker-hearts-wsl-2/)"
] ]
}, },
{ {
@ -121,7 +131,7 @@
"- ```docker help [polecenie]``` - wyświetla listę dostępnych poleceń dockera lub opis podanego polecenia. Rozbudowana dokumentacja poleceń: https://docs.docker.com/engine/reference/commandline/docker/\n", "- ```docker help [polecenie]``` - wyświetla listę dostępnych poleceń dockera lub opis podanego polecenia. Rozbudowana dokumentacja poleceń: https://docs.docker.com/engine/reference/commandline/docker/\n",
"- ```docker run``` - uruchamia istniejący obraz tworząc kontener. Przykładowe wywołania:\n", "- ```docker run``` - uruchamia istniejący obraz tworząc kontener. Przykładowe wywołania:\n",
" - ```docker run -i -t ubuntu```<br>\n", " - ```docker run -i -t ubuntu```<br>\n",
" Uruchamia kontener z obrazu \"ubuntu\", alokuje terminal (`-t`) i ustawia tryb \"interaktywny\" (`-i`), dzięki czemu dostajemy terminal \"wenątrz\" kontenera i możemy wywoływać w nim polecenia\n", " Uruchamia kontener z obrazu \"ubuntu\", allokuje terminal (`-t`) i ustawia tryb \"interaktywny\" (`-i`), dzięki czemu dostajemy terminal \"wenątrz\" kontenera i możemy wywoływać w nim polecenia\n",
"\n", "\n",
" - ```docker run -p 8080:8080 jenkins/jenkins:lts```<br>\n", " - ```docker run -p 8080:8080 jenkins/jenkins:lts```<br>\n",
" Uruchomi kontener z Jenkinsem, w wersji \"LTS\". Jeśli obraz Jenkins nie był wcześniej zbudowany/pobrany na lokalną maszynę, automatycznie zostanie pobrany z [Docker Hub](https://hub.docker.com/r/jenkins/jenkins).\n", " Uruchomi kontener z Jenkinsem, w wersji \"LTS\". Jeśli obraz Jenkins nie był wcześniej zbudowany/pobrany na lokalną maszynę, automatycznie zostanie pobrany z [Docker Hub](https://hub.docker.com/r/jenkins/jenkins).\n",
@ -155,7 +165,7 @@
"- ```docker start CONTAINER_ID``` - uruchamia ponownie kontener\n", "- ```docker start CONTAINER_ID``` - uruchamia ponownie kontener\n",
"- ```docker system df``` - pokazuje miejsce zajęte przez obrazy, kontenery i woluminy\n", "- ```docker system df``` - pokazuje miejsce zajęte przez obrazy, kontenery i woluminy\n",
"- ```docker system prune``` - usuwa nieużywane obrazy i kontenery, zazwyczaj zwalniając sporo miejsca na dysku\n", "- ```docker system prune``` - usuwa nieużywane obrazy i kontenery, zazwyczaj zwalniając sporo miejsca na dysku\n",
"- ```docker exec``` - uruchamia polecenie wewnątrz działającego kontenera" "- ```docker exec``` - "
] ]
}, },
{ {
@ -171,7 +181,7 @@
" - Poprzez `docker exec` - wywołanie polecenia w działającym kontenerze\n", " - Poprzez `docker exec` - wywołanie polecenia w działającym kontenerze\n",
" - Poprzez port zmapowany przez flagę `-p` (np. REST API albo interfejs w przegląrce)\n", " - Poprzez port zmapowany przez flagę `-p` (np. REST API albo interfejs w przegląrce)\n",
" - Przez system plików: \n", " - Przez system plików: \n",
" - bind mount: podmontowanie katalogów hosta w kontenerze poprzez flagę `-v`; dokumentacja [tu](https://docs.docker.com/reference/cli/docker/container/run/#mount) i [tam](https://docs.docker.com/reference/cli/docker/container/run/#read-only)\n", " - bind mount: podmontowanie katalogów hosta w kontenerze poprzez flagę `-v` [dokumentacja](https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only)\n",
" - volumes: https://docs.docker.com/storage/volumes/" " - volumes: https://docs.docker.com/storage/volumes/"
] ]
}, },
@ -184,7 +194,7 @@
}, },
"source": [ "source": [
"# Zadanie 1 [na zajęciach]\n", "# Zadanie 1 [na zajęciach]\n",
"1. Zainstaluj Docker (lub skorzystaj z https://laboratoria.wmi.amu.edu.pl/problemy/docker)\n", "1. Zainstaluj Docker (lub skorzystaj z https://laboratoria.wmi.amu.edu.pl/en/issues/docker/)\n",
"2. Uruchom obraz `ubuntu` w trybie interaktywnym z terminalem (`docker run -ti ubuntu`)\n", "2. Uruchom obraz `ubuntu` w trybie interaktywnym z terminalem (`docker run -ti ubuntu`)\n",
"\n", "\n",
"Poniższe punkty wywołujemy wewnątrz kontenera (w otwartym właśnie terminalu):\n", "Poniższe punkty wywołujemy wewnątrz kontenera (w otwartym właśnie terminalu):\n",
@ -194,7 +204,7 @@
"5. Jaki jest bieżący katalog? (polecenie `pwd`)\n", "5. Jaki jest bieżący katalog? (polecenie `pwd`)\n",
"5. Jaki procesor jest widoczny w środku kontenera? Czy jest to procesor Twojej maszyny? (`lscpu`)\n", "5. Jaki procesor jest widoczny w środku kontenera? Czy jest to procesor Twojej maszyny? (`lscpu`)\n",
"6. Ile wolnego miejsca na dysku jest widoczne wewnątrz kontenera (`df -h`)? Czy jest to zgodne z tym, co pokazuje maszyna hosta?\n", "6. Ile wolnego miejsca na dysku jest widoczne wewnątrz kontenera (`df -h`)? Czy jest to zgodne z tym, co pokazuje maszyna hosta?\n",
"7. Sprawdź, ile dostępnej pamięci RAM widać w konenerze (`free -h`). Czy zgadza się to z wynikiem na maszynie hosta?\n", "7. Sprawdź ile dostępnej pamięci RAM widać w konenerze (`free -h`). Czy zgadza się to z wynikiem na maszynie hosta?\n",
"8. Spróbuj uruchomić jedno z popularnych narzędzi Linuksowych, dostępnych na maszynie hosta (np. `vim`, `less`, `htop`). Czy udało się je uruchomić?\n", "8. Spróbuj uruchomić jedno z popularnych narzędzi Linuksowych, dostępnych na maszynie hosta (np. `vim`, `less`, `htop`). Czy udało się je uruchomić?\n",
"9. Zainstaluj w kontenerze jedno z brakujących narzędzi, np: `apt update; apt install htop`\n", "9. Zainstaluj w kontenerze jedno z brakujących narzędzi, np: `apt update; apt install htop`\n",
"10. Uruchom następujące polecenie: <br>\n", "10. Uruchom następujące polecenie: <br>\n",
@ -223,10 +233,11 @@
"## 1.4 Dockerfile\n", "## 1.4 Dockerfile\n",
"\n", "\n",
" - Dokumentacja: https://docs.docker.com/engine/reference/builder/\n", " - Dokumentacja: https://docs.docker.com/engine/reference/builder/\n",
"\n",
" - Dockerfile składa się z serii poleceń.\n", " - Dockerfile składa się z serii poleceń.\n",
" - Polecenia dockera są pisane WIELKIMI LITERAMI.\n", " - Polecenia dockera są pisane WIELKIMI LITERAMI\n",
" - Wywołanie każdego polecenia tworzy nową warstwę (*layer*).\n", " - Wywołanie każdego polecenia tworzy nową warstwę (*layer*)\n",
" - Jeśli zbudowaliśmy obraz, a potem zmieniliśmy jedno z poleceń lub dodaliśmy nowe, to przebudowane zostaną tylko warstwy od zmienionej w dół (oszczędność czasu i zasobów)." " - Jeśli zbudowaliśmy obraz a potem zmieniliśmy jedno z poleceń / dodaliśmy nowe, to przebudowane zostaną tylko warstwy od zmienionej w dół (osczędność czasu i zasobów)"
] ]
}, },
{ {
@ -239,7 +250,7 @@
"source": [ "source": [
"### Przykładowy Dockerfile:\n", "### Przykładowy Dockerfile:\n",
"```Dockerfile\n", "```Dockerfile\n",
"# Nasz obraz będzie dziedziczył z obrazu Ubuntu w wersji latest\n", "# Nasz obraz będzie dzidziczył z obrazu Ubuntu w wersji latest\n",
"FROM ubuntu:latest\n", "FROM ubuntu:latest\n",
"\n", "\n",
"# Instalujemy niezbędne zależności. Zwróć uwagę na flagę \"-y\" (assume yes)\n", "# Instalujemy niezbędne zależności. Zwróć uwagę na flagę \"-y\" (assume yes)\n",

View File

@ -8,9 +8,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 3 kwietnia 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 5. Biblioteki do uczenia głębokiego" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 5. <i>Biblioteki Deep Learning</i> [laboratoria]</h2> \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)"
] ]
}, },
{ {
@ -22,7 +27,7 @@
}, },
"source": [ "source": [
"## Plan na dziś\n", "## Plan na dziś\n",
"Przegląd bibliotek DL (*deep learning*):\n", "Przegląd bibliotek DL:\n",
"1. Tensorflow\n", "1. Tensorflow\n",
"2. Pytorch\n", "2. Pytorch\n",
"3. Caffe \n", "3. Caffe \n",
@ -68,7 +73,7 @@
}, },
"source": [ "source": [
"## 1. Tensorflow\n", "## 1. Tensorflow\n",
" - [https://tensorflow.org](https://tensorflow.org)\n", " - www.tensorflow.org\n",
" - Open source\n", " - Open source\n",
" - Rozwijana przez google\n", " - Rozwijana przez google\n",
" - Bogaty \"ekosystem\"\n", " - Bogaty \"ekosystem\"\n",
@ -123,7 +128,7 @@
" - Dynamiczny graf obliczeń\n", " - Dynamiczny graf obliczeń\n",
" - Możliwość osadzenia na urządzeniach Android i iOS ([Torch mobile](https://pytorch.org/mobile/home/))\n", " - Możliwość osadzenia na urządzeniach Android i iOS ([Torch mobile](https://pytorch.org/mobile/home/))\n",
" - Serwowanie modeli przez REST dzięki [TorchServe](https://pytorch.org/serve/)\n", " - Serwowanie modeli przez REST dzięki [TorchServe](https://pytorch.org/serve/)\n",
" - Przykład klasyfikacji Iris w PyTorch: https://www.kaggle.com/aaditkapoor1201/iris-classification-pytorch" " - Przykład klasyfikacji IRIS w PyTorch: https://www.kaggle.com/aaditkapoor1201/iris-classification-pytorch"
] ]
}, },
{ {
@ -157,7 +162,7 @@
" - zmergowana do repozytorium PyTorch\n", " - zmergowana do repozytorium PyTorch\n",
" - Open source\n", " - Open source\n",
" - Głównie zastosowania produkcyjne, w tym modele embedded (Caffe2go)\n", " - Głównie zastosowania produkcyjne, w tym modele embedded (Caffe2go)\n",
" - PyTorch: łatwość eksperymentowania, research. Caffe2: wydajność, urządzenia mobilne\n", " - PyTorch: łatwość ekspoerymentowania, research. Caffe2: wydajność, urządzenia mobilne\n",
" - ONNX jako format wymiany między Caffe2 i PyTorch" " - ONNX jako format wymiany między Caffe2 i PyTorch"
] ]
}, },
@ -177,7 +182,7 @@
" - Napisana w Javie i C++\n", " - Napisana w Javie i C++\n",
" - Interfejsy: Java, Scala, Clojure, Kotlin\n", " - Interfejsy: Java, Scala, Clojure, Kotlin\n",
" - Możliość importu modeli Keras\n", " - Możliość importu modeli Keras\n",
" - Przykład klasyfikacji Iris: https://deeplearning4j.konduit.ai/android/linear-classifier\n" " - Przykład klasyfikacji IRIS: https://deeplearning4j.konduit.ai/android/linear-classifier\n"
] ]
}, },
{ {
@ -210,7 +215,7 @@
" - Open source (licencja MIT)\n", " - Open source (licencja MIT)\n",
" - Napisana w C#, C++\n", " - Napisana w C#, C++\n",
" - API: .NET, Python (bindingi poprzez [NimbusML](https://github.com/microsoft/NimbusML))\n", " - API: .NET, Python (bindingi poprzez [NimbusML](https://github.com/microsoft/NimbusML))\n",
" - Przykłady klasyfikacji Iris:\n", " - Przykłady klasyfikacji IRIS:\n",
" - https://docs.microsoft.com/pl-pl/dotnet/machine-learning/tutorials/iris-clustering\n", " - https://docs.microsoft.com/pl-pl/dotnet/machine-learning/tutorials/iris-clustering\n",
" - https://github.com/dotnet/machinelearning-samples/tree/main/samples/csharp/getting-started/MulticlassClassification_Iris\n", " - https://github.com/dotnet/machinelearning-samples/tree/main/samples/csharp/getting-started/MulticlassClassification_Iris\n",
" - Więcej przykładów: https://github.com/dotnet/machinelearning-samples\n", " - Więcej przykładów: https://github.com/dotnet/machinelearning-samples\n",
@ -228,7 +233,7 @@
"## 8. MXNet\n", "## 8. MXNet\n",
" - https://mxnet.apache.org/\n", " - https://mxnet.apache.org/\n",
" - Open source (Apache 2.0)\n", " - Open source (Apache 2.0)\n",
" - Był rozwijany przez [Apache Software Foundation](https://www.apache.org/)\n", " - Rozwijana przez [Apache Software Foundation](https://www.apache.org/)\n",
" - Backend napisany w C++\n", " - Backend napisany w C++\n",
" - Iterfejsy: Python (główny) i dodatkowo for Scala, Julia, Clojure, Java, C++, R i Perl\n", " - Iterfejsy: Python (główny) i dodatkowo for Scala, Julia, Clojure, Java, C++, R i Perl\n",
" - Możliwość osadzenia na urządzeniach mobilnych dzięki [amalgamacji](https://mxnet.apache.org/versions/1.8.0/api/faq/smart_device)" " - Możliwość osadzenia na urządzeniach mobilnych dzięki [amalgamacji](https://mxnet.apache.org/versions/1.8.0/api/faq/smart_device)"
@ -251,9 +256,9 @@
"|PyTorch |Facebook |BSD |C++,Python |C,Python, Java | |\n", "|PyTorch |Facebook |BSD |C++,Python |C,Python, Java | |\n",
"|Caffe |[BAIR](https://bair.berkeley.edu/)|BSD|C++|Python,Matlab| |\n", "|Caffe |[BAIR](https://bair.berkeley.edu/)|BSD|C++|Python,Matlab| |\n",
"|Caffe2 |Facebook |BSD |C++ |C++,Python |Od 3 lat (2018) część PyTorch|\n", "|Caffe2 |Facebook |BSD |C++ |C++,Python |Od 3 lat (2018) część PyTorch|\n",
"|CNTK |Microsoft |MIT |C++ |Python, C++, C# |nierozwijany od 01.2019|\n", "|CNTK |Microsoft |MIT |C++ |Python, C++, C# |od 01.2019 nierozwijana|\n",
"|ML.NET |Microsoft |MIT |C++, C## |.NET, Python || \n", "|ML.NET |Microsoft |MIT |C++, C## |.NET, Python || \n",
"|MXNet |Apache Foundation|Apache 2.0|C++, Python|Python, Scala, Julia, Clojure, Java, C++, R i Perl|nierozwijany od 05.2022|" "|MXNet |Apache Foundation|Apache 2.0|C++, Python|Python, Scala, Julia, Clojure, Java, C++, R i Perl||"
] ]
}, },
{ {
@ -289,10 +294,10 @@
"source": [ "source": [
"## Zadanie [22 pkt.]\n", "## Zadanie [22 pkt.]\n",
"\n", "\n",
"Termin: 24 kwietnia 2024\n", "Termin: 2023-05-12\n",
"\n", "\n",
"1. Wybierz jeden z frameworków ML (jeden z powyższych, ale może być też inny) i zaimplementuj w nim prostą sieć neuronową rozwiązującą wybrany problem (np regresji lub klasyfikacji) na wybranym na poprzednich zajęciach zbiorze. Możesz wzorować się (lub nawet skopiować) na jednym z tutoriali do danego frameworka.\n", "1. Wybierz jeden z frameworków ML (jeden z powyższych, ale może być też inny) i zaimplementuj w nim prostą sieć neuronową rozwiązującą wybrany problem (np regresji lub klasyfikacji) na wybranym na poprzednich zajęciach zbiorze. Możesz wzorować się (lub nawet skopiować) na jednym z tutotoriali do danego frameworka.\n",
" - wczytaj dane trenujące [2 pkt.]\n", " - wczytaj dane trenujące z pliku [2 pkt.]\n",
" - wytrenuj na nich model [6 pkt.]\n", " - wytrenuj na nich model [6 pkt.]\n",
" - zapisz model do pliku [2 pkt.]\n", " - zapisz model do pliku [2 pkt.]\n",
" - w osobnym skypcie, przy pomocy zapisanego wcześniej modelu, dokonaj predykcji na danych ze zbioru testującego [8 pkt.]\n", " - w osobnym skypcie, przy pomocy zapisanego wcześniej modelu, dokonaj predykcji na danych ze zbioru testującego [8 pkt.]\n",

View File

@ -8,9 +8,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "## ![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 10 kwietnia 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# Jenkins, część 2" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 6. <i>Jenkins, część 2.</i> [laboratoria]</h2> \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)"
] ]
}, },
{ {
@ -36,9 +41,9 @@
}, },
"source": [ "source": [
"## Multibranch pipeline\n", "## Multibranch pipeline\n",
" - Multibranch Pipeline to rodzaj projektu na Jenkinsie, który automatycznie obsługuje wiele gałęzi (*branch*) w repozytorium\n", " - Multibranch Pipeline to rodzaj projektu na Jenkinsie, który automatycznie obsługuje wiele gałęzi (branch) w repozytorium\n",
" - W dominującym dziś sposobie utrzymywania i rozwoju kodu możemy wyróżnić:\n", " - W dominującym dziś sposobie utrzymywania i rozwoju kodu możemy wyróżnić:\n",
" - gałąź główną (*master/main branch*) - tutaj znajduje się aktualna, gotowa do wydania (opulbikowania/wdrożenia) wersja kodu\n", " - gałąź główną (master branch) - tutaj znajduje się aktualna, gotowa do wydania (opulbikowania/wdrożenia) wersja kodu\n",
" - gałęzie typu develop/feature/release/hotfix itp. ([tutaj](https://kamiljozwiak.net/gitflow-czyli-jak-korzystac-z-gita-i-nie-zwariowac/) przystępne wyjaśnienie czym się różnią), na których rozwijamy nasz kod/wprowadzamy nowe funkcjonalności/przygotowujemy wersje gotowe do włączenia do gałęzi master, naprawiamy błędy.\n", " - gałęzie typu develop/feature/release/hotfix itp. ([tutaj](https://kamiljozwiak.net/gitflow-czyli-jak-korzystac-z-gita-i-nie-zwariowac/) przystępne wyjaśnienie czym się różnią), na których rozwijamy nasz kod/wprowadzamy nowe funkcjonalności/przygotowujemy wersje gotowe do włączenia do gałęzi master, naprawiamy błędy.\n",
" - Gałęzi może być sporo i każdą z nich musimy przetestować, najlepiej automatycznie, przed zmergowaniem jej do gałęzi master\n", " - Gałęzi może być sporo i każdą z nich musimy przetestować, najlepiej automatycznie, przed zmergowaniem jej do gałęzi master\n",
" - Świetnie nadaje się do tego własnie Multibranch pipeline\n", " - Świetnie nadaje się do tego własnie Multibranch pipeline\n",
@ -179,12 +184,13 @@
} }
}, },
"source": [ "source": [
"## Zadanie 1 [5 pkt] (termin: 15 maja 2024)\n", "## Zadanie 1 [5 pkt] (termin: 2023-05-12)\n",
"1. Stwórz na Jenkins projekt typu Multibranch pipeline o nazwie s123456-training\n", "1. Stwórz na Jenkins projekt typu Multibranch pipeline o nazwie s123456-training\n",
" Projekt ten powinien przeprowadzać trenowanie modelu korzystając z kodu przygotowanego na poprzednich zajęciach. Trenowanie powinno odbywać się wewnątrz kontenera docker. [2 pkt]\n", " Projekt ten powinien przeprowadzać trenowanie modelu korzystając z kodu przygotowanego na poprzednich zajęciach. Trenowanie powinno odbywać się wewnątrz kontenera docker. [2 pkt]\n",
"2. Projekt powinien odpalać się automatycznie po zakończonym budowaniu projektu s123456-create-dataset i kopiować z niego zbiór danych [1 pkt]\n", "2. Projekt powinien odpalać się automatycznie po zakończonym budowaniu projektu s123456-create-dataset i kopiować z niego zbiór danych [1 pkt]\n",
"3. Po zakończeniu trenowania powstały model powinien zostać zarchiwizowany [1 pkt]\n", "3. Po zakończeniu trenowania powstały model powinien zostać zarchiwizowany [1 pkt]\n",
"4. Dodaj parametr umożliwiający przekazanie do skryptu trenującego parametrów trenowania. Najprościej zrobić to dodając parametr typu String i doklejać jego wartość do wywołania skryptu trenującego. [1 pkt]" "<!--4. Trenowanie modelu potrafi zająć bardzo dużo czasu. Sprawdzanie co 10 minut, czy już się zakończyło, to zły pomysł. Dodaj powiadomienie (wysyłane przez email na Teamsowy kanał \"Powiadomienia z Jenkins\") o zakończonym jobie zawierające rezultat (Status builda - successfull, failed, aborted itd) [1 pkt]-->\n",
"5. Dodaj parametr umożliwiający przekazanie do skryptu trenującego parametrów trenowania. Najprościej zrobić to dodając parametr typu String i doklejać jego wartość do wywołania skryptu trenującego. [1 pkt]"
] ]
}, },
{ {
@ -195,20 +201,20 @@
} }
}, },
"source": [ "source": [
"## Zadanie 2 [15 pkt] (termin: 15 maja 2024)\n", "## Zadanie 2 [15 pkt] (termin: 2023-05-12)\n",
"1. Stwórz na Jenkins projekt typu Multibranch pipeline o nazwie *s123456-evaluation*. \n", "1. Stwórz na Jenkins projekt typu Multibranch pipeline o nazwie s123456-evaluation.eg\n",
" Projekt ten będzie przeprowadzał ewaluację modelu stworzonego w *s123456-training* na danych ze zbioru testującego [1 pkt]\n", " Projekt ten będzie przeprowadzał ewaluację modelu stworzonego w s123456-training na danych ze zbioru testującego [1 pkt]\n",
"2. Ewaluacja polega na:\n", "2. Ewaluacja polega na:\n",
" - skopiowanie modelu z artefaktu z projektu *training*\n", " - skopiowanie modelu z artefaktu z projektu training\n",
" - wczytaniu tego modelu\n", " - wczytaniu tego modelu\n",
" - dokonaniu predykcji na zbiorze testowym za pomocą wczytanego modelu i zapisanie wyników tej predykcji do pliku\n", " - dokonaniu predykcji na zbiorze testowym za pomocą wczytanego modelu i zapisanie wyników tej predykcji do pliku\n",
" - wyliczeniu zbiorczych metryk (1-3 metryki) na zbiorze testującym (np. Accuracy, Micro-avg precission/recall, F1, RMSE - patrz [wykład 4. \"Metody ewaluacji\"])(https://git.wmi.amu.edu.pl/AITech/aitech-uma/src/branch/master/wyk/04_Metody_ewaluacji.ipynb) z przedmiotu Uczenie Maszynowe), \n", " - wyliczeniu zbiorczych metryk (1-3 metryki) na zbiorze testującym (np. Accuracy, Micro-avg precission/recall, F1, RMSE - patrz [wykład 4. \"Metody ewaluacji\"])(https://git.wmi.amu.edu.pl/AITech/aitech-uma/src/branch/master/wyk/04_Metody_ewaluacji.ipynb) z przedmiotu Uczenie Maszynowe), \n",
" - zapisaniu metryk do pliku\n", " - zapisaniu metryk do pliku\n",
" - zarchiwizowaniu go\n", " - zarchiwizowaniu go\n",
" [6 pkt]\n", " [6 pkt]\n",
"3. W celu śledzenia zmian wartości metryk, zapisuj wartości kumulatywnie w jednym pliku. Żeby to osiągnąć można: \n", "3. W celu śledzenia zmian wartości metryk, zapisuj wartości kumulatywnie w jednym pliku. Żeby to osiągnąć można: \n",
" - zapisywać metryki w ścieżce zewnątrznej w stosunku do Jenkinsa (w innym przypadku mogą zostać nadpisane np. podczas checkout repozytorium) - tej opcji nie wykorzystamy\n", " - zapisywać metryki w ścieżce zewnątrznej w stosunku do Jenkinsa (w innym przypadku mogą zostać nadpisane np. podczas checkout repozytorium) - tej opcji nie wykorzystamy\n",
" - dopisywać metrykę do końca pliku skopiowanego z artefaktów poprzedniego builda (należy uczynić kopiowanie tego artefaktu opcjonalnym, żeby pierwszt build na danym branchu nie \"wywalił się\" przy próbie skopiowania artefaktów z nieistniejącego joba) [2 pkt]\n", " - dopisywać metrykę do końca pliku skopiowanego z artefaktów poprzedniego builda (należy uczynić kopiowanie tego artefaktu opcjonalnym, żeby pierwszt build na danym branchu nie \"wywalił się\" przy próbie skopiowania artefaktów z nieistniejącego joba) [2 pkt]\n",
"4. Mając skumulowane wartości metryk z wszystkich dotychczasowych buildów, stwórz wykres: na osi X numer builda, na osi Y wartość metryk(i). [2 pkt]\n", "4. Mając skumulowane wartości metryk z wszystkich dotychczasowych buildów, stwórz wykres: na osi X numer builda, na osi Y wartość metryk(i). [2 pkt]\n",
" Możesz w tym celu użyć:\n", " Możesz w tym celu użyć:\n",
" - pluginu [plot](https://plugins.jenkins.io/plot)\n", " - pluginu [plot](https://plugins.jenkins.io/plot)\n",

View File

@ -8,9 +8,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 17 kwietnia 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 7. Sacred" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 7. <i>Sacred</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
] ]
}, },
{ {
@ -110,7 +115,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 3,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -121,36 +126,18 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Collecting sacred\n", "Requirement already satisfied: sacred in /home/tomek/miniconda3/lib/python3.9/site-packages (0.8.4)\n",
" Downloading sacred-0.8.5-py2.py3-none-any.whl (107 kB)\n", "Requirement already satisfied: jsonpickle>=1.2 in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (3.0.1)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m107.9/107.9 KB\u001b[0m \u001b[31m2.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", "Requirement already satisfied: colorama>=0.4 in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (0.4.6)\n",
"\u001b[?25hCollecting jsonpickle>=2.2.0\n", "Requirement already satisfied: GitPython in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (3.1.31)\n",
" Downloading jsonpickle-3.0.4-py3-none-any.whl (39 kB)\n", "Requirement already satisfied: py-cpuinfo>=4.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (9.0.0)\n",
"Collecting colorama>=0.4\n", "Requirement already satisfied: wrapt<2.0,>=1.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (1.15.0)\n",
" Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", "Requirement already satisfied: munch<3.0,>=2.5 in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (2.5.0)\n",
"Collecting munch<5.0,>=2.5\n", "Requirement already satisfied: docopt<1.0,>=0.3 in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (0.6.2)\n",
" Downloading munch-4.0.0-py2.py3-none-any.whl (9.9 kB)\n", "Requirement already satisfied: packaging>=18.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from sacred) (23.0)\n",
"Requirement already satisfied: packaging>=18.0 in ./venv/lib/python3.10/site-packages (from sacred) (24.0)\n", "Requirement already satisfied: six in /home/tomek/miniconda3/lib/python3.9/site-packages (from munch<3.0,>=2.5->sacred) (1.16.0)\n",
"Collecting wrapt<2.0,>=1.0\n", "Requirement already satisfied: gitdb<5,>=4.0.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from GitPython->sacred) (4.0.10)\n",
" Downloading wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80 kB)\n", "Requirement already satisfied: smmap<6,>=3.0.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from gitdb<5,>=4.0.1->GitPython->sacred) (5.0.0)\n"
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m80.3/80.3 KB\u001b[0m \u001b[31m12.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25hCollecting docopt<1.0,>=0.3\n",
" Downloading docopt-0.6.2.tar.gz (25 kB)\n",
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
"\u001b[?25hCollecting GitPython\n",
" Downloading GitPython-3.1.43-py3-none-any.whl (207 kB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.3/207.3 KB\u001b[0m \u001b[31m9.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25hCollecting py-cpuinfo>=4.0\n",
" Downloading py_cpuinfo-9.0.0-py3-none-any.whl (22 kB)\n",
"Collecting gitdb<5,>=4.0.1\n",
" Downloading gitdb-4.0.11-py3-none-any.whl (62 kB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.7/62.7 KB\u001b[0m \u001b[31m15.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25hCollecting smmap<6,>=3.0.1\n",
" Downloading smmap-5.0.1-py3-none-any.whl (24 kB)\n",
"Using legacy 'setup.py install' for docopt, since package 'wheel' is not installed.\n",
"Installing collected packages: py-cpuinfo, docopt, wrapt, smmap, munch, jsonpickle, colorama, gitdb, GitPython, sacred\n",
" Running setup.py install for docopt ... \u001b[?25ldone\n",
"\u001b[?25hSuccessfully installed GitPython-3.1.43 colorama-0.4.6 docopt-0.6.2 gitdb-4.0.11 jsonpickle-3.0.4 munch-4.0.0 py-cpuinfo-9.0.0 sacred-0.8.5 smmap-5.0.1 wrapt-1.16.0\n"
] ]
} }
], ],
@ -171,7 +158,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 11, "execution_count": 4,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -182,12 +169,12 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Overwriting IUM_07/sacred_hello.py\n" "Overwriting sacred_hello.py\n"
] ]
} }
], ],
"source": [ "source": [
"%%writefile IUM_07/sacred_hello.py\n", "%%writefile sacred_hello.py\n",
"from sacred import Experiment\n", "from sacred import Experiment\n",
"\n", "\n",
"ex = Experiment()\n", "ex = Experiment()\n",
@ -199,7 +186,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": 5,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -210,11 +197,11 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"WARNING - sacred_hello - No observers have been added to this run\n", "WARNING - sacred_hello - No observers have been added to this run\r\n",
"INFO - sacred_hello - Running command 'my_main'\n", "INFO - sacred_hello - Running command 'my_main'\r\n",
"INFO - sacred_hello - Started\n", "INFO - sacred_hello - Started\r\n",
"Witaj świecie!\n", "Witaj świecie!\r\n",
"INFO - sacred_hello - Completed after 0:00:00\n" "INFO - sacred_hello - Completed after 0:00:00\r\n"
] ]
} }
], ],
@ -253,7 +240,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 6,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -264,73 +251,73 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Usage:\n", "Usage:\r\n",
" sacred_hello.py [(with UPDATE...)] [options]\n", " sacred_hello.py [(with UPDATE...)] [options]\r\n",
" sacred_hello.py help [COMMAND]\n", " sacred_hello.py help [COMMAND]\r\n",
" sacred_hello.py (-h | --help)\n", " sacred_hello.py (-h | --help)\r\n",
" sacred_hello.py COMMAND [(with UPDATE...)] [options]\n", " sacred_hello.py COMMAND [(with UPDATE...)] [options]\r\n",
"\n", "\r\n",
"\n", "\r\n",
"\n", "\r\n",
"Options:\n", "Options:\r\n",
" -b VALUE --beat-interval=VALUE Set the heart-beat interval for this run. Time\n", " -b VALUE --beat-interval=VALUE Set the heart-beat interval for this run. Time\r\n",
" between two heartbeat events is measured in\n", " between two heartbeat events is measured in\r\n",
" seconds.\n", " seconds.\r\n",
" -C VALUE --capture=VALUE Control the way stdout and stderr are captured.\n", " -C VALUE --capture=VALUE Control the way stdout and stderr are captured.\r\n",
" The argument value must be one of [no, sys, fd]\n", " The argument value must be one of [no, sys, fd]\r\n",
" -c VALUE --comment=VALUE Add a comment to this run.\n", " -c VALUE --comment=VALUE Add a comment to this run.\r\n",
" -d --debug Set this run to debug mode. Suppress warnings\n", " -d --debug Set this run to debug mode. Suppress warnings\r\n",
" about missing observers and don't filter the\n", " about missing observers and don't filter the\r\n",
" stacktrace. Also enables usage with ipython\n", " stacktrace. Also enables usage with ipython\r\n",
" `--pdb`.\n", " `--pdb`.\r\n",
" -e --enforce_clean Fail if any version control repository is\n", " -e --enforce_clean Fail if any version control repository is\r\n",
" dirty.\n", " dirty.\r\n",
" -F VALUE --file_storage=VALUE Add a file-storage observer to the experiment.\n", " -F VALUE --file_storage=VALUE Add a file-storage observer to the experiment.\r\n",
" The value of the arguement should be the base-\n", " The value of the arguement should be the base-\r\n",
" directory to write the runs to\n", " directory to write the runs to\r\n",
" -f --force Disable warnings about suspicious changes for\n", " -f --force Disable warnings about suspicious changes for\r\n",
" this run.\n", " this run.\r\n",
" -h --help Print this help message and exit.\n", " -h --help Print this help message and exit.\r\n",
" -i VALUE --id=VALUE Set the id for this run.\n", " -i VALUE --id=VALUE Set the id for this run.\r\n",
" -l VALUE --loglevel=VALUE Set the LogLevel. Loglevel either as 0 - 50 or\n", " -l VALUE --loglevel=VALUE Set the LogLevel. Loglevel either as 0 - 50 or\r\n",
" as string: DEBUG(10), INFO(20), WARNING(30),\n", " as string: DEBUG(10), INFO(20), WARNING(30),\r\n",
" ERROR(40), CRITICAL(50)\n", " ERROR(40), CRITICAL(50)\r\n",
" -m VALUE --mongo_db=VALUE Add a MongoDB Observer to the experiment. The\n", " -m VALUE --mongo_db=VALUE Add a MongoDB Observer to the experiment. The\r\n",
" argument value is the database specification.\n", " argument value is the database specification.\r\n",
" Should be in the form: `[host:port:]db_name[.c\n", " Should be in the form: `[host:port:]db_name[.c\r\n",
" ollection[:id]][!priority]`\n", " ollection[:id]][!priority]`\r\n",
" -n VALUE --name=VALUE Set the name for this run.\n", " -n VALUE --name=VALUE Set the name for this run.\r\n",
" -D --pdb Automatically enter post-mortem debugging with\n", " -D --pdb Automatically enter post-mortem debugging with\r\n",
" pdb on failure.\n", " pdb on failure.\r\n",
" -p --print-config Always print the configuration first.\n", " -p --print-config Always print the configuration first.\r\n",
" -P VALUE --priority=VALUE Sets the priority for a queued up experiment.\n", " -P VALUE --priority=VALUE Sets the priority for a queued up experiment.\r\n",
" `--priority=NUMBER` The number represent the\n", " `--priority=NUMBER` The number represent the\r\n",
" priority for this run.\n", " priority for this run.\r\n",
" -q --queue Only queue this run, do not start it.\n", " -q --queue Only queue this run, do not start it.\r\n",
" -S VALUE --s3=VALUE Add a S3 File observer to the experiment. The\n", " -S VALUE --s3=VALUE Add a S3 File observer to the experiment. The\r\n",
" argument value should be\n", " argument value should be\r\n",
" `s3://<bucket>/path/to/exp`.\n", " `s3://<bucket>/path/to/exp`.\r\n",
" -s VALUE --sql=VALUE Add a SQL Observer to the experiment. The\n", " -s VALUE --sql=VALUE Add a SQL Observer to the experiment. The\r\n",
" typical form is:\n", " typical form is:\r\n",
" dialect://username:password@host:port/database\n", " dialect://username:password@host:port/database\r\n",
" -t VALUE --tiny_db=VALUE Add a TinyDB Observer to the experiment. The\n", " -t VALUE --tiny_db=VALUE Add a TinyDB Observer to the experiment. The\r\n",
" argument is the path to be given to the\n", " argument is the path to be given to the\r\n",
" TinyDbObserver.\n", " TinyDbObserver.\r\n",
" -u --unobserved Ignore all observers for this run.\n", " -u --unobserved Ignore all observers for this run.\r\n",
"\n", "\r\n",
"\n", "\r\n",
"Arguments:\n", "Arguments:\r\n",
" COMMAND Name of command to run (see below for list of commands)\n", " COMMAND Name of command to run (see below for list of commands)\r\n",
" UPDATE Configuration assignments of the form foo.bar=17\n", " UPDATE Configuration assignments of the form foo.bar=17\r\n",
"\n", "\r\n",
"\n", "\r\n",
"Commands:\n", "Commands:\r\n",
" print_config Print the updated configuration and exit.\n", " print_config Print the updated configuration and exit.\r\n",
" print_dependencies Print the detected source-files and dependencies.\n", " print_dependencies Print the detected source-files and dependencies.\r\n",
" save_config Store the updated configuration in a file.\n", " save_config Store the updated configuration in a file.\r\n",
" print_named_configs Print the available named configs and exit.\n", " print_named_configs Print the available named configs and exit.\r\n",
" my_main \n", " my_main \r\n",
"\n" "\r\n"
] ]
} }
], ],
@ -370,7 +357,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 5, "execution_count": 8,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -399,7 +386,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 6, "execution_count": 9,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -426,10 +413,10 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"<sacred.run.Run at 0x7ff6cf76d600>" "<sacred.run.Run at 0x7f89cc3175b0>"
] ]
}, },
"execution_count": 6, "execution_count": 9,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@ -451,7 +438,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 10,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -464,7 +451,7 @@
"{'recipient': 'Świecie', 'greeting': 'Witaj', 'message': 'Witaj Świecie!'}" "{'recipient': 'Świecie', 'greeting': 'Witaj', 'message': 'Witaj Świecie!'}"
] ]
}, },
"execution_count": 7, "execution_count": 10,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@ -487,23 +474,15 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 13, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
} }
}, },
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting IUM_07/sacred_scopes.py\n"
]
}
],
"source": [ "source": [
"%%writefile IUM_07/sacred_scopes.py\n", "# %load IUM_07/sacred_scopes.py\n",
"from sacred import Experiment\n", "from sacred import Experiment\n",
"\n", "\n",
"ex = Experiment()\n", "ex = Experiment()\n",
@ -532,11 +511,11 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"WARNING - sacred_scopes - No observers have been added to this run\n", "WARNING - sacred_scopes - No observers have been added to this run\r\n",
"INFO - sacred_scopes - Running command 'my_main'\n", "INFO - sacred_scopes - Running command 'my_main'\r\n",
"INFO - sacred_scopes - Started\n", "INFO - sacred_scopes - Started\r\n",
"Witaj Przygodo!\n", "Witaj Przygodo!\r\n",
"INFO - sacred_scopes - Completed after 0:00:00\n" "INFO - sacred_scopes - Completed after 0:00:00\r\n"
] ]
} }
], ],
@ -557,14 +536,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"INFO - sacred_scopes - Running command 'print_config'\n", "INFO - sacred_scopes - Running command 'print_config'\r\n",
"INFO - sacred_scopes - Started\n", "INFO - sacred_scopes - Started\r\n",
"Configuration (\u001b[34mmodified\u001b[0m, \u001b[32madded\u001b[0m, \u001b[31mtypechanged\u001b[0m, \u001b[2mdoc\u001b[0m):\n", "Configuration (\u001b[34mmodified\u001b[0m, \u001b[32madded\u001b[0m, \u001b[31mtypechanged\u001b[0m, \u001b[2mdoc\u001b[0m):\r\n",
" greeting = 'Witaj'\n", " greeting = 'Witaj'\r\n",
" message = 'Witaj Świecie!'\n", " message = 'Witaj Świecie!'\r\n",
" recipient = 'Świecie'\n", " recipient = 'Świecie'\r\n",
" seed = 166269169 \u001b[2m# the random seed for this experiment\u001b[0m\n", " seed = 269258424 \u001b[2m# the random seed for this experiment\u001b[0m\r\n",
"INFO - sacred_scopes - Completed after 0:00:00\n" "INFO - sacred_scopes - Completed after 0:00:00\r\n"
] ]
} }
], ],
@ -585,14 +564,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"INFO - sacred_scopes - Running command 'print_config'\n", "INFO - sacred_scopes - Running command 'print_config'\r\n",
"INFO - sacred_scopes - Started\n", "INFO - sacred_scopes - Started\r\n",
"Configuration (\u001b[34mmodified\u001b[0m, \u001b[32madded\u001b[0m, \u001b[31mtypechanged\u001b[0m, \u001b[2mdoc\u001b[0m):\n", "Configuration (\u001b[34mmodified\u001b[0m, \u001b[32madded\u001b[0m, \u001b[31mtypechanged\u001b[0m, \u001b[2mdoc\u001b[0m):\r\n",
" greeting = 'Witaj'\n", " greeting = 'Witaj'\r\n",
" message = 'Witaj Przygodo!'\n", " message = 'Witaj Przygodo!'\r\n",
"\u001b[34m recipient = 'Przygodo'\u001b[0m\n", "\u001b[34m recipient = 'Przygodo'\u001b[0m\r\n",
" seed = 496449715 \u001b[2m# the random seed for this experiment\u001b[0m\n", " seed = 667939214 \u001b[2m# the random seed for this experiment\u001b[0m\r\n",
"INFO - sacred_scopes - Completed after 0:00:00\n" "INFO - sacred_scopes - Completed after 0:00:00\r\n"
] ]
} }
], ],
@ -613,24 +592,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 17, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
} }
}, },
"outputs": [ "outputs": [],
{
"data": {
"text/plain": [
"{'recipient': 'samotności', 'greeting': 'Żegnaj'}"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"# %load IUM_07/config.json\n", "# %load IUM_07/config.json\n",
"{\n", "{\n",
@ -641,7 +609,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 18, "execution_count": 20,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -671,7 +639,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 19, "execution_count": 21,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -702,7 +670,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 20, "execution_count": 22,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -712,10 +680,10 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"{'recipient': 'samotności', 'greeting': 'Żegnaj', 'seed': 557578089}" "{'recipient': 'samotności', 'greeting': 'Żegnaj', 'seed': 877272352}"
] ]
}, },
"execution_count": 20, "execution_count": 22,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@ -737,7 +705,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 21, "execution_count": 23,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -783,7 +751,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 22, "execution_count": 24,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -811,10 +779,10 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"<sacred.run.Run at 0x7ff69f8c0610>" "<sacred.run.Run at 0x7f89a0db5550>"
] ]
}, },
"execution_count": 22, "execution_count": 24,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@ -864,16 +832,19 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 27, "execution_count": 28,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"total 8\n", "total 20\r\n",
"drwxr-xr-x 2 pawel pawel 4096 Apr 17 07:51 1\n", "drwsrwsr-t 2 tomek tomek 4096 May 28 2022 1\r\n",
"drwxr-xr-x 2 pawel pawel 4096 Apr 17 07:51 _sources\n" "drwsrwsr-t 2 tomek tomek 4096 May 28 2022 2\r\n",
"drwxr-sr-x 2 tomek tomek 4096 Apr 12 15:11 3\r\n",
"drwxr-sr-x 2 tomek tomek 4096 Apr 12 15:11 _resources\r\n",
"drwsrwsr-t 2 tomek tomek 4096 May 28 2022 _sources\r\n"
] ]
} }
], ],
@ -916,21 +887,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 24, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
} }
}, },
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting IUM_07/file_observer.py\n"
]
}
],
"source": [ "source": [
"%%writefile IUM_07/file_observer.py\n", "%%writefile IUM_07/file_observer.py\n",
"from sacred.observers import FileStorageObserver\n", "from sacred.observers import FileStorageObserver\n",
@ -956,7 +919,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 25, "execution_count": 29,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"
@ -967,10 +930,10 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"INFO - file_observer - Running command 'my_main'\n", "INFO - file_observer - Running command 'my_main'\r\n",
"INFO - file_observer - Started run with ID \"1\"\n", "INFO - file_observer - Started run with ID \"4\"\r\n",
"Witaj Świecie!\n", "Witaj Świecie!\r\n",
"INFO - file_observer - Completed after 0:00:00\n" "INFO - file_observer - Completed after 0:00:00\r\n"
] ]
} }
], ],
@ -991,7 +954,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 28, "execution_count": 30,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -1002,9 +965,13 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"total 8\n", "total 24\r\n",
"drwxr-xr-x 2 pawel pawel 4096 Apr 17 07:51 1\n", "drwsrwsr-t 2 tomek tomek 4096 May 28 2022 1\r\n",
"drwxr-xr-x 2 pawel pawel 4096 Apr 17 07:51 _sources\n" "drwsrwsr-t 2 tomek tomek 4096 May 28 2022 2\r\n",
"drwxr-sr-x 2 tomek tomek 4096 Apr 12 15:11 3\r\n",
"drwxr-sr-x 2 tomek tomek 4096 Apr 20 12:09 4\r\n",
"drwxr-sr-x 2 tomek tomek 4096 Apr 12 15:11 _resources\r\n",
"drwsrwsr-t 2 tomek tomek 4096 May 28 2022 _sources\r\n"
] ]
} }
], ],
@ -1014,7 +981,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 29, "execution_count": 1,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -1025,11 +992,11 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"total 16\n", "total 16\r\n",
"-rw-r--r-- 1 pawel pawel 77 Apr 17 07:51 config.json\n", "-rw-r--r-- 1 tomek tomek 77 May 28 2022 config.json\r\n",
"-rw-r--r-- 1 pawel pawel 159 Apr 17 07:51 cout.txt\n", "-rw-r--r-- 1 tomek tomek 159 May 28 2022 cout.txt\r\n",
"-rw-r--r-- 1 pawel pawel 2 Apr 17 07:51 metrics.json\n", "-rw-r--r-- 1 tomek tomek 2 May 28 2022 metrics.json\r\n",
"-rw-r--r-- 1 pawel pawel 1715 Apr 17 07:51 run.json\n" "-rw-r--r-- 1 tomek tomek 1659 May 28 2022 run.json\r\n"
] ]
} }
], ],
@ -1039,24 +1006,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 30, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
} }
}, },
"outputs": [ "outputs": [],
{
"data": {
"text/plain": [
"{'greeting': 'Witaj', 'recipient': 'Świecie', 'seed': 805857632}"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"# %load my_runs/1/config.json\n", "# %load my_runs/1/config.json\n",
"{\n", "{\n",
@ -1079,10 +1035,10 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"INFO - file_observer - Running command 'my_main'\n", "INFO - file_observer - Running command 'my_main'\r\n",
"INFO - file_observer - Started run with ID \"1\"\n", "INFO - file_observer - Started run with ID \"1\"\r\n",
"Witaj Świecie!\n", "Witaj Świecie!\r\n",
"INFO - file_observer - Completed after 0:00:00\n" "INFO - file_observer - Completed after 0:00:00\r\n"
] ]
} }
], ],
@ -1185,8 +1141,8 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"total 4\n", "total 4\r\n",
"-rw-r--r-- 1 pawel pawel 464 Apr 17 07:51 file_observer_cd34a0ef4a32fb0a966eaa01ea6371ad.py\n" "-rw-r--r-- 1 tomek tomek 464 May 28 2022 file_observer_cd34a0ef4a32fb0a966eaa01ea6371ad.py\r\n"
] ]
} }
], ],
@ -1197,27 +1153,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 33, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
} }
}, },
"outputs": [ "outputs": [],
{
"ename": "RuntimeError",
"evalue": "Defining an experiment in interactive mode! The sourcecode cannot be stored and the experiment won't be reproducible. If you still want to run it pass interactive=True",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[33], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msacred\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mobservers\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m FileStorageObserver\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msacred\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Experiment\n\u001b[0;32m----> 5\u001b[0m ex \u001b[38;5;241m=\u001b[39m \u001b[43mExperiment\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfile_observer\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m ex\u001b[38;5;241m.\u001b[39mobservers\u001b[38;5;241m.\u001b[39mappend(FileStorageObserver(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmy_runs\u001b[39m\u001b[38;5;124m'\u001b[39m))\n\u001b[1;32m 9\u001b[0m \u001b[38;5;129m@ex\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmy_config\u001b[39m():\n",
"File \u001b[0;32m~/ium/venv/lib/python3.10/site-packages/sacred/experiment.py:119\u001b[0m, in \u001b[0;36mExperiment.__init__\u001b[0;34m(self, name, ingredients, interactive, base_dir, additional_host_info, additional_cli_options, save_git_info)\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m name\u001b[38;5;241m.\u001b[39mendswith(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.pyc\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 118\u001b[0m name \u001b[38;5;241m=\u001b[39m name[:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m4\u001b[39m]\n\u001b[0;32m--> 119\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 121\u001b[0m \u001b[43m \u001b[49m\u001b[43mingredients\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mingredients\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 122\u001b[0m \u001b[43m \u001b[49m\u001b[43minteractive\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minteractive\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 123\u001b[0m \u001b[43m \u001b[49m\u001b[43mbase_dir\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbase_dir\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 124\u001b[0m \u001b[43m \u001b[49m\u001b[43m_caller_globals\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcaller_globals\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 125\u001b[0m \u001b[43m \u001b[49m\u001b[43msave_git_info\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msave_git_info\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 126\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 127\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdefault_command \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand(print_config, unobserved\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n",
"File \u001b[0;32m~/ium/venv/lib/python3.10/site-packages/sacred/ingredient.py:79\u001b[0m, in \u001b[0;36mIngredient.__init__\u001b[0;34m(self, path, ingredients, interactive, _caller_globals, base_dir, save_git_info)\u001b[0m\n\u001b[1;32m 71\u001b[0m (\n\u001b[1;32m 72\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmainfile,\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msources,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 76\u001b[0m _caller_globals, save_git_info, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbase_dir\n\u001b[1;32m 77\u001b[0m )\n\u001b[1;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmainfile \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m interactive:\n\u001b[0;32m---> 79\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 80\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDefining an experiment in interactive mode! \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 81\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe sourcecode cannot be stored and the \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 82\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mexperiment won\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt be reproducible. If you still\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 83\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m want to run it pass interactive=True\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 84\u001b[0m )\n",
"\u001b[0;31mRuntimeError\u001b[0m: Defining an experiment in interactive mode! The sourcecode cannot be stored and the experiment won't be reproducible. If you still want to run it pass interactive=True"
]
}
],
"source": [ "source": [
"# %load my_runs/_sources/file_observer_cd34a0ef4a32fb0a966eaa01ea6371ad.py\n", "# %load my_runs/_sources/file_observer_cd34a0ef4a32fb0a966eaa01ea6371ad.py\n",
"from sacred.observers import FileStorageObserver\n", "from sacred.observers import FileStorageObserver\n",
@ -1254,7 +1196,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 37, "execution_count": 36,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -1266,7 +1208,7 @@
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"INFO - file_observer - Running command 'my_main'\n", "INFO - file_observer - Running command 'my_main'\n",
"INFO - file_observer - Started run with ID \"3\"\n", "INFO - file_observer - Started run with ID \"5\"\n",
"INFO - file_observer - Completed after 0:00:00\n" "INFO - file_observer - Completed after 0:00:00\n"
] ]
}, },
@ -1309,7 +1251,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 40, "execution_count": 37,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -1320,14 +1262,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"{\n", "{\r\n",
" \"prepare_message_ts\": \"2024-04-17 07:53:12.105121\"\n", " \"prepare_message_ts\": \"2023-04-20 12:10:28.197315\"\r\n",
"}" "}"
] ]
} }
], ],
"source": [ "source": [
"cat my_runs/3/info.json" "cat my_runs/5/info.json"
] ]
}, },
{ {
@ -1465,7 +1407,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 41, "execution_count": 42,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -1476,14 +1418,8 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Collecting pymongo\n", "Requirement already satisfied: pymongo in /home/tomek/miniconda3/lib/python3.9/site-packages (4.3.3)\r\n",
" Downloading pymongo-4.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (676 kB)\n", "Requirement already satisfied: dnspython<3.0.0,>=1.16.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pymongo) (2.3.0)\r\n"
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m676.9/676.9 KB\u001b[0m \u001b[31m2.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
"\u001b[?25hCollecting dnspython<3.0.0,>=1.16.0\n",
" Downloading dnspython-2.6.1-py3-none-any.whl (307 kB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m307.7/307.7 KB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
"\u001b[?25hInstalling collected packages: dnspython, pymongo\n",
"Successfully installed dnspython-2.6.1 pymongo-4.6.3\n"
] ]
} }
], ],
@ -1493,7 +1429,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 44, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -1504,33 +1440,9 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"INFO - sacred_scopes - Running command 'my_main'\n" "INFO - sacred_scopes - Running command 'my_main'\n",
"ERROR - sacred_scopes - Failed after 0:00:30!\n"
] ]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - sacred_scopes - Started run with ID \"641\"\n",
"INFO - sacred_scopes - Completed after 0:00:00\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Witaj Świecie!\n"
]
},
{
"data": {
"text/plain": [
"<sacred.run.Run at 0x7ff69f7a74f0>"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
} }
], ],
"source": [ "source": [
@ -1538,9 +1450,9 @@
"from sacred import Experiment\n", "from sacred import Experiment\n",
"\n", "\n",
"ex = Experiment(\"sacred_scopes\", interactive=True)\n", "ex = Experiment(\"sacred_scopes\", interactive=True)\n",
"ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@tzietkiewicz.vm.wmi.amu.edu.pl:27017',\n", "ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@172.17.0.1:27017',\n",
" db_name='sacred')) # Tutaj podajemy dane uwierzytelniające i nazwę bazy skonfigurowane w pliku .env podczas uruchamiania bazy.\n", " db_name='sacred')) # Tutaj podajemy dane uwierzytelniające i nazwę bazy skonfigurowane w pliku .env podczas uruchamiania bazy.\n",
"# W przypadku instancji na Jenkinsie url będzie wyglądał następująco: mongodb://admin:IUM_2021@tzietkiewicz.vm.wmi.amu.edu.pl:27017\n", "# W przypadku instancji na Jenkinsie url będzie wyglądał następująco: mongodb://admin:IUM_2021@172.17.0.1:27017\n",
"@ex.config\n", "@ex.config\n",
"def my_config():\n", "def my_config():\n",
" recipient = \"Świecie\"\n", " recipient = \"Świecie\"\n",
@ -1588,46 +1500,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 45, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
} }
}, },
"outputs": [ "outputs": [],
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - sacred_scopes - Running command 'my_main'\n",
"INFO - sacred_scopes - Started run with ID \"642\"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Witaj Świecie!\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO - sacred_scopes - Completed after 0:00:39\n"
]
},
{
"data": {
"text/plain": [
"<sacred.run.Run at 0x7ff6c726dcf0>"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"from sacred.observers import MongoObserver\n", "from sacred.observers import MongoObserver\n",
"from sacred import Experiment\n", "from sacred import Experiment\n",
@ -1635,9 +1514,9 @@
"import time\n", "import time\n",
"\n", "\n",
"ex = Experiment(\"sacred_scopes\", interactive=True)\n", "ex = Experiment(\"sacred_scopes\", interactive=True)\n",
"ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@tzietkiewicz.vm.wmi.amu.edu.pl:27017',\n", "ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@172.17.0.1:27017',\n",
" db_name='sacred')) # Tutaj podajemy dane uwierzytelniające i nazwę bazy skonfigurowane w pliku .env podczas uruchamiania bazy.\n", " db_name='sacred')) # Tutaj podajemy dane uwierzytelniające i nazwę bazy skonfigurowane w pliku .env podczas uruchamiania bazy.\n",
"# W przypadku instancji na Jenkinsie url będzie wyglądał następująco: mongodb://admin:IUM_2021@tzietkiewicz.vm.wmi.amu.edu.pl:27017\n", "# W przypadku instancji na Jenkinsie url będzie wyglądał następująco: mongodb://admin:IUM_2021@172.17.0.1:27017\n",
"@ex.config\n", "@ex.config\n",
"def my_config():\n", "def my_config():\n",
" recipient = \"Świecie\"\n", " recipient = \"Świecie\"\n",
@ -1688,7 +1567,7 @@
} }
}, },
"source": [ "source": [
"## Zadanie [15 pkt] (do 2024-06-12)\n", "## Zadanie [15 pkt] (do 2023-06-?)\n",
"1. \"Owiń\" wywołanie swojego eksperymentu za pomocą Sacred, w ten sposób, żeby zapisane zostały [10pkt]:\n", "1. \"Owiń\" wywołanie swojego eksperymentu za pomocą Sacred, w ten sposób, żeby zapisane zostały [10pkt]:\n",
" - parametry, z którymi wywołany był trening\n", " - parametry, z którymi wywołany był trening\n",
" - powstały plik z modelem (jako artefakt)\n", " - powstały plik z modelem (jako artefakt)\n",
@ -1698,8 +1577,8 @@
" \n", " \n",
"Jako nazwę eksperymentu użyj swojego numeru indeksu tak, żebyś mogła/mógł je odnaleźć w Omniboard\n", "Jako nazwę eksperymentu użyj swojego numeru indeksu tak, żebyś mogła/mógł je odnaleźć w Omniboard\n",
"\n", "\n",
"2. Wykorzystaj co najmniej jeden z następujących obserwatorów [5pkt]: \n", "2. Wykorzystaj 2 obserwatory [5pkt]: \n",
" - MongoObserver, skorzytaj nastęþującego URL: `mongodb://admin:IUM_2021@tzietkiewicz.vm.wmi.amu.edu.pl:27017`\n", " - MongoObserver, skorzytaj nastęþującego URL: `mongodb://admin:IUM_2021@172.17.0.1:27017` (będziesz mógł przeglądać wyniki na http://tzietkiewicz.vm.wmi.amu.edu.pl:9000/sacred)\n",
" - FileObserver - zapisane pliki zarchiwizuj na Jenkinsie jako jego artefakty\n" " - FileObserver - zapisane pliki zarchiwizuj na Jenkinsie jako jego artefakty\n"
] ]
} }
@ -1724,7 +1603,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.10.12" "version": "3.9.12"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -10,4 +10,4 @@ def my_config():
@ex.automain @ex.automain
def my_main(message): def my_main(message):
print(message) print(message)

File diff suppressed because it is too large Load Diff

View File

@ -9,9 +9,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 15 maja 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 9. Środowiska wirtualne" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 9. <i>Środowiska wirtualne</i> [laboratoria]</h2> \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)"
] ]
}, },
{ {
@ -196,7 +201,7 @@
} }
}, },
"source": [ "source": [
"Różnice między Conda a venv ([źródło](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/environments.html#virtual-environments)):\n", "Różnice między Conda a venv [źródło](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/environments.html#virtual-environments):\n",
" - Dowolna wersja Python w Conda (inna niż systemowa)\n", " - Dowolna wersja Python w Conda (inna niż systemowa)\n",
" - Conda zarządza też zależnościami innymi niż Pythonowe\n", " - Conda zarządza też zależnościami innymi niż Pythonowe\n",
" - Paczki w PyPI (używane przez `pip`) pochodzą od ich autorów. Paczki w conda są  budowane przez conda albo społeczność conda-forge" " - Paczki w PyPI (używane przez `pip`) pochodzą od ich autorów. Paczki w conda są  budowane przez conda albo społeczność conda-forge"
@ -4745,7 +4750,6 @@
}, },
"source": [ "source": [
"## Zadania [10pkt]\n", "## Zadania [10pkt]\n",
"**Termin wykonania zadania: 22 maja 2024**\n",
"1. Zainstaluj Anaconda lub Miniconda na swoim komputerze\n", "1. Zainstaluj Anaconda lub Miniconda na swoim komputerze\n",
"2. Stwórz środowisko zawierające wszystkie zależności wymagane przez stworzone na zajęciach skrypty/programy\n", "2. Stwórz środowisko zawierające wszystkie zależności wymagane przez stworzone na zajęciach skrypty/programy\n",
"3. Wyeksportuj środowisko do pliku `environment.yml` i dodaj ten plik do repozytorium" "3. Wyeksportuj środowisko do pliku `environment.yml` i dodaj ten plik do repozytorium"

File diff suppressed because it is too large Load Diff

View File

@ -9,9 +9,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 29 maja 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 11. GitHub Actions" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 11. <i>Github actions</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
] ]
}, },
{ {
@ -23,6 +28,7 @@
} }
}, },
"source": [ "source": [
"## Github actions\n",
"<img src=\"img/expcontrol/github-actions.jpeg\">" "<img src=\"img/expcontrol/github-actions.jpeg\">"
] ]
}, },
@ -36,9 +42,21 @@
}, },
"source": [ "source": [
" - https://docs.github.com/en/actions\n", " - https://docs.github.com/en/actions\n",
" - System ciągłej integracji „wbudowany” w GitHub\n", " - System ciągłej integracji \"wbudowany\" w GitHub\n",
" - Darmowy dla publicznych repozytoriów (z większymi niż w płatnych planach [ograniczeniami dotyczącymi zasobów](https://docs.github.com/en/actions/reference/usage-limits-billing-and-administration#usage-limits))\n", " - Darmowy dla publicznych repozytoriów (z większymi niż w płatnych planach [ograniczeniami dotyczącymi zasobów](https://docs.github.com/en/actions/reference/usage-limits-billing-and-administration#usage-limits))\n",
" - https://youtu.be/cP0I9w2coGU" " "
]
},
{
"cell_type": "markdown",
"id": "2b06cc01",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"https://youtu.be/cP0I9w2coGU"
] ]
}, },
{ {
@ -50,15 +68,15 @@
} }
}, },
"source": [ "source": [
"### Terminologia GitHub Actions\n", "### Terminologia Github Actions\n",
" - ***Workflow*** odpowiada *pipeline*'owi z Jenkinsa.\n", " - *Workflow* - workflow odpowiada \"Pipeline\" z Jenkinsa.\n",
" - ***Event*** to zdarzenie, które uruchamia/wyzwala (*triggers*) *workflow*. Np. wypchnięcie zmiany do repozytorium (*push*), utworzenie pull requestu ([pełna lista tutaj](https://docs.github.com/en/actions/reference/events-that-trigger-workflows)).\n", " - *Event* - zdarzenie, które odapala (\"triggers\") \"Workflow\". Np. wypchnięcie zmiany do repozytorium (\"push\"), utworzenie Pull requesta. [Pełna lista](https://docs.github.com/en/actions/reference/events-that-trigger-workflows)\n",
" - ***Job*** - zadanie. Workflow składa się z jednego lub kilku zadań (*jobs*). Każde z nich może być wykonywane równolegle na innej maszynie (patrz *runner*).\n", " - *Job* - workflow składa się z jednego lub kilku zadań (\"jobs\"). Każde z nich może być wykonywane równolegle na innej maszynie (patrz \"runner\")\n",
" - ***Step*** (krok) - odpowiednik *stage* z Jenkinsa - służy do grupowania *actions*.\n", " - *Step* - odpowiednik \"Stage\" z Jenkinsa - służu do grupowania \"Actions\"\n",
" - ***Action/command*** (akcja/polecenie) - odpowiednik *step* z Jenkinsa - pojedyncze polecenie do wykonania, np. dodanie komentarza do pull requestu, wykonanie polecenia systemowego itp.\n", " - *Action/command* - odpowiednik \"Step\" z Jenkinsa - pojedyncze polecenie do wykonania, np. dodanie komentarze do Pull requesta, wykonanie polecenia systemowego itp.\n",
" - ***Runner*** (wykonawca) - odpowiednik jenkinsowego *agent* - serwer, na którym mogą być wykonywane zadania (*jobs*):\n", " - *Runner* - odpowiednik Jenkinsowego \"Agent\" - serwer, na którym mogą być wykonywane zadania (\"jobs\")\n",
" - *GitHub-hosted runner* - serwer utrzymywany przez GitHub (2-core CPU, 7 GB RAM, 14 GB SSD). Windows, Linux albo macOS.\n", " - *Github-hosted runner* - serwer utrzymywany przez Github (2-core CPU, 7 GB RAM, 14 GB SSD). Windows, Linux albo macOS\n",
" - *Self-hosted runner* - własny serwer, z zainstalowaną aplikacją [GitHub Actions Runner](https://github.com/actions/runner)." " - *Self-hosted runner* - nasz własny serwer, z zinstalowaną aplikacją [Github actions runner](https://github.com/actions/runner)"
] ]
}, },
{ {
@ -70,22 +88,22 @@
} }
}, },
"source": [ "source": [
"### Definicja *workflow*\n", "### Definicja workflow\n",
" - *Workflow* definiuje się w plikach YAML (o rozszerzeniu `*.yml` albo `*.yaml`) umieszczonych w specjalnym folderze `.github/workflows/` wewnątrz repozytorium.\n", " - Workflow definiuje się w plikach YAML(o rozszerzeniu `*.yml` albo `*.yaml`) umieszczonych w specjalnym folderze `.github/workflows/` wewnątrz repozytorium\n",
" - Pełna składnia jest opisana [tutaj](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions).\n", " - Pełna składnia jest opisana [tutaj](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions)\n",
" - Podstawowe pola:\n", " - Podstawowe pola:\n",
" - `name` (opcjonalne) - nazwa, pod którą *workflow*/*step* będzie widoczny w UI. Domyślnie: ścieżka do pliku YAML.\n", " - `name` [opcjonalna] - nazwa, pod którą workflow/step będzie widoczny w UI. Domyślnie ścieżka do pliku yaml\n",
" - `on` - definiuje, kiedy workflow ma być uruchomiony.\n", " - `on` - definiuje kiedy workflow ma być odpalony\n",
" - `jobs` - grupuje razem zadania (*jobs*) do wykonania. Każde może być wykonane na innym „wykonawcy” (*runner*). Domyślnie wykonywane są równolegle (ale możemy definiować [zależności między jobami](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds), co powoduje wykonanie ich sekwencyjnie).\n", " - `jobs` - grupuje razem \"zadania\" do wykonania. Każde może być wykonane na innym \"runnerze\". Domyślnie wykonywane są równolegle (ale możemy definiować [zależności między jobami](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds), co powoduje wykonanie ich sekwencyjnie\n",
" - `runs-on` - parametr zadania (*job*) definiujący, na jakiej maszynie wirtualnej ma być uruchomiony (np. `ubuntu-latest`).\n", " - `runs-on` - parametr joba, definujący na jakiej maszynie wirtualnej ma być uruchomiony (np. `ubuntu-latest`)\n",
" - `uses` - umożliwia użycie gotowych akcji zdefiniowanych przez nas albo przez innych użytkowników, np. `-uses: actions/checkout@v2` spowoduje *checkout* plików z repozytorium.\n", " - `uses` - umożliwia użycie gotowych akcji zdefiniowanych przez nas, albo przez innych użytkowników, np. `-uses: actions/checkout@v2` spowoduje checkout plików z repozytorium\n",
" - `run` - pozwala uruchomić dowolne ([dostępne/zainstalowane](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software)) polecenie, np. `python3 train.py`\n", " - `run` - pozwala uruchomić dowolne ([dostępne/zainstalowane](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software)) polecenie, np. `python3 train.py`\n",
" - `env` - pozwala zdefiniować zmienne środowiskowe dostępne dla akcji lub skorzystać ze [zmiennych ustawionych przez Github](https://docs.github.com/en/actions/reference/environment-variables#default-environment-variables)." " - `env` - pozwala zdefiniować zmienne środowiskowe dostępne dla akcji lub skorzystać ze [zmiennych ustawionych przez Github](https://docs.github.com/en/actions/reference/environment-variables#default-environment-variables)"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 9, "execution_count": 4,
"id": "f4916c1f", "id": "f4916c1f",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -97,15 +115,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"/home/pawel/ium/IUM_11/github-actions-hello\n" "/home/tomek/repos/aitech-ium/IUM_11/github-actions-hello\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/pawel/ium/venv/lib/python3.10/site-packages/IPython/core/magics/osm.py:417: UserWarning: This is now an optional IPython functionality, setting dhist requires you to install the `pickleshare` library.\n",
" self.shell.db['dhist'] = compress_dhist(dhist)[-100:]\n"
] ]
} }
], ],
@ -117,7 +127,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 10, "execution_count": 19,
"id": "88ce689f", "id": "88ce689f",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -129,21 +139,29 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Initialized empty Git repository in /home/pawel/ium/IUM_11/github-actions-hello/.git/\n", "Reinitialized existing Git repository in /home/tomek/repos/aitech-ium/IUM_11/github-actions-hello/.git/\n",
"Switched to a new branch 'main'\n" "Enumerating objects: 6, done.\n",
"Counting objects: 100% (6/6), done.\n",
"Delta compression using up to 4 threads\n",
"Compressing objects: 100% (4/4), done.\n",
"Writing objects: 100% (6/6), 780 bytes | 780.00 KiB/s, done.\n",
"Total 6 (delta 0), reused 0 (delta 0), pack-reused 0\n",
"To github.com:TomekZet/ium-ga-hello.git\n",
" * [new branch] main -> main\n",
"Branch 'main' set up to track remote branch 'main' from 'origin'.\n"
] ]
} }
], ],
"source": [ "source": [
"!git init\n", "!git init\n",
"!git checkout -b main\n", "!git branch -M main\n",
"!git remote add origin git@github.com:USERNAME/ium-ga-hello.git\n", "!git remote add origin git@github.com:TomekZet/ium-ga-hello.git\n",
"!git push -u origin main" "!git push -u origin main"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 11, "execution_count": 20,
"id": "dde8d432", "id": "dde8d432",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -155,7 +173,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Writing .github/workflows/workflow.yml\n" "Overwriting .github/workflows/workflow.yml\n"
] ]
} }
], ],
@ -172,7 +190,7 @@
" - name: Setup Python\n", " - name: Setup Python\n",
" uses: actions/setup-python@v2.2.2\n", " uses: actions/setup-python@v2.2.2\n",
" with:\n", " with:\n",
" python-version: '3.10'\n", " python-version: '3.7'\n",
" - run: python3 --version" " - run: python3 --version"
] ]
}, },
@ -213,13 +231,13 @@
} }
}, },
"source": [ "source": [
"### Zakładka *Actions* na stronie repozytorium:\n", "### Zakładka actions na stronie repozytorium:\n",
"https://github.com/skorzewski/ium-ga-hello/actions" "https://github.com/TomekZet/ium-ga-hello/actions"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": 27,
"id": "32701383", "id": "32701383",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -231,13 +249,11 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"total 24\n", "total 16\r\n",
"drwxr-xr-x 2 pawel pawel 4096 May 28 10:10 .\n", "drwxr-sr-x 2 tomek tomek 4096 May 17 11:51 .\r\n",
"drwxr-xr-x 3 pawel pawel 4096 May 28 10:10 ..\n", "drwxr-sr-x 3 tomek tomek 4096 May 17 11:51 ..\r\n",
"-rw-r--r-- 1 pawel pawel 1451 May 28 10:10 docker-artifact.yml\n", "-rw-r--r-- 1 tomek tomek 456 May 17 11:51 parametrized.yml\r\n",
"-rw-r--r-- 1 pawel pawel 882 May 28 10:10 docker.yml\n", "-rw-r--r-- 1 tomek tomek 305 May 17 12:01 workflow.yml\r\n"
"-rw-r--r-- 1 pawel pawel 603 May 28 10:10 parametrized.yml\n",
"-rw-r--r-- 1 pawel pawel 306 May 28 10:10 workflow.yml\n"
] ]
} }
], ],
@ -347,7 +363,7 @@
"source": [ "source": [
"### Zależności\n", "### Zależności\n",
"\n", "\n",
"Maszyny wirtualne (*runners*), na których uruchamiane są zadania, mają zainstalowany zbiór narzędzi. Przykładowa lista dla Ubuntu 24.04: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md\n", "Maszyny wirtualne (\"runners\"), na których uruchamiane są \"joby\" mają zainstalowany zbiór narzędzi. Przykładowa lista dla [Ubuntu 20.04](https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md)\n",
"\n", "\n",
"Brakujące zależności można zainstalować, korzystając z:\n", "Brakujące zależności można zainstalować, korzystając z:\n",
" - akcji\n", " - akcji\n",
@ -380,18 +396,8 @@
}, },
"source": [ "source": [
"### Akcje wykonywane w kontenerze Docker\n", "### Akcje wykonywane w kontenerze Docker\n",
"Akcja może być wywołana w kontenerze Docker (pobranym z Docker Hub albo zbudowanym z `Dockerfile`).\n", "Akcja może być wywołana w kontenerze Docker (pobranym z Docker hub albo zbudowanym z Dockerfile)\n",
"W tym celu należy stworzyć własną akcję w pliku `action.yaml` i potem użyć jej w *workflow*." "W tym celu należy stworzyć własną akcję w pliku action.yaml i potem użyć jej w Workflow"
]
},
{
"cell_type": "markdown",
"id": "6c9eea3e",
"metadata": {},
"source": [
"W oficjalnej dokumentacji GitHuba można znaleźć materiały na temat wykorzystania Dockera w GitHub Actions:\n",
"- [Creating a Docker container action](https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action)\n",
"- [Dockerfile support for GitHub Actions](https://docs.github.com/en/actions/creating-actions/dockerfile-support-for-github-actions)"
] ]
}, },
{ {
@ -722,7 +728,8 @@
} }
}, },
"source": [ "source": [
"## CML - Continous Machine Learning" "## CML - Continous Machine Learning\n",
"<img src=\"img/expcontrol/cml.png\">"
] ]
}, },
{ {
@ -1040,16 +1047,17 @@
} }
}, },
"source": [ "source": [
"## Zadania [15 pkt.] (termin: 5 czerwca 2024)\n", "## Zadania [20 pkt] (termin: 24.05.2023)\n",
"1. Utwórz konto w serwisie GitHub (jeśli jeszcze nie masz)\n", "1. Utwórz konto na Github (jeśli jeszcze nie masz)\n",
"2. Stwórz publiczne repozytorium. Link do niego wklej do kolumny *Link GitHub (Actions)* w arkuszu `IUM-2024.xlsx` [1 pkt]\n", "2. Stwórz publiczne repozytorium. Link do niego wklej do kolumny \"Link Github\" w arkuszu [\"Zapisy na zbiory\"](https://teams.microsoft.com/l/file/F62B5988-A797-418D-B085-52E0AF8BD55E?tenantId=73689ee1-b42f-4e25-a5f6-66d1f29bc092&fileType=xlsx&objectUrl=https%3A%2F%2Fuam.sharepoint.com%2Fsites%2F2021SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11%2FShared%20Documents%2FGeneral%2FZapisy%20na%20zbiory.xlsx&baseUrl=https%3A%2F%2Fuam.sharepoint.com%2Fsites%2F2021SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11&serviceName=teams&threadId=19:d67b0dc2ee0849eba517a2aa8507df9c@thread.tacv2&groupId=8cd6b30e-edd9-48db-85ab-259fc11d0c5b) [1 pkt]\n",
"3. Stwórz prosty *GitHub workflow*, który:\n", "2. Stwórz prosty Github workflow który:\n",
" - zrobi checkout Twojego repozytorium [1 pkt]\n", " - zrobi checkout Twojego repozytorium [1 pkt]\n",
" - pobierze pliki z danymi uczącymi (pliki można po prostu dodać do repozytorium albo pobrać przez `wget` jeśli są publicznie dostępne) [2 pkt]\n", " - ściągnie pliki trenujące. Najlepiej byłoby to zrobić za pomocą DVC, ale tym razem uprośćmy zadanie ze względu na komplikacje, które mogą się pojawić przy konfiguracji uwierzytelniania. Pliki można po prostu dodać do repozytorium albo ściągnąć przez wget jeśli są publicznie dostępne [2 pkt]\n",
" - będzie wywoływalny przez \"Workflow dispatch\" z parametrami uczenia [2 pkt]\n", " - będzie wywoływalny przez \"Workflow dispatch\" z parametrami trenowania [2 pkt]\n",
" - będzie się składał z co najmniej 2 zadań (*job*):\n", " - składał się będzie z co najmniej 3 jobów:\n",
" - uczenie modelu [5 pkt]\n", " 1. dokona trenowania jako osobnej akcji wykonanej w Dockerze [8 pkt]\n",
" - ewaluacja modelu [4 pkt]" " 2. dokona ewaluacji modelu [6 pkt]\n",
" 3. zarchiwizuje plik z modelem"
] ]
} }
], ],
@ -1073,7 +1081,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.10.12" "version": "3.9.16"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -5,9 +5,14 @@
"id": "805668ca", "id": "805668ca",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 5 czerwca 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 12. Przegląd rynku pracy" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 12. <i>Przegląd rynku pracy</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
] ]
}, },
{ {
@ -15,27 +20,46 @@
"id": "69587a1e", "id": "69587a1e",
"metadata": {}, "metadata": {},
"source": [ "source": [
"### Zadanie [20pkt] - 12 czerwca 2024\n", "## Zadanie [30pkt]\n",
"\n", "\n",
"1. Znajdź minimum 6, interesujących dla Ciebie, ogłoszeń o pracę\n", "1. Znajdź minimum 6, interesujących dla Ciebie, ogłoszeń o pracę\n",
" - na razie nie zważaj na wymagania\n", " - na razie nie zważaj na wymagania\n",
" - szukaj pracy, którą będziesz mógł wykonywać np. po ukończeniu studiów\n", " - szukaj pracy, którą będziesz mógł wykonywać np. po ukończeniu studiów\n",
" - do tego czasu możesz jeszcze sporo się nauczyć\n", " - do tego czasu możesz jeszcze sporo się nauczyć\n",
" - nie przejmuj się lokalizacją geograficzną - żyjemy w czasie pracy zdalnej\n", " - nie przejmuj się lokalizacją geograficzną - żyjemy w czasie pracy zdalnej\n",
"\n", "\n",
"1. Przygotuj 3-4 slajdy prezentacji, która potrwa około 10 minut. Przedstaw w niej:\n", "2. Policz wymagania (zarówno te obowiązkowe jak i mile widziane) z tych ogłoszeń, tak, żeby stworzyć ich listę frekwencyjną, np:\n",
" - listę ogłoszeń, które znalazłeś (stanowisko, firma)\n", "|wymaganie |liczba ogłoszeń|\n",
" - statystyki dotyczące wymagań (tabelka + wykres)\n", "|--------------------|---------------|\n",
" - wybierz jedno wymaganie. Najlepiej mniej znane i oczywiste. Jeśli jest to :\n", "|analityczne myślenie| 6 |\n",
" - technologia (biblioteka itp) - opowiedz o niej krótko (do czego służy, jakie ma możliwości itp)\n", "|git | 5 |\n",
" - umiejętność, dziedzina wiedzy - opowiedz o niej krótko + przedstaw źródło, z którego można się jej nauczyć (książka, kurs, artykuł)\n", "|Python | 3 |\n",
"|Haskell | 1 |\n",
"\n",
"3. Przygotuj 3-4 slajdy prezentacji, która potrwa około 10 minut. Przedstaw w niej:\n",
" - listę ogłoszeń, które znalazłeś (stanowisko, firma)\n",
" - statystyki dotyczące wymagań (tabelka + wykres)\n",
" - wybierz jedno wymaganie. Najlepiej mniej znane i oczywiste. Jeśli jest to :\n",
" - technologia (biblioteka itp) - opowiedz o niej krótko (do czego służy, jakie ma możliwości itp)\n",
" - umiejętność, dziedzina wiedzy - opowiedz o niej krótko + przedstaw źródło, z którego można się jej nauczyć (książka, kurs, artykuł)\n",
" \n", " \n",
" Jeśli znasz jakieś ciekawe technologie/umiejętności, które chciałbyś przedstawić grupie, możesz odwrócić kolejność: poszukaj ogłoszeń, które o nich wspominają.\n", " Jeśli znasz jakieś ciekawe technologie/umiejętności, które chciałbyś przedstawić grupie, możesz odwrócić kolejność: poszukaj ogłoszeń, które o nich wspominają.\n",
"\n", " \n",
"1. Punktacja:\n", "Jedna osoba z grupy ma zadanie specjalne:\n",
" - 10 pkt. slajdy (proszę je wrzucić do swojego repozytorium)\n", " - nie szuka ogłoszeń\n",
" - 10 pkt. prezentacja na zajęciach" " - zbiera statystyki od reszty grupy i agreguje je (eliminując duplikaty)\n",
" - przygotowuje 2 slajdy przedstawiające statystyki:\n",
" - wymagań (tak jak każdy, ale dla całej grupy)\n",
" - firm będących aautorami ogłoszeń"
] ]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1fb3795f",
"metadata": {},
"outputs": [],
"source": []
} }
], ],
"metadata": { "metadata": {

View File

@ -9,9 +9,14 @@
} }
}, },
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"### 5 czerwca 2024\n", "<div class=\"alert alert-block alert-info\">\n",
"# 13. Przygotowanie publikacji naukowej" "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 12. <i>Przygotowanie publikacji naukowej</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
] ]
}, },
{ {
@ -23,7 +28,7 @@
} }
}, },
"source": [ "source": [
"## Abstract\n", "# Abstract\n",
"- Umiejętność pisania artykułu naukowego może okazać się przydatna dla osób zajmujących się uczeniem maszynowym.\n", "- Umiejętność pisania artykułu naukowego może okazać się przydatna dla osób zajmujących się uczeniem maszynowym.\n",
"- Zastosowanie klarownej struktury dokumentu ułatwia jego odbiór jak i tworzenie.\n", "- Zastosowanie klarownej struktury dokumentu ułatwia jego odbiór jak i tworzenie.\n",
"- LaTeX + Overleaf jaka narzędzia do składu artykułu" "- LaTeX + Overleaf jaka narzędzia do składu artykułu"
@ -38,7 +43,7 @@
} }
}, },
"source": [ "source": [
"## Introduction\n", "# Introduction\n",
"\n", "\n",
"- Uczenie maszynowe i jego zastosowania to prężnie rozwijająca się dziedzina nauki\n", "- Uczenie maszynowe i jego zastosowania to prężnie rozwijająca się dziedzina nauki\n",
"- Żeby nadążyć za jej rozwojem musimy czytać artykuły naukowe\n", "- Żeby nadążyć za jej rozwojem musimy czytać artykuły naukowe\n",
@ -58,7 +63,7 @@
} }
}, },
"source": [ "source": [
"## Related work\n", "# Related work\n",
"\n", "\n",
"Jak napisać artykuł naukowy z dziedziny ML:\n", "Jak napisać artykuł naukowy z dziedziny ML:\n",
"- http://www.isle.org/~langley/papers/craft.ml2k.pdf / https://icml.cc/Conferences/2002/craft.html\n", "- http://www.isle.org/~langley/papers/craft.ml2k.pdf / https://icml.cc/Conferences/2002/craft.html\n",
@ -79,7 +84,7 @@
} }
}, },
"source": [ "source": [
"## Methods" "# Methods"
] ]
}, },
{ {
@ -195,7 +200,7 @@
"- Opisujemy:\n", "- Opisujemy:\n",
" - Dane\n", " - Dane\n",
" - Algorytmy/architekturę\n", " - Algorytmy/architekturę\n",
" - możemy, choć nie musimy, podać techniczne szczegóły dotyczące implementacji, np. użyty framework. Zazwyczaj jednak kwestie techniczne nie są istotne i możemy od nich abstrahować, a na potrzeby reprodukowalności wyników najlepiej po prostu opublikować kod źródłowy/dane i wspomnieć o tym w artykule\n", " - możemy, choć nie musimy, podać techniczne szczegóły dotyczące implementacji, np. użyty framework. Zazwyczaj jednak kwestie techniczne nie są istotne i możemy od nich abstachować a na potrzeby reprodukowalności wyników najlepiej po prostu opublikować kod źródłowy/dane i wspomnieć o tym w artykule\n",
" - Procedurę ewaluacji/testowania\n", " - Procedurę ewaluacji/testowania\n",
"- Warto na naszych dancyh przetestować metodą bazową (\"baseline\") - np. obecny SOTA (\"State of the art\"), żeby potem móc do niej porównać nasze rozwiązanie." "- Warto na naszych dancyh przetestować metodą bazową (\"baseline\") - np. obecny SOTA (\"State of the art\"), żeby potem móc do niej porównać nasze rozwiązanie."
] ]
@ -240,9 +245,9 @@
} }
}, },
"source": [ "source": [
"### LaTeX\n", "## Latex\n",
"\n", "\n",
"- LaTeX (wym. *latech*) to system składu tekstu\n", "- LaTeX (wym. *Latech*) to system składu tekstu\n",
"- Najbardziej popularny w dziedzinach technicznych\n", "- Najbardziej popularny w dziedzinach technicznych\n",
"- https://www.latex-project.org//\n", "- https://www.latex-project.org//\n",
"- Podejście [WYSIWYM](https://pl.wikipedia.org/wiki/WYSIWYM)(\"What you see is what you mean\") w przeciwieństwie do WYSIWIG (What you see is what you get - przykład: Word).\n", "- Podejście [WYSIWYM](https://pl.wikipedia.org/wiki/WYSIWYM)(\"What you see is what you mean\") w przeciwieństwie do WYSIWIG (What you see is what you get - przykład: Word).\n",
@ -262,7 +267,7 @@
} }
}, },
"source": [ "source": [
"#### Struktura\n", "### Struktura\n",
"```latex\n", "```latex\n",
"\n", "\n",
"\\documentclass[conference]{IEEEtran}\n", "\\documentclass[conference]{IEEEtran}\n",
@ -454,7 +459,7 @@
} }
}, },
"source": [ "source": [
"### Overleaf \n", "## Overleaf \n",
" - Overlaf to serwis/aplikacja webowa umożliwiająca edycję i kompilację dokumentów Latexa on-line, w przeglądarce\n", " - Overlaf to serwis/aplikacja webowa umożliwiająca edycję i kompilację dokumentów Latexa on-line, w przeglądarce\n",
" - https://www.overleaf.com/\n", " - https://www.overleaf.com/\n",
" - Działa od ręki, bez potrzeby konfiguracji, instalacji pakietów itp.\n", " - Działa od ręki, bez potrzeby konfiguracji, instalacji pakietów itp.\n",
@ -472,7 +477,7 @@
} }
}, },
"source": [ "source": [
"### arXiv.org\n", "## arXiv.org\n",
" - https://arxiv.org/\n", " - https://arxiv.org/\n",
" - baza artykułów, uporządkowanych według kategorii\n", " - baza artykułów, uporządkowanych według kategorii\n",
" - umożliwia samodzielne opublikowanie artykułu jeszcze przed wysłaniem go do czasopisma/na konferencję. Artykuły tam dostępne nie są recenzowane, ale jest to sposób na otrzymanie feedbacku od społeczności poza oficjalnym procesem publikacyjnym." " - umożliwia samodzielne opublikowanie artykułu jeszcze przed wysłaniem go do czasopisma/na konferencję. Artykuły tam dostępne nie są recenzowane, ale jest to sposób na otrzymanie feedbacku od społeczności poza oficjalnym procesem publikacyjnym."
@ -487,9 +492,23 @@
} }
}, },
"source": [ "source": [
"### Materiały pomocnicze\n", "### JupyterBook\n",
"* JupyterBook: https://jupyterbook.org/en/stable/intro.html\n", "https://jupyterbook.org/en/stable/intro.html\n"
"* The Turing Way: https://the-turing-way.netlify.app/welcome.html\n" ]
},
{
"cell_type": "markdown",
"id": "ceef2f3f",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### The Turing Way\n",
"*The Turing Way handbook to reproducible, ethical and collaborative data science*\n",
"\n",
"https://the-turing-way.netlify.app/welcome.html"
] ]
}, },
{ {
@ -501,13 +520,10 @@
} }
}, },
"source": [ "source": [
"## Conclusions\n", "### Conclusions\n",
"### Zadanie [20pkt] - 19 czerwca 2024\n", "### Zadanie [30pkt][2023-06-07] (zmiana terminu!)\n",
"1. Wybierz konferencję naukową z dziedziny ML/AI/Computer Science.\n", "1. Wybierz konferencję naukową z dziedziny ML/AI/Computer Science\n",
" - 💡 Możesz sugerować się którąś z poniższych list:\n", "2. Używając szablonu Latex udostępnionego przez organizatorów konferencji, stwórz szkic artykułu naukowego opisującego wyniki eksperymentów ML, które przeprowadziłaś/eś w trakcie zajęć.\n",
" * https://www.aclweb.org/portal/events\n",
" * http://www.wikicfp.com/cfp/call?conference=machine%20learning\n",
"2. Używając szablonu LaTeX udostępnionego przez organizatorów konferencji, stwórz szkic artykułu naukowego opisującego wyniki eksperymentów ML, które przeprowadziłaś/eś w trakcie zajęć.\n",
"3. Napisz artykuł używając Overleaf. Udostępnij w [arkuszu z zapisami](https://uam.sharepoint.com/:x:/r/sites/2023SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11/Shared%20Documents/General/IUM-2023-zapisy.xlsx?d=w49d444e07d864d2997ef7d72c5a47da0&csf=1&web=1&e=RT11aP) link udostępniający dokument ([jak stworzyć taki link](https://www.overleaf.com/learn/how-to/What_is_Link_Sharing%3F))\n", "3. Napisz artykuł używając Overleaf. Udostępnij w [arkuszu z zapisami](https://uam.sharepoint.com/:x:/r/sites/2023SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11/Shared%20Documents/General/IUM-2023-zapisy.xlsx?d=w49d444e07d864d2997ef7d72c5a47da0&csf=1&web=1&e=RT11aP) link udostępniający dokument ([jak stworzyć taki link](https://www.overleaf.com/learn/how-to/What_is_Link_Sharing%3F))\n",
"4. Artykuł musi zawierać co najmniej:\n", "4. Artykuł musi zawierać co najmniej:\n",
" - 6 niepustych sekcji (abstract, introduction, related work, method, results, conclusions)\n", " - 6 niepustych sekcji (abstract, introduction, related work, method, results, conclusions)\n",
@ -515,9 +531,10 @@
" - jedną ilustrację (np. jakiś wykres, który tworzyli Państwo na zajęciach)\n", " - jedną ilustrację (np. jakiś wykres, który tworzyli Państwo na zajęciach)\n",
" - 5 cytowań (można np. zacytować artykuły opisujące użytą metodę, zbiory danych, narzędzia. Zazwyczaj popularne biblioteki, datasety podają w README jak należy je cytować)\n", " - 5 cytowań (można np. zacytować artykuły opisujące użytą metodę, zbiory danych, narzędzia. Zazwyczaj popularne biblioteki, datasety podają w README jak należy je cytować)\n",
" - 1 wzór matematyczny\n", " - 1 wzór matematyczny\n",
"5. Artykuł **nie musi** być długi i profesjonalnie napisany, chodzi raczej o zaznajomienie się z formą i strukturą :)\n", "5. Artykuł powinien być zgodny z wytycznymi konferencji dotyczącymi formy artykułów (oczywiście poza liczbą stron)\n",
"6. Artykuł powinien być zgodny z wytycznymi konferencji dotyczącymi formy artykułów (oczywiście poza liczbą stron)\n", "6. Na przedostatnich i ostatnich zajęciach będą Państwo prezentować artykuł i wtedy też zostanie on oceniony\n",
" \n", " \n",
"\n",
"Zapewne w napisanym artykule nie opiszą państwo niczego nowatorskiego i wartego publikacji - tutaj udajemy, że zastosowaliśmy metodę po raz pierwszy, osiągnęliśmy nieosiągalne dotąd wyniki itp. Liczy się forma i struktura pracy. Można dodać komentarz wyjaśniający prawdziwy cel artykuły w sekcji/przypisie \"Disclaimer\", żeby nikt Państwa nie posądzał o pisanie nieprawdy.\n", "Zapewne w napisanym artykule nie opiszą państwo niczego nowatorskiego i wartego publikacji - tutaj udajemy, że zastosowaliśmy metodę po raz pierwszy, osiągnęliśmy nieosiągalne dotąd wyniki itp. Liczy się forma i struktura pracy. Można dodać komentarz wyjaśniający prawdziwy cel artykuły w sekcji/przypisie \"Disclaimer\", żeby nikt Państwa nie posądzał o pisanie nieprawdy.\n",
" " " "
] ]

View File

@ -2,19 +2,15 @@
"cells": [ "cells": [
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "afe2a257", "id": "3c047009",
"metadata": {}, "metadata": {
"source": [ "slideshow": {
"## Inżynieria uczenia maszynowego\n", "slide_type": "slide"
"### 12 czerwca 2024\n", }
"# 14. Kubernetes" },
]
},
{
"cell_type": "markdown",
"id": "31ca02ad",
"metadata": {},
"source": [ "source": [
"# Kubernetes\n",
"\n",
"<img style=\"height: 150px;\" src=\"img/kubernetes_logo.png\"/>" "<img style=\"height: 150px;\" src=\"img/kubernetes_logo.png\"/>"
] ]
}, },
@ -35,16 +31,6 @@
" skonteneryzowanymi aplikacjami" " skonteneryzowanymi aplikacjami"
] ]
}, },
{
"cell_type": "markdown",
"id": "584872d2",
"metadata": {},
"source": [
"## Wprowadzenie — tutorial\n",
"\n",
"https://kubernetes.io/pl/docs/tutorials/kubernetes-basics"
]
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "7bb1198e", "id": "7bb1198e",
@ -54,8 +40,8 @@
} }
}, },
"source": [ "source": [
"## Kubeflow\n", "## Motywacja\n",
"Kubernetes jest środowiskiem, w którym działa Kubeflow - system stworzony z myślą o rozwoju i deploymencie modeli ML" "- Kubernetes jest środowiskiem, w którym działa Kubeflow - system stworzony z myślą o rozwoju i deploymencie modeli ML"
] ]
}, },
{ {
@ -67,8 +53,8 @@
} }
}, },
"source": [ "source": [
"## Minikube\n", "## Instalacja\n",
"Instalacja do nauki i eksperymentów (nieprodukcyjna): https://minikube.sigs.k8s.io/docs/start/" "- Instalacja do nauki i eksperymentów (nieprodukcyjna): https://minikube.sigs.k8s.io/docs/start/"
] ]
}, },
{ {
@ -128,9 +114,23 @@
}, },
"source": [ "source": [
"## Materiały\n", "## Materiały\n",
"Zapoznaj się z następującymi materiałami:\n",
"1. https://kubernetes.io/pl/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/\n", "1. https://kubernetes.io/pl/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/\n",
"2. https://kubernetes.io/pl/docs/tutorials/kubernetes-basics/explore/explore-intro/\n", "1. https://kubernetes.io/pl/docs/tutorials/kubernetes-basics/explore/explore-intro/\n",
"3. https://kubernetes.io/pl/docs/tutorials/kubernetes-basics/expose/expose-intro/" "2. https://kubernetes.io/pl/docs/tutorials/kubernetes-basics/expose/expose-intro/"
]
},
{
"cell_type": "markdown",
"id": "8af62811",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Zadanie\n",
"Brak ;) ale patrz nowy termin zadania z zajęć \"12. Publikacja\" (07.06.2023)"
] ]
} }
], ],

View File

@ -5,9 +5,7 @@
"id": "f7b2b9cc", "id": "f7b2b9cc",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## Inżynieria uczenia maszynowego\n", "# Google Cloud Vertex AI"
"### 19 czerwca 2024\n",
"# 15. Google Cloud Vertex AI"
] ]
}, },
{ {