Compare commits

...

79 Commits

Author SHA1 Message Date
a3a9ee4f70 Merge pull request 'Google Cloud i Vertex AI' (#49) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#49
2023-06-21 13:40:08 +02:00
6c6d5fba88 Google Cloud i Vertex AI 2023-06-21 13:39:01 +02:00
a013feb294 Merge pull request 'Zmiany z prywatnego repo' (#47) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#47
2023-05-31 14:38:00 +02:00
e927e26135 Aktualizacja terminów 2023-05-31 14:36:45 +02:00
b5bdb4e165 Merge pull request 'Added missing image' (#48) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#48
2023-05-31 13:45:47 +02:00
c7bfa4a316 Added missing image 2023-05-31 13:45:19 +02:00
50a5e2998f Merge pull request 'master' (#46) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#46
2023-05-31 13:41:44 +02:00
06d7e0d3a7 Update 2023-05-31 13:40:53 +02:00
375e08921f Kubernets intro 2023-05-31 13:30:35 +02:00
b650e23073 Merge pull request 'Update 2023' (#45) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#45
2023-05-24 13:46:12 +02:00
1f72275e83 Update 2023 2023-05-24 13:45:11 +02:00
eb983c3ddd Merge pull request 'master' (#44) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#44
2023-05-17 22:56:23 +02:00
4fee50befa Added example of archiving artifacts in Github Actions 2023-05-17 22:54:58 +02:00
fa535a10ac update 2023-05-17 22:30:48 +02:00
bfac49d4fe Merge pull request 'master' (#43) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#43
2023-05-17 13:56:52 +02:00
3de0fde490 Updated github actions aterials 2023-05-17 13:54:37 +02:00
8f75914eba Github Actions Workflow 2023-05-17 11:57:33 +02:00
db340bdbb2 Updated DVC materials 2023-04-26 17:35:34 +02:00
425c9defb6 Updated DVC slides 2023-04-26 13:44:55 +02:00
8264284fd7 Merge pull request 'master' (#42) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#42
2023-04-20 12:18:08 +02:00
b079dbb978 Poprawki 2023-04-20 12:13:19 +02:00
0d2ac2309a Zaktualizowaneo materiały dot. MLFLow 2023-04-20 11:28:57 +02:00
a022ba0b64 Fix mongodb url in comments 2023-04-19 12:54:45 +02:00
c9bed7835d Poprawka loginu do bazy 2023-04-19 12:23:05 +02:00
18c7c11ace Add missing git dependency 2023-04-19 12:09:02 +02:00
06eccfadf7 Fix Dockerfile path 2023-04-19 12:05:12 +02:00
e8f9c38340 Monog DB test 2023-04-19 12:04:06 +02:00
1d3e3ff71c Merge pull request 'Zaktualizowano meteriały dotyczące Sacred' (#41) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#41
2023-04-12 15:18:26 +02:00
28189bfeef Zaktualizowano meteriały dotyczące Sacred 2023-04-12 15:14:37 +02:00
74c46acf61 Merge pull request 'Zaktualizowano terminy zadań' (#40) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#40
2023-04-05 14:57:56 +02:00
3eaf176f65 Zaktualizowano terminy zadań 2023-04-05 14:55:47 +02:00
b88e776291 Merge pull request 'master' (#39) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#39
2023-03-29 15:15:57 +02:00
76adf25321 Fixed formatting issues 2023-03-29 15:14:19 +02:00
1c2d00f3dc Splitted long slides 2023-03-25 16:25:40 +01:00
855ca79293 Merge pull request 'Zaktualizowano linki do zapisów' (#38) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#38
2023-03-15 15:05:23 +01:00
d85421d61b Zaktualizowano linki do zapisów 2023-03-15 15:04:04 +01:00
4bb431da57 Merge pull request 'master' (#37) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#37
2023-03-15 13:46:44 +01:00
3104a23c03 Merge branch 'master' of git.wmi.amu.edu.pl:tzietkiewicz/aitech-ium 2023-03-15 13:46:09 +01:00
014fbd8479 Update przed zajęciami 2. 2023-03-15 13:44:50 +01:00
bfe0b0004f Dodano EvalAI do listy wyzwań 2023-03-10 14:57:46 +01:00
808ab908e7 Zaktualizowano zajęcia wprowadzające i organizacyjne 2023-03-08 21:49:16 +01:00
e470c7c055 Punkty 2023-03-08 21:49:16 +01:00
f7b4bce1d0 Zaktualizowano zajęcia wprowadzające i organizacyjne 2023-03-08 21:46:47 +01:00
54e8efa9b7 Punkty 2022-06-06 10:55:22 +02:00
e7d2e17474 Merge pull request 'master' (#34) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#34
2022-06-06 10:14:24 +02:00
dbe0e367a0 Dodano materiały dot. pisania publikacji 2022-06-06 10:00:54 +02:00
Tomasz Ziętkiewicz
b819483ba3 Dodano materiały dotyczące pisania publikacji 2022-06-06 01:18:09 +02:00
9be417dd6a Merge pull request 'Updated DVC remote config' (#33) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#33
2022-05-29 10:23:08 +02:00
78aef5d79e Updated DVC remote config 2022-05-29 09:52:24 +02:00
19f229b3e6 Merge pull request 'master' (#32) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#32
2022-05-23 10:06:59 +02:00
Tomasz Ziętkiewicz
67e14528bb Zmiana punktów 2022-05-23 10:01:41 +02:00
Tomasz Ziętkiewicz
107dc3301a Update 2022-05-23 10:00:02 +02:00
Tomasz Ziętkiewicz
b5daf596ba Update DVC 2022-05-23 09:57:46 +02:00
Tomasz Ziętkiewicz
3bafb6109d Update 2022-05-16 12:13:09 +02:00
ae37e8ddd1 Merge pull request 'updated dates' (#31) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#31
2022-05-09 10:54:08 +02:00
Tomasz Ziętkiewicz
8e7fc82ec1 updated dates 2022-05-09 10:53:28 +02:00
f857b890af Merge pull request 'Updated MLFlow' (#30) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#30
2022-05-09 09:55:13 +02:00
Tomasz Ziętkiewicz
13a0ff9035 Updated MLFlow 2022-05-09 09:54:34 +02:00
d3b75559e1 Merge pull request 'Fixed MongoDB URL' (#29) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#29
2022-05-08 23:02:54 +02:00
Tomasz Ziętkiewicz
a7527539c5 Fixed MongoDB URL 2022-05-08 23:00:54 +02:00
ea4a2b110d Merge pull request 'Zaktualizowano wywołania pythona' (#28) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#28
2022-04-25 11:24:01 +02:00
Tomasz Ziętkiewicz
2102e9f082 Zaktualizowano wywołania pythona dla kompatybilności ze starszymi
wersjami
2022-04-25 11:15:16 +02:00
68c93b6e5b Merge pull request 'master' (#27) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#27
2022-04-11 11:03:54 +02:00
3055a4f1c2 Merge pull request 'master' (#1) from AITech/aitech-ium:master into master
Reviewed-on: tzietkiewicz/aitech-ium#1
2022-04-11 11:02:37 +02:00
f8de2b8853 Dodano adres kanału z powiadomieniami na Teams 2022-04-11 11:01:37 +02:00
4d36d0cc2a Merge pull request 'master' (#26) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#26
2022-04-11 10:01:43 +02:00
7cd468a5c5 Updates 2022-04-11 10:00:56 +02:00
2815f857f4 Poprawki 2022-04-10 10:21:56 +02:00
7d6116c382 Update 'IUM_05.Biblioteki_DL.ipynb' 2022-04-04 09:55:16 +02:00
267b1fff9a Merge pull request 'Updated docker slides' (#25) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#25
2022-03-28 09:42:01 +02:00
30ec372384 Updated docker slides 2022-03-28 09:40:28 +02:00
16dcf15944 Merge pull request 'master' (#24) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#24
2022-03-21 09:50:46 +01:00
c4d4b3154c Updated date 2022-03-21 09:49:36 +01:00
b087c96a81 Added missing pictures 2022-03-20 10:24:22 +01:00
b737c1a504 Merge pull request 'Dodano link do arkusza z obecznościami' (#23) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#23
2022-03-14 13:42:58 +01:00
70579927aa Dodano link do arkusza z obecznościami 2022-03-14 13:41:51 +01:00
b5377e8f8b Merge pull request 'master' (#22) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#22
2022-03-14 11:51:34 +01:00
8f8a8f14f9 Aktualizacja zajec 2.t 2022-03-14 09:09:50 +01:00
0e2b626d0a Zaktualizowano plan zajęć 2022-03-06 23:08:17 +01:00
27 changed files with 13841 additions and 1666 deletions

13
.github/workflows/workflow.yml vendored Normal file
View File

@ -0,0 +1,13 @@
name: github-actions-hello
on: [push]
jobs:
hello-job:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2.2.2
with:
python-version: '3.7'
- run: python3 --version

View File

@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "ac87c554", "id": "3ae03d8e",
"metadata": {}, "metadata": {},
"source": [ "source": [
"# Środowisko wykorzystywane na zajęciach" "# Środowisko wykorzystywane na zajęciach"
@ -10,7 +10,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "167416f3", "id": "dc65cc30",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Certificat SSL dla strony: https://letsencrypt.org/\n", "Certificat SSL dla strony: https://letsencrypt.org/\n",
@ -57,7 +57,7 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"id": "60970c71", "id": "71e2cecc",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [] "source": []
@ -65,7 +65,7 @@
], ],
"metadata": { "metadata": {
"kernelspec": { "kernelspec": {
"display_name": "Python 3", "display_name": "Python 3 (ipykernel)",
"language": "python", "language": "python",
"name": "python3" "name": "python3"
}, },
@ -79,7 +79,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.10.4"
} }
}, },
"nbformat": 4, "nbformat": 4,

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 0. <i>Informacje organizacyjne</i> [laboratoria]</h2> \n", "<h2> 0. <i>Informacje organizacyjne</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -43,7 +43,6 @@
"## Przedmiot\n", "## Przedmiot\n",
"- Kod przedmiotu: 06-DIUMUI0\n", "- Kod przedmiotu: 06-DIUMUI0\n",
"- Nazwa: Inżynieria Uczenia Maszynowego\n", "- Nazwa: Inżynieria Uczenia Maszynowego\n",
"- WMI UAM 2021\n",
"- Sylabus: Sylabus-AITech-InzynieriaUczeniaMaszynowego.pdf" "- Sylabus: Sylabus-AITech-InzynieriaUczeniaMaszynowego.pdf"
] ]
}, },
@ -60,10 +59,13 @@
"- stopień naukowy:\tmagister inżynier\n", "- stopień naukowy:\tmagister inżynier\n",
"- stanowisko:\tdoktorant\n", "- stanowisko:\tdoktorant\n",
"- [Zakład Sztucznej Inteligencji](https://ai.wmi.amu.edu.pl/pl/)\n", "- [Zakład Sztucznej Inteligencji](https://ai.wmi.amu.edu.pl/pl/)\n",
"- CSI - Centrum Sztucznej Inteligencji, projekt Samsung\n",
"- email: tomasz.zietkiewicz@amu.edu.pl\n", "- email: tomasz.zietkiewicz@amu.edu.pl\n",
"- www: http://tz47965.home.amu.edu.pl/\n", "<!-- - www: http://tz47965.home.amu.edu.pl/ -->\n",
"- https://git.wmi.amu.edu.pl/tzietkiewicz/aitech-ium\n", "- https://git.wmi.amu.edu.pl/AITech/aitech-ium\n",
"- konsultacje: przez MS Teams, po wcześniejszym umówieniu mailowym lub przez chat" "- konsultacje: \n",
" - przez MS Teams po wcześniejszym umówieniu\n",
" - pokój B2-36, wtorki 12:00 - 13:00, po wcześniejszym umówieniu"
] ]
}, },
{ {
@ -97,15 +99,16 @@
"3. Ciągła Integracja - Jenkins\n", "3. Ciągła Integracja - Jenkins\n",
"4. Konteneryzacja - Docker\n", "4. Konteneryzacja - Docker\n",
"5. Biblioteki ML\n", "5. Biblioteki ML\n",
"6. Przygotowanie eksperymentu ML\n", "6. Jenkins pipeline\n",
"7. Jenkins pipeline\n", "7. Hugging Face Hub\n",
"8. Kontrola eksperymentów - Sacred\n", "8. Kontrola eksperymentów - Sacred\n",
"9. Kontrola eksperymentów - MLFlow\n", "9. Środowiska wirtualne\n",
"10. Kontrola eksperymentów - DVC\n", "10. Kontrola eksperymentów - MLFlow\n",
"11. Wizualizacja\n", "11. Kontrola eksperymentów - DVC\n",
"12. Finalizacja projektu\n", "12. Github Actions\n",
"13. Finalizacja projektu\n", "13. Kubernetes i Kubeflow\n",
"14. Podsumowanie" "14. Raportowanie wyników w formie publikacji naukowej\n",
"15. Prezentacja publikacji"
] ]
}, },
{ {
@ -151,7 +154,9 @@
"## Obecność\n", "## Obecność\n",
"\n", "\n",
"Zgodnie z oficjalnymi zasadami obowiązującymi w projekcie AITech, dopuszczalna liczba nieobecności na zajęciach wynosi 3 (obowiązkowa obecność na 80% zajęć).\n", "Zgodnie z oficjalnymi zasadami obowiązującymi w projekcie AITech, dopuszczalna liczba nieobecności na zajęciach wynosi 3 (obowiązkowa obecność na 80% zajęć).\n",
"Powyżej 3 nieobecności przemiot nie może być zaliczony." "Powyżej 3 nieobecności przemiot nie może być zaliczony.\n",
"\n",
"Arkusz z obecnościami 2023: https://uam.sharepoint.com/:x:/s/2023SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11/EWdi4uIh2AVBmlYx-2j4cpgBEDUOWviU1QHUayM98EuuIw?e=fe4uxl"
] ]
} }
], ],
@ -175,7 +180,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.16"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 1. <i>Wprowadzenie</i> [laboratoria]</h2> \n", "<h2> 1. <i>Wprowadzenie</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -115,6 +115,7 @@
"source": [ "source": [
"## 1.2.1 Systemy ciągłej integracji\n", "## 1.2.1 Systemy ciągłej integracji\n",
" - Jenkins <br/><img style=\"height: 50px;\" src=\"img/ci/jenkins.png\"/>\n", " - Jenkins <br/><img style=\"height: 50px;\" src=\"img/ci/jenkins.png\"/>\n",
" - Github Actions <br/><img style=\"height: 50px;\" src=\"img/ci/github-actions.png\"/>\n",
" - Bamboo <br/><img style=\"height: 50px;\" src=\"img/ci/bamboo.png\"/>\n", " - Bamboo <br/><img style=\"height: 50px;\" src=\"img/ci/bamboo.png\"/>\n",
" - Circle CI <br/><img style=\"height: 50px;\" src=\"img/ci/circleci.png\"/>\n", " - Circle CI <br/><img style=\"height: 50px;\" src=\"img/ci/circleci.png\"/>\n",
" - Team City <br/><img style=\"height: 50px;\" src=\"img/ci/teamcity.png\"/>\n", " - Team City <br/><img style=\"height: 50px;\" src=\"img/ci/teamcity.png\"/>\n",
@ -220,7 +221,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.12"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 2. <i>Dane</i> [laboratoria]</h2> \n", "<h2> 2. <i>Dane</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -59,11 +59,11 @@
"source": [ "source": [
"# Źródła danych\n", "# Źródła danych\n",
"- Gotowe zbiory:\n", "- Gotowe zbiory:\n",
" - Otwarte wyzwania (challenge)\n", " - Otwarte wyzwania (challenge)\n",
" - Repozytoria otwartych zbiorów danych\n", " - Repozytoria otwartych zbiorów danych\n",
" - Dane udostępniane przez firmy\n", " - Dane udostępniane przez firmy\n",
" - Repozytoria zbiorów komercyjnych\n", " - Repozytoria zbiorów komercyjnych\n",
" - Dane wewnętrzne (np. firmy)" " - Dane wewnętrzne (np. firmy)"
] ]
}, },
{ {
@ -77,9 +77,9 @@
"# Źródła danych\n", "# Źródła danych\n",
"- Tworzenie danych:\n", "- Tworzenie danych:\n",
" - Generowanie syntetyczne\n", " - Generowanie syntetyczne\n",
" - np. generowanie korpusów mowy za pomocą TTS (syntezy mowy)\n",
" - Crowdsourcing\n", " - Crowdsourcing\n",
" - Data scrapping\n", " - Data scrapping"
" - Ekstrakcja\n"
] ]
}, },
{ {
@ -92,11 +92,13 @@
"source": [ "source": [
"## Otwarte wyzwania (shared task / challenge)\n", "## Otwarte wyzwania (shared task / challenge)\n",
"- Kaggle: https://www.kaggle.com/datasets\n", "- Kaggle: https://www.kaggle.com/datasets\n",
"- EvalAI: https://eval.ai/\n",
"- Gonito: https://gonito.net/list-challenges - polski (+poznański +z UAM) Kaggle\n", "- Gonito: https://gonito.net/list-challenges - polski (+poznański +z UAM) Kaggle\n",
"- Semeval: https://semeval.github.io/ - zadania z semantyki\n", "- Semeval: https://semeval.github.io/ - zadania z semantyki\n",
"- Poleval: http://poleval.pl/ - przetwarzanie języka polskiego\n", "- Poleval: http://poleval.pl/ - przetwarzanie języka polskiego\n",
"- WMT http://www.statmt.org/wmt20/ (tłumaczenie maszynowe)\n", "- WMT http://www.statmt.org/wmt20/ (tłumaczenie maszynowe)\n",
"- IWSLT https://iwslt.org/2021/#shared-tasks (tłumaczenie mowy)" "- IWSLT https://iwslt.org/2021/#shared-tasks (tłumaczenie mowy)\n",
"- CNLPS - Challenges for Natural Language Processing - https://fedcsis.org/sessions/aaia/cnlps"
] ]
}, },
{ {
@ -108,11 +110,12 @@
}, },
"source": [ "source": [
"## Repozytoria/wyszukiwarki otwartych zbiorów danych\n", "## Repozytoria/wyszukiwarki otwartych zbiorów danych\n",
"- Huggingface Datasets: https://huggingface.co/datasets\n",
"- Papers with code: https://paperswithcode.com/datasets\n", "- Papers with code: https://paperswithcode.com/datasets\n",
"- UCI Machine Learning Repository: https://archive.ics.uci.edu/ml/\n", "- UCI Machine Learning Repository: https://archive.ics.uci.edu/ml/ (University of California)\n",
"- Google dataset search: https://datasetsearch.research.google.com/\n", "- Google dataset search: https://datasetsearch.research.google.com/\n",
"- Zbiory google:https://research.google/tools/datasets/\n", "- Zbiory google:https://research.google/tools/datasets/\n",
"- https://registry.opendata.aws/\n", "- Otwarte zbiory na Amazon AWS: https://registry.opendata.aws/\n",
" " " "
] ]
}, },
@ -126,11 +129,11 @@
"source": [ "source": [
"## Otwarte zbiory\n", "## Otwarte zbiory\n",
"- Rozpoznawanie mowy:\n", "- Rozpoznawanie mowy:\n",
" - https://www.openslr.org/ - Libri Speech, TED Lium\n", " - https://www.openslr.org/ - Libri Speech, TED Lium\n",
" - Mozilla Open Voice: https://commonvoice.mozilla.org/\n", " - Mozilla Open Voice: https://commonvoice.mozilla.org/\n",
"- NLP:\n", "- NLP:\n",
" - Clarin PL: https://lindat.cz/repository/xmlui/\n", " - Clarin: https://clarin-pl.eu/index.php/zasoby/\n",
" - Clarin: https://clarin-pl.eu/index.php/zasoby/\n", " - NKJP: http://nkjp.pl/\n",
" " " "
] ]
}, },
@ -143,9 +146,22 @@
}, },
"source": [ "source": [
"## Crowdsourcing\n", "## Crowdsourcing\n",
"- Amazon Mechanical Turk: https://www.mturk.com/\n",
"- Yandex Toloka\n",
"- reCAPTCHA\n", "- reCAPTCHA\n",
"<img src=\"img/ReCAPTCHA_idea.jpg\">\n",
"<img src=\"img/cat_captcha.png\">\n",
"\n",
"<sub>Źródło: https://pl.wikipedia.org/wiki/ReCAPTCHA#/media/Plik:ReCAPTCHA_idea.jpg</sub>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"- Amazon Mechanical Turk: https://www.mturk.com/\n",
"<img src=\"img/Tuerkischer_schachspieler_windisch4.jpg\">\n", "<img src=\"img/Tuerkischer_schachspieler_windisch4.jpg\">\n",
"\n", "\n",
"<sub>Źródło: https://en.wikipedia.org/wiki/Mechanical_Turk#/media/File:Tuerkischer_schachspieler_windisch4.jpg</sub>" "<sub>Źródło: https://en.wikipedia.org/wiki/Mechanical_Turk#/media/File:Tuerkischer_schachspieler_windisch4.jpg</sub>"
@ -201,13 +217,7 @@
} }
}, },
"source": [ "source": [
"## Inspekcja\n", "## Pobranie danych"
"- Zanim zaczniemy trenować model na danych, powinniśmy poznać ich specyfikę\n",
"- Pozwoli nam to:\n",
" - usunąć lub naprawić nieprawidłowe przykłady\n",
" - dokonać selekcji cech, których użyjemy w naszym modelu\n",
" - wybrać odpowiedni algorytm uczenia\n",
" - podjąć dezycję dotyczącą podziału zbioru i ewentualnej normalizacji\n"
] ]
}, },
{ {
@ -218,15 +228,12 @@
} }
}, },
"source": [ "source": [
"## Inspekcja\n", "### Pobieranie z Kaggle"
"- Do inspekcji danych użyjemy popularnej biblioteki pythonowej Pandas: https://pandas.pydata.org/\n",
"- Do wizualizacji użyjemy biblioteki Seaborn: https://seaborn.pydata.org/index.html\n",
"- Służy ona do analizy i operowania na danych tabelarycznych jak i szeregach czasowych"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": 1,
"metadata": { "metadata": {
"scrolled": true, "scrolled": true,
"slideshow": { "slideshow": {
@ -238,22 +245,33 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Requirement already satisfied: kaggle in /home/tomek/.local/lib/python3.8/site-packages (1.5.12)\n", "Collecting kaggle\n",
"Requirement already satisfied: python-dateutil in /home/tomek/anaconda3/lib/python3.8/site-packages (from kaggle) (2.8.1)\n", " Downloading kaggle-1.5.13.tar.gz (63 kB)\n",
"Requirement already satisfied: six>=1.10 in /home/tomek/anaconda3/lib/python3.8/site-packages (from kaggle) (1.15.0)\n", "\u001b[K |████████████████████████████████| 63 kB 558 kB/s eta 0:00:01\n",
"Requirement already satisfied: urllib3 in /home/tomek/anaconda3/lib/python3.8/site-packages (from kaggle) (1.25.11)\n", "\u001b[?25hRequirement already satisfied: six>=1.10 in /home/tomek/miniconda3/lib/python3.9/site-packages (from kaggle) (1.16.0)\n",
"Requirement already satisfied: python-slugify in /home/tomek/.local/lib/python3.8/site-packages (from kaggle) (4.0.1)\n", "Requirement already satisfied: certifi in /home/tomek/miniconda3/lib/python3.9/site-packages (from kaggle) (2022.12.7)\n",
"Requirement already satisfied: certifi in /home/tomek/anaconda3/lib/python3.8/site-packages (from kaggle) (2020.6.20)\n", "Requirement already satisfied: python-dateutil in /home/tomek/miniconda3/lib/python3.9/site-packages (from kaggle) (2.8.2)\n",
"Requirement already satisfied: tqdm in /home/tomek/anaconda3/lib/python3.8/site-packages (from kaggle) (4.50.2)\n", "Requirement already satisfied: requests in /home/tomek/miniconda3/lib/python3.9/site-packages (from kaggle) (2.27.1)\n",
"Requirement already satisfied: requests in /home/tomek/anaconda3/lib/python3.8/site-packages (from kaggle) (2.24.0)\n", "Requirement already satisfied: tqdm in /home/tomek/miniconda3/lib/python3.9/site-packages (from kaggle) (4.64.0)\n",
"Requirement already satisfied: text-unidecode>=1.3 in /home/tomek/.local/lib/python3.8/site-packages (from python-slugify->kaggle) (1.3)\n", "Collecting python-slugify\n",
"Requirement already satisfied: chardet<4,>=3.0.2 in /home/tomek/anaconda3/lib/python3.8/site-packages (from requests->kaggle) (3.0.4)\n", " Downloading python_slugify-8.0.1-py2.py3-none-any.whl (9.7 kB)\n",
"Requirement already satisfied: idna<3,>=2.5 in /home/tomek/anaconda3/lib/python3.8/site-packages (from requests->kaggle) (2.10)\n", "Requirement already satisfied: urllib3 in /home/tomek/miniconda3/lib/python3.9/site-packages (from kaggle) (1.26.9)\n",
"Requirement already satisfied: pandas in /home/tomek/anaconda3/lib/python3.8/site-packages (1.1.3)\n", "Collecting text-unidecode>=1.3\n",
"Requirement already satisfied: python-dateutil>=2.7.3 in /home/tomek/anaconda3/lib/python3.8/site-packages (from pandas) (2.8.1)\n", " Using cached text_unidecode-1.3-py2.py3-none-any.whl (78 kB)\n",
"Requirement already satisfied: numpy>=1.15.4 in /home/tomek/anaconda3/lib/python3.8/site-packages (from pandas) (1.19.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /home/tomek/miniconda3/lib/python3.9/site-packages (from requests->kaggle) (3.3)\n",
"Requirement already satisfied: pytz>=2017.2 in /home/tomek/anaconda3/lib/python3.8/site-packages (from pandas) (2020.1)\n", "Requirement already satisfied: charset-normalizer~=2.0.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from requests->kaggle) (2.0.4)\n",
"Requirement already satisfied: six>=1.5 in /home/tomek/anaconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)\n" "Building wheels for collected packages: kaggle\n",
" Building wheel for kaggle (setup.py) ... \u001b[?25ldone\n",
"\u001b[?25h Created wheel for kaggle: filename=kaggle-1.5.13-py3-none-any.whl size=77733 sha256=83eee49596c7c76816c3bb9e8ffc0763b25e336457881b9790b9620548ae7297\n",
" Stored in directory: /home/tomek/.cache/pip/wheels/9c/45/15/6d6d116cd2539fb8f450d64b0aee4a480e5366bb11b42ac763\n",
"Successfully built kaggle\n",
"Installing collected packages: text-unidecode, python-slugify, kaggle\n",
"Successfully installed kaggle-1.5.13 python-slugify-8.0.1 text-unidecode-1.3\n",
"Requirement already satisfied: pandas in /home/tomek/miniconda3/lib/python3.9/site-packages (1.5.3)\n",
"Requirement already satisfied: numpy>=1.20.3 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas) (1.24.2)\n",
"Requirement already satisfied: pytz>=2020.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas) (2022.7.1)\n",
"Requirement already satisfied: python-dateutil>=2.8.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas) (2.8.2)\n",
"Requirement already satisfied: six>=1.5 in /home/tomek/miniconda3/lib/python3.9/site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)\n"
] ]
} }
], ],
@ -263,9 +281,21 @@
"!pip install --user pandas" "!pip install --user pandas"
] ]
}, },
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
" - Pobierzemy zbiór Iris z Kaggle: https://www.kaggle.com/uciml/iris\n",
" - Licencja to \"Public Domain\", więc możemy z niego korzystać bez ograniczeń."
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 61, "execution_count": 7,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -276,8 +306,11 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Warning: Your Kaggle API key is readable by other users on this system! To fix this, you can run 'chmod 600 /home/tomek/.kaggle/kaggle.json'\n", "Downloading iris.zip to /home/tomek/repos/aitech-ium\r\n",
"iris.zip: Skipping, found more recently modified local copy (use --force to force download)\n" "\r",
" 0%| | 0.00/3.60k [00:00<?, ?B/s]\r\n",
"\r",
"100%|███████████████████████████████████████| 3.60k/3.60k [00:00<00:00, 438kB/s]\r\n"
] ]
} }
], ],
@ -289,8 +322,9 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 14, "execution_count": 8,
"metadata": { "metadata": {
"scrolled": true,
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
} }
@ -310,9 +344,50 @@
"!unzip -o iris.zip" "!unzip -o iris.zip"
] ]
}, },
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Inspekcja\n",
"- Zanim zaczniemy trenować model na danych, powinniśmy poznać ich specyfikę\n",
"- Pozwoli nam to:\n",
" - usunąć lub naprawić nieprawidłowe przykłady\n",
" - dokonać selekcji cech, których użyjemy w naszym modelu\n",
" - wybrać odpowiedni algorytm uczenia\n",
" - podjąć dezycję dotyczącą podziału zbioru i ewentualnej normalizacji\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Podstawowa inspekcja za pomocą narzędzi Bash"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 15, "execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"151 Iris.csv\r\n"
]
}
],
"source": [
"!wc -l Iris.csv"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -335,9 +410,88 @@
"!head -n 5 Iris.csv" "!head -n 5 Iris.csv"
] ]
}, },
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```less Iris.csv```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Inspekcja\n",
"- Do inspekcji danych użyjemy popularnej biblioteki pythonowej Pandas: https://pandas.pydata.org/\n",
"- Do wizualizacji użyjemy biblioteki Seaborn: https://seaborn.pydata.org/index.html\n",
"- Służy ona do analizy i operowania na danych tabelarycznych jak i szeregach czasowych"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 18, "execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: pandas in /home/tomek/miniconda3/lib/python3.9/site-packages (1.5.3)\n",
"Requirement already satisfied: python-dateutil>=2.8.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas) (2.8.2)\n",
"Requirement already satisfied: pytz>=2020.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas) (2022.7.1)\n",
"Requirement already satisfied: numpy>=1.20.3 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas) (1.24.2)\n",
"Requirement already satisfied: six>=1.5 in /home/tomek/miniconda3/lib/python3.9/site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)\n",
"Collecting seaborn\n",
" Downloading seaborn-0.12.2-py3-none-any.whl (293 kB)\n",
"\u001b[K |████████████████████████████████| 293 kB 694 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting matplotlib!=3.6.1,>=3.1\n",
" Downloading matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.6 MB)\n",
"\u001b[K |████████████████████████████████| 11.6 MB 253 kB/s eta 0:00:01 |██████▊ | 2.4 MB 396 kB/s eta 0:00:24\n",
"\u001b[?25hRequirement already satisfied: pandas>=0.25 in /home/tomek/miniconda3/lib/python3.9/site-packages (from seaborn) (1.5.3)\n",
"Requirement already satisfied: numpy!=1.24.0,>=1.17 in /home/tomek/miniconda3/lib/python3.9/site-packages (from seaborn) (1.24.2)\n",
"Requirement already satisfied: packaging>=20.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (23.0)\n",
"Requirement already satisfied: python-dateutil>=2.7 in /home/tomek/miniconda3/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (2.8.2)\n",
"Requirement already satisfied: importlib-resources>=3.2.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (5.12.0)\n",
"Collecting contourpy>=1.0.1\n",
" Downloading contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (299 kB)\n",
"\u001b[K |████████████████████████████████| 299 kB 613 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting pyparsing>=2.3.1\n",
" Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n",
"Collecting fonttools>=4.22.0\n",
" Downloading fonttools-4.39.0-py3-none-any.whl (1.0 MB)\n",
"\u001b[K |████████████████████████████████| 1.0 MB 556 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting cycler>=0.10\n",
" Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)\n",
"Collecting pillow>=6.2.0\n",
" Downloading Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl (3.4 MB)\n",
"\u001b[K |████████████████████████████████| 3.4 MB 664 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting kiwisolver>=1.0.1\n",
" Downloading kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)\n",
"\u001b[K |████████████████████████████████| 1.6 MB 1.0 MB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: zipp>=3.1.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib!=3.6.1,>=3.1->seaborn) (3.15.0)\n",
"Requirement already satisfied: pytz>=2020.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas>=0.25->seaborn) (2022.7.1)\n",
"Requirement already satisfied: six>=1.5 in /home/tomek/miniconda3/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.1->seaborn) (1.16.0)\n",
"Installing collected packages: pyparsing, pillow, kiwisolver, fonttools, cycler, contourpy, matplotlib, seaborn\n",
"Successfully installed contourpy-1.0.7 cycler-0.11.0 fonttools-4.39.0 kiwisolver-1.4.4 matplotlib-3.7.1 pillow-9.4.0 pyparsing-3.0.9 seaborn-0.12.2\n"
]
}
],
"source": [
"!pip install --user pandas\n",
"!pip install --user seaborn"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"
@ -508,7 +662,7 @@
"[150 rows x 6 columns]" "[150 rows x 6 columns]"
] ]
}, },
"execution_count": 18, "execution_count": 14,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@ -989,6 +1143,395 @@
"sns.pairplot(data=iris.drop(columns=[\"Id\"]), hue=\"Species\")" "sns.pairplot(data=iris.drop(columns=[\"Id\"]), hue=\"Species\")"
] ]
}, },
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Pobieranie z HuggingFace &#x1F917; Datasets\n",
" - Szukamy na https://huggingface.co/datasets/\n",
" - Klikamy w \"</> Use in datasets library\" i kopiujemy kod\n",
" - Instalujemy bibliotekę datasets"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting datasets\n",
" Downloading datasets-2.10.1-py3-none-any.whl (469 kB)\n",
"\u001b[K |████████████████████████████████| 469 kB 683 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting responses<0.19\n",
" Downloading responses-0.18.0-py3-none-any.whl (38 kB)\n",
"Collecting xxhash\n",
" Downloading xxhash-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (212 kB)\n",
"\u001b[K |████████████████████████████████| 212 kB 866 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting pyarrow>=6.0.0\n",
" Downloading pyarrow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.9 MB)\n",
"\u001b[K |████████████████████████████████| 34.9 MB 956 kB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: numpy>=1.17 in /home/tomek/miniconda3/lib/python3.9/site-packages (from datasets) (1.24.2)\n",
"Requirement already satisfied: requests>=2.19.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from datasets) (2.27.1)\n",
"Collecting aiohttp\n",
" Downloading aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)\n",
"\u001b[K |████████████████████████████████| 1.0 MB 859 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting pyyaml>=5.1\n",
" Downloading PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (661 kB)\n",
"\u001b[K |████████████████████████████████| 661 kB 857 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting huggingface-hub<1.0.0,>=0.2.0\n",
" Downloading huggingface_hub-0.13.2-py3-none-any.whl (199 kB)\n",
"\u001b[K |████████████████████████████████| 199 kB 866 kB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: packaging in /home/tomek/miniconda3/lib/python3.9/site-packages (from datasets) (23.0)\n",
"Collecting multiprocess\n",
" Downloading multiprocess-0.70.14-py39-none-any.whl (132 kB)\n",
"\u001b[K |████████████████████████████████| 132 kB 1.0 MB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: tqdm>=4.62.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from datasets) (4.64.0)\n",
"Requirement already satisfied: pandas in /home/tomek/miniconda3/lib/python3.9/site-packages (from datasets) (1.5.3)\n",
"Collecting fsspec[http]>=2021.11.1\n",
" Downloading fsspec-2023.3.0-py3-none-any.whl (145 kB)\n",
"\u001b[K |████████████████████████████████| 145 kB 1.0 MB/s eta 0:00:01\n",
"\u001b[?25hCollecting dill<0.3.7,>=0.3.0\n",
" Downloading dill-0.3.6-py3-none-any.whl (110 kB)\n",
"\u001b[K |████████████████████████████████| 110 kB 772 kB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: attrs>=17.3.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from aiohttp->datasets) (22.2.0)\n",
"Collecting async-timeout<5.0,>=4.0.0a3\n",
" Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB)\n",
"Collecting aiosignal>=1.1.2\n",
" Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)\n",
"Collecting yarl<2.0,>=1.0\n",
" Downloading yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (264 kB)\n",
"\u001b[K |████████████████████████████████| 264 kB 1.1 MB/s eta 0:00:01\n",
"\u001b[?25hCollecting frozenlist>=1.1.1\n",
" Downloading frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (158 kB)\n",
"\u001b[K |████████████████████████████████| 158 kB 1.2 MB/s eta 0:00:01\n",
"\u001b[?25hCollecting multidict<7.0,>=4.5\n",
" Downloading multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (114 kB)\n",
"\u001b[K |████████████████████████████████| 114 kB 997 kB/s eta 0:00:01\n",
"\u001b[?25hRequirement already satisfied: charset-normalizer<4.0,>=2.0 in /home/tomek/miniconda3/lib/python3.9/site-packages (from aiohttp->datasets) (2.0.4)\n",
"Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/tomek/miniconda3/lib/python3.9/site-packages (from huggingface-hub<1.0.0,>=0.2.0->datasets) (4.5.0)\n",
"Collecting filelock\n",
" Downloading filelock-3.9.1-py3-none-any.whl (9.7 kB)\n",
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from requests>=2.19.0->datasets) (1.26.9)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /home/tomek/miniconda3/lib/python3.9/site-packages (from requests>=2.19.0->datasets) (2022.12.7)\n",
"Requirement already satisfied: idna<4,>=2.5 in /home/tomek/miniconda3/lib/python3.9/site-packages (from requests>=2.19.0->datasets) (3.3)\n",
"Requirement already satisfied: python-dateutil>=2.8.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas->datasets) (2.8.2)\n",
"Requirement already satisfied: pytz>=2020.1 in /home/tomek/miniconda3/lib/python3.9/site-packages (from pandas->datasets) (2022.7.1)\n",
"Requirement already satisfied: six>=1.5 in /home/tomek/miniconda3/lib/python3.9/site-packages (from python-dateutil>=2.8.1->pandas->datasets) (1.16.0)\n",
"Installing collected packages: multidict, frozenlist, yarl, async-timeout, aiosignal, pyyaml, fsspec, filelock, dill, aiohttp, xxhash, responses, pyarrow, multiprocess, huggingface-hub, datasets\n",
"Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 datasets-2.10.1 dill-0.3.6 filelock-3.9.1 frozenlist-1.3.3 fsspec-2023.3.0 huggingface-hub-0.13.2 multidict-6.0.4 multiprocess-0.70.14 pyarrow-11.0.0 pyyaml-6.0 responses-0.18.0 xxhash-3.2.0 yarl-1.8.2\n"
]
}
],
"source": [
"#Instalujemy bibliotekę datasets\n",
"!python -m pip install datasets"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Found cached dataset csv (/home/tomek/.cache/huggingface/datasets/scikit-learn___csv/scikit-learn--iris-4e13227f45447466/0.0.0/6b34fb8fcf56f7c8ba51dc895bfa2bfbe43546f190a60fcf74bb5e8afdcc2317)\n",
"100%|██████████| 1/1 [00:00<00:00, 268.64it/s]\n"
]
}
],
"source": [
"from datasets import load_dataset\n",
"\n",
"iris_dataset = load_dataset(\"scikit-learn/iris\")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"DatasetDict({\n",
" train: Dataset({\n",
" features: ['Id', 'SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'Species'],\n",
" num_rows: 150\n",
" })\n",
"})"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"iris_dataset"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Dataset({\n",
" features: ['Id', 'SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'Species'],\n",
" num_rows: 150\n",
"})"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"iris_dataset[\"train\"]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"scrolled": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"{'Id': 1,\n",
" 'SepalLengthCm': 5.1,\n",
" 'SepalWidthCm': 3.5,\n",
" 'PetalLengthCm': 1.4,\n",
" 'PetalWidthCm': 0.2,\n",
" 'Species': 'Iris-setosa'}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"iris_dataset[\"train\"][0]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Id</th>\n",
" <th>SepalLengthCm</th>\n",
" <th>SepalWidthCm</th>\n",
" <th>PetalLengthCm</th>\n",
" <th>PetalWidthCm</th>\n",
" <th>Species</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>5.1</td>\n",
" <td>3.5</td>\n",
" <td>1.4</td>\n",
" <td>0.2</td>\n",
" <td>Iris-setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>4.9</td>\n",
" <td>3.0</td>\n",
" <td>1.4</td>\n",
" <td>0.2</td>\n",
" <td>Iris-setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>4.7</td>\n",
" <td>3.2</td>\n",
" <td>1.3</td>\n",
" <td>0.2</td>\n",
" <td>Iris-setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>4.6</td>\n",
" <td>3.1</td>\n",
" <td>1.5</td>\n",
" <td>0.2</td>\n",
" <td>Iris-setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>5.0</td>\n",
" <td>3.6</td>\n",
" <td>1.4</td>\n",
" <td>0.2</td>\n",
" <td>Iris-setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>145</th>\n",
" <td>146</td>\n",
" <td>6.7</td>\n",
" <td>3.0</td>\n",
" <td>5.2</td>\n",
" <td>2.3</td>\n",
" <td>Iris-virginica</td>\n",
" </tr>\n",
" <tr>\n",
" <th>146</th>\n",
" <td>147</td>\n",
" <td>6.3</td>\n",
" <td>2.5</td>\n",
" <td>5.0</td>\n",
" <td>1.9</td>\n",
" <td>Iris-virginica</td>\n",
" </tr>\n",
" <tr>\n",
" <th>147</th>\n",
" <td>148</td>\n",
" <td>6.5</td>\n",
" <td>3.0</td>\n",
" <td>5.2</td>\n",
" <td>2.0</td>\n",
" <td>Iris-virginica</td>\n",
" </tr>\n",
" <tr>\n",
" <th>148</th>\n",
" <td>149</td>\n",
" <td>6.2</td>\n",
" <td>3.4</td>\n",
" <td>5.4</td>\n",
" <td>2.3</td>\n",
" <td>Iris-virginica</td>\n",
" </tr>\n",
" <tr>\n",
" <th>149</th>\n",
" <td>150</td>\n",
" <td>5.9</td>\n",
" <td>3.0</td>\n",
" <td>5.1</td>\n",
" <td>1.8</td>\n",
" <td>Iris-virginica</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>150 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm \\\n",
"0 1 5.1 3.5 1.4 0.2 \n",
"1 2 4.9 3.0 1.4 0.2 \n",
"2 3 4.7 3.2 1.3 0.2 \n",
"3 4 4.6 3.1 1.5 0.2 \n",
"4 5 5.0 3.6 1.4 0.2 \n",
".. ... ... ... ... ... \n",
"145 146 6.7 3.0 5.2 2.3 \n",
"146 147 6.3 2.5 5.0 1.9 \n",
"147 148 6.5 3.0 5.2 2.0 \n",
"148 149 6.2 3.4 5.4 2.3 \n",
"149 150 5.9 3.0 5.1 1.8 \n",
"\n",
" Species \n",
"0 Iris-setosa \n",
"1 Iris-setosa \n",
"2 Iris-setosa \n",
"3 Iris-setosa \n",
"4 Iris-setosa \n",
".. ... \n",
"145 Iris-virginica \n",
"146 Iris-virginica \n",
"147 Iris-virginica \n",
"148 Iris-virginica \n",
"149 Iris-virginica \n",
"\n",
"[150 rows x 6 columns]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(iris_dataset[\"train\"])"
]
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": { "metadata": {
@ -1429,7 +1972,7 @@
" - Dane dźwiękowe: normalizacja natężenia, rozdzielczości, częstotliwości próbkowania, ilości kanałów\n", " - Dane dźwiękowe: normalizacja natężenia, rozdzielczości, częstotliwości próbkowania, ilości kanałów\n",
"- Poszerzanie (augumentacja) danych\n", "- Poszerzanie (augumentacja) danych\n",
" - Generowanie nowych przykładów przez wprowadzanie szumu/przekształceń na originalnych danych\n", " - Generowanie nowych przykładów przez wprowadzanie szumu/przekształceń na originalnych danych\n",
" - np. dodanie echa do nagrania dźwiękowego\n", " - np. dodanie echa do nagrania dźwiękowego, dodanie szumów do obrazka\n",
" - zmiana wartości cech o względnie małe, losowe wartości \n", " - zmiana wartości cech o względnie małe, losowe wartości \n",
"- Over/under-sampling\n", "- Over/under-sampling\n",
" - Algorymty uczące i metryki mogą być wrażliwe na niezbalansowane klasy w zbiorze\n", " - Algorymty uczące i metryki mogą być wrażliwe na niezbalansowane klasy w zbiorze\n",
@ -1448,11 +1991,20 @@
"# Zadanie [5pkt]\n", "# Zadanie [5pkt]\n",
"- Wybierz jeden z ogólnodostępnych zbiorów danych. Będziesz na nim pracował do końca roku (oczywiście, zbiór można zmienić w trakcie, ale będzie się to wiązało z powtarzeniem pewnych działań, co prawdwa niezbyt kosztownych, ale jednak).\n", "- Wybierz jeden z ogólnodostępnych zbiorów danych. Będziesz na nim pracował do końca roku (oczywiście, zbiór można zmienić w trakcie, ale będzie się to wiązało z powtarzeniem pewnych działań, co prawdwa niezbyt kosztownych, ale jednak).\n",
"- Zbiór powinien być:\n", "- Zbiór powinien być:\n",
" - nie za duży (max 10-20 MB)\n", " - nie za duży (max ~200 MB)\n",
" - nie za mały (np. IRIS jest za mały ;))\n", " - nie za mały (np. IRIS jest za mały ;))\n",
" - unikalny (każda osoba w grupie pracuje na innym zbiorze). W celu synchronizacji, wybrany przez siebie zbiór proszę zapisać tutaj: https://uam.sharepoint.com/:x:/s/2021SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11/EYhZK_aXp41BsIVS4K-L1V4B_vM2FjO5nJZMWv2QKXJolA?e=DKIS2O\n", " - unikalny (każda osoba w grupie pracuje na innym zbiorze). W celu synchronizacji, wybrany przez siebie zbiór proszę zapisać tutaj: https://uam.sharepoint.com/:x:/r/sites/2023SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11/Shared%20Documents/General/IUM-2023-zapisy.xlsx?d=w49d444e07d864d2997ef7d72c5a47da0&csf=1&web=1&e=4XgO7A\n",
" - najlepiej, żeby był to zbiór zawierający dane w formie tekstowej, mogący posłużyć do zadania klasyfikacji lub rergesji - na takim zbiorze będzie łatwiej pracować niż np. na zbiorze obrazów albo dźwięków. Dzięki temu będziesz się mogła/mógł skupić na istocie tych zajęć.\n", " - najlepiej, żeby był to zbiór zawierający dane w formie tekstowej, mogący posłużyć do zadania klasyfikacji lub rergesji - na takim zbiorze będzie łatwiej pracować niż np. na zbiorze obrazów albo dźwięków. Dzięki temu będziesz się mogła/mógł skupić na istocie tych zajęć."
"\n", ]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"- Napisz skrypt, który:\n", "- Napisz skrypt, który:\n",
"1. Pobierze wybrany przez Ciebie zbiór\n", "1. Pobierze wybrany przez Ciebie zbiór\n",
"2. Jeśli brak w zbiorze gotowego podziału na podzbiory train/dev/test, to dokona takiego podziału\n", "2. Jeśli brak w zbiorze gotowego podziału na podzbiory train/dev/test, to dokona takiego podziału\n",
@ -1466,7 +2018,7 @@
"- Skrypt możesz napisać w swoim ulubionym języku. Jedyne ograniczenie: ma działać pod Linuxem\n", "- Skrypt możesz napisać w swoim ulubionym języku. Jedyne ograniczenie: ma działać pod Linuxem\n",
"- Wygodnie będzie stworzyć zeszyt Jupyter w tym celu (choć nie jest to konieczne)\n", "- Wygodnie będzie stworzyć zeszyt Jupyter w tym celu (choć nie jest to konieczne)\n",
"- Stwórz na wydziałowym serwerze git (http://git.wmi.amu.edu.pl/) repozytorium \"ium_nrindeksu\" i umieść w nim stworzony skrypt\n", "- Stwórz na wydziałowym serwerze git (http://git.wmi.amu.edu.pl/) repozytorium \"ium_nrindeksu\" i umieść w nim stworzony skrypt\n",
"- Link do repozytorium wklej do arkusza ze zbiorami (https://uam.sharepoint.com/:x:/s/2021SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11/EYhZK_aXp41BsIVS4K-L1V4B_vM2FjO5nJZMWv2QKXJolA?e=DKIS2O)\n" "- Link do repozytorium wklej do arkusza ze zbiorami: https://uam.sharepoint.com/:x:/r/sites/2023SL06-DIUMUI0LABInynieriauczeniamaszynowego-Grupa11/Shared%20Documents/General/IUM-2023-zapisy.xlsx?d=w49d444e07d864d2997ef7d72c5a47da0&csf=1&web=1&e=4XgO7A"
] ]
}, },
{ {
@ -1503,7 +2055,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.12"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 3. <i>System ciągłej integracji na przykładzie Jenkins</i> [laboratoria]</h2> \n", "<h2> 3. <i>System ciągłej integracji na przykładzie Jenkins</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -27,7 +27,7 @@
}, },
"source": [ "source": [
"## Ciągła integracja \n", "## Ciągła integracja \n",
" - Jest to praktyka rozwoju projektów informatycznych polegająca na bardzo częstym włączaniu nowych zmian do głównej gałęzi (branch)\n", " - Jest to praktyka rozwoju projektów informatycznych polegająca na częstym włączaniu nowych zmian do głównej gałęzi (branch)\n",
" - Dzięki jej stosowaniu nie dochodzi do konfliktów przy łączeniu (mergowaniu) gałęzi rozwojowej (feature branch) z główną (master)\n", " - Dzięki jej stosowaniu nie dochodzi do konfliktów przy łączeniu (mergowaniu) gałęzi rozwojowej (feature branch) z główną (master)\n",
" - Żeby stosować tę technikę, zmiany muszą być za każdym razem przetestowane, we wspólnym środowisku, tak, żeby działały u innych deweloperów\n", " - Żeby stosować tę technikę, zmiany muszą być za każdym razem przetestowane, we wspólnym środowisku, tak, żeby działały u innych deweloperów\n",
" - Stąd narodziła się potrzeba stosowania systemów automatycznej ciągłej integracji\n", " - Stąd narodziła się potrzeba stosowania systemów automatycznej ciągłej integracji\n",
@ -104,7 +104,7 @@
" - **Job, aka. Pipleine (Projekt)** - podstawowa jednostka organizacji pracy wykonywanej przez Jenkinsa. \n", " - **Job, aka. Pipleine (Projekt)** - podstawowa jednostka organizacji pracy wykonywanej przez Jenkinsa. \n",
" - Posiada swoją konfigurację, która określa jakie polecenia będą wykonywane w jego ramach. \n", " - Posiada swoją konfigurację, która określa jakie polecenia będą wykonywane w jego ramach. \n",
" - Jeden pipeline może być wykonany wiele razy, za każdym razem tworząc nowe *Zadanie* (*Build*). \n", " - Jeden pipeline może być wykonany wiele razy, za każdym razem tworząc nowe *Zadanie* (*Build*). \n",
" Przykładowy pipeline: https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/\n", " Przykładowy pipeline: https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world/\n",
"<img src=\"IUM_03/pipeline.jpg\"/>\n" "<img src=\"IUM_03/pipeline.jpg\"/>\n"
] ]
}, },
@ -121,10 +121,10 @@
" - Unstable <img style=\"height: 30px;\" src=\"IUM_03/yellow.png\"/>\n", " - Unstable <img style=\"height: 30px;\" src=\"IUM_03/yellow.png\"/>\n",
" - Aborted <img style=\"height: 30px;\" src=\"IUM_03/aborted.png\"/>\n", " - Aborted <img style=\"height: 30px;\" src=\"IUM_03/aborted.png\"/>\n",
" - Failed <img style=\"height: 30px;\" src=\"IUM_03/red.png\"/>\n", " - Failed <img style=\"height: 30px;\" src=\"IUM_03/red.png\"/>\n",
" Np: https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/2/\n", " Np: https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world/2/\n",
" - Śledzenie wyników działania buildu jak i debugowanie ewentualnych problemów ułatwiają:\n", " - Śledzenie wyników działania buildu jak i debugowanie ewentualnych problemów ułatwiają:\n",
" - Wyjście z konsoli [(Console Output)](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/10/console) - tutaj widać logi wypisywane zarówno przez polecenia/funkcje Jenkinsowe jak i standardowe wyjście / wyjście błędów wykonywanych poleceń systemowych\n", " - Wyjście z konsoli [(Console Output)](https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world/10/console) - tutaj widać logi wypisywane zarówno przez polecenia/funkcje Jenkinsowe jak i standardowe wyjście / wyjście błędów wykonywanych poleceń systemowych\n",
" - Workspace - to katalog roboczy, w którym uruchamiane są polecenia. Tutaj zostaje sklonowane repozytorium (jeśli je klonujemy), tu wywoływane będę polecenia systemowe. Można je przeglądać z poziomu przeglądarki, np. [tutaj](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/1/execution/node/3/ws/)\n", " - Workspace - to katalog roboczy, w którym uruchamiane są polecenia. Tutaj zostaje sklonowane repozytorium (jeśli je klonujemy), tu wywoływane będę polecenia systemowe. Można je przeglądać z poziomu przeglądarki, np. [tutaj](https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world-scripted/1/execution/node/3/ws/)\n",
" - Każdy uruchomiony build można zatrzymać (abort) co powoduje zaprzestanie jego wykonywania\n", " - Każdy uruchomiony build można zatrzymać (abort) co powoduje zaprzestanie jego wykonywania\n",
" - Build zakończony można usunąć (np. jeśli przez przypadek wypisaliśmy na konsolę nasze hasło)" " - Build zakończony można usunąć (np. jeśli przez przypadek wypisaliśmy na konsolę nasze hasło)"
] ]
@ -160,7 +160,7 @@
"source": [ "source": [
"## Dokumentacja\n", "## Dokumentacja\n",
"- https://www.jenkins.io/doc/book/pipeline/\n", "- https://www.jenkins.io/doc/book/pipeline/\n",
"- \"Pipeline syntax\" na stronie każdego projektu, np: https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/pipeline-syntax/\n", "- \"Pipeline syntax\" na stronie każdego projektu, np: https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world/pipeline-syntax/\n",
"- Znaki zapytania <img style=\"height: 16px;\" src=\"IUM_03/help.png\"/> (W konfiguracji joba oraz w \"Pipeline Syntax\")" "- Znaki zapytania <img style=\"height: 16px;\" src=\"IUM_03/help.png\"/> (W konfiguracji joba oraz w \"Pipeline Syntax\")"
] ]
}, },
@ -203,7 +203,7 @@
}, },
"source": [ "source": [
"#### 1. Zaloguj się\n", "#### 1. Zaloguj się\n",
" - zaloguj się na https://tzietkiewicz.vm.wmi.amu.edu.pl:8080 za pomocą konta wydziałowego (jak w laboratoriach WMI)" " - zaloguj się na https://tzietkiewicz.vm.wmi.amu.edu.pl:8081 za pomocą konta wydziałowego (jak w laboratoriach WMI)"
] ]
}, },
{ {
@ -220,7 +220,7 @@
"\n", "\n",
" - Po kliknięciu \"Nowy projekt\" zobaczymy listę dostępnych rodzajów projektów. Nas interesuje projekt typu \"Pipeline\".\n", " - Po kliknięciu \"Nowy projekt\" zobaczymy listę dostępnych rodzajów projektów. Nas interesuje projekt typu \"Pipeline\".\n",
"\n", "\n",
" - Jako nazwę wpisz \"s123456-create-dataset\" (w miejsce 123456 proszę wstawić swój numer indeksu)\n", " - Jako nazwę wpisz \"z-s123456-create-dataset\" (w miejsce 123456 proszę wstawić swój numer indeksu)\n",
" " " "
] ]
}, },
@ -240,7 +240,7 @@
"\n", "\n",
" - Pierwszy z nich daje większe możliwości, drugi jest łatwiejszy, lepiej udokumentowany, ale ma mniejszą siłę ekpresji.\n", " - Pierwszy z nich daje większe możliwości, drugi jest łatwiejszy, lepiej udokumentowany, ale ma mniejszą siłę ekpresji.\n",
"\n", "\n",
" - Fragmenty kodu można również generować przy pomocy kreatora, dostępnego pod linkiem [Pipeline syntax](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/pipeline-syntax/) na stronie każdego projektu. Jest to bardzo przydatna funkcjonalność, nie tylko dla początkujących użytkowników\n", " - Fragmenty kodu można również generować przy pomocy kreatora, dostępnego pod linkiem [Pipeline syntax](https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world/pipeline-syntax/) na stronie każdego projektu. Jest to bardzo przydatna funkcjonalność, nie tylko dla początkujących użytkowników\n",
"\n", "\n",
" - Jenkinsfile może być wprowadzony bezpośrednio z poziomu przeglądarki, albo pobrany z repozytorium.\n", " - Jenkinsfile może być wprowadzony bezpośrednio z poziomu przeglądarki, albo pobrany z repozytorium.\n",
"\n", "\n",
@ -258,7 +258,7 @@
} }
}, },
"source": [ "source": [
"Przykładowy declarative Pipeline (https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/):\n", "Przykładowy declarative Pipeline (https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world/):\n",
"\n", "\n",
"```groovy\n", "```groovy\n",
"pipeline {\n", "pipeline {\n",
@ -301,7 +301,7 @@
} }
}, },
"source": [ "source": [
"Przykładowy scripted Pipeline (https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/):\n", "Przykładowy scripted Pipeline (https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world-scripted/):\n",
"\n", "\n",
"```groovy\n", "```groovy\n",
"node {\n", "node {\n",
@ -396,12 +396,13 @@
"export KAGGLE_USERNAME=datadinosaur\n", "export KAGGLE_USERNAME=datadinosaur\n",
"export KAGGLE_KEY=xxxxxxxxxxxxxx\n", "export KAGGLE_KEY=xxxxxxxxxxxxxx\n",
" ```\n", " ```\n",
" - Jenkins natomiast umożliwia utworzenie parametru typu password, którego wartość nie jest nigdzie zapisywana (wartości pozostałych parametrów są zapisywane w zakładce \"Parameters\" każdego build-a, np. [tutaj](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/1/parameters/)\n", " - Jenkins natomiast umożliwia utworzenie parametru typu password, którego wartość nie jest nigdzie zapisywana (wartości pozostałych parametrów są zapisywane w zakładce \"Parameters\" każdego build-a, np. [tutaj](https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/hello-world-scripted/1/parameters/)\n",
" - konstukcja `withEnv` w Jenkinsfile, pozwala wywołać wszystkie otoczone nią polecenia z wyeksportowanymi wartościami zmiennych systemowych. Pozwala to np. przekazać wartości parametrów zadania Jenkinsowego do shella (poleceń wywoływanych z `sh`). \n", " - konstukcja `withEnv` w Jenkinsfile, pozwala wywołać wszystkie otoczone nią polecenia z wyeksportowanymi wartościami zmiennych systemowych. Pozwala to np. przekazać wartości parametrów zadania Jenkinsowego do shella (poleceń wywoływanych z `sh`). \n",
" - Zwróć jednak uwagę na to, w jaki sposób odwołujesz się do zmiennej z hasłem: https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#string-interpolation !\n",
" - ten sam rezultat co przy wykorzystaniu `withEnv` można by osiągnąć wywołując: `sh \"KAGGLE_USERNAME=${params.KAGGLE_USERNAME} KAGGLE_KEY=${params.KAGGLE_KEY} kaggle datasets list`, ale ten pierwszy wydahe się bardziej elegancki\n", " - ten sam rezultat co przy wykorzystaniu `withEnv` można by osiągnąć wywołując: `sh \"KAGGLE_USERNAME=${params.KAGGLE_USERNAME} KAGGLE_KEY=${params.KAGGLE_KEY} kaggle datasets list`, ale ten pierwszy wydahe się bardziej elegancki\n",
" - Poniżej przykładowy projekt, który pokazuje jak wywołać Kaggle CLI używając hasła podanego w parametrach zadania:\n", " - Poniżej przykładowy projekt, który pokazuje jak wywołać Kaggle CLI używając hasła podanego w parametrach zadania:\n",
" \n", " \n",
"https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/kaggle-CLI-example/\n", "https://tzietkiewicz.vm.wmi.amu.edu.pl:8081/job/kaggle-CLI-example/\n",
"```groovy\n", "```groovy\n",
"node {\n", "node {\n",
" stage('Preparation') { \n", " stage('Preparation') { \n",
@ -459,7 +460,7 @@
} }
}, },
"source": [ "source": [
"#### 6. Statystki [5 pkt]\n", "### 6. Statystki [5 pkt]\n",
"Stwórz projekt (job) s123456-dataset-stats, który zrealizuje następujące kroki:\n", "Stwórz projekt (job) s123456-dataset-stats, który zrealizuje następujące kroki:\n",
" 1. Sklonuje repozytorium git \n", " 1. Sklonuje repozytorium git \n",
" 2. Skopiuje zarchiwizowane pliki ze zbiorem danych z artefaktów projektu s123456-create-dataset\n", " 2. Skopiuje zarchiwizowane pliki ze zbiorem danych z artefaktów projektu s123456-create-dataset\n",
@ -508,7 +509,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.16"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 4. <i>Konteneryzacja</i> [laboratoria]</h2> \n", "<h2> 4. <i>Konteneryzacja</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2022)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -51,13 +51,23 @@
" - rozwój,\n", " - rozwój,\n",
" - uruchamianie\n", " - uruchamianie\n",
" - i dostarczanie\n", " - i dostarczanie\n",
"aplikacji.\n", "aplikacji."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"- Konteneryzacja to nie tylko Docker:\n", "- Konteneryzacja to nie tylko Docker:\n",
" - chroot\n", " - chroot\n",
" - Solaris Containers\n", " - Solaris Containers\n",
" - LXC (Linux Containers)\n", " - LXC (Linux Containers)\n",
" - OpenVZ\n", " - OpenVZ\n",
" - Windows containers\n" " - Windows containers"
] ]
}, },
{ {
@ -117,7 +127,7 @@
} }
}, },
"source": [ "source": [
"## 1.3 Podstawowe polecenia\n", "### 1.3 Podstawowe polecenia\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 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",
@ -125,16 +135,37 @@
"\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",
" Port 8080 konenera zostanie powiązany z portem 8080 hosta. Dzięki temu będziemy mogli w przeglądarce dostać się do Jenkinsa pod adresem http://localhost:8080\n", " Port 8080 konenera zostanie powiązany z portem 8080 hosta. Dzięki temu będziemy mogli w przeglądarce dostać się do Jenkinsa pod adresem http://localhost:8080"
" Ważne: po zatrzymaniu kontenera \n", ]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"- ```docker build [OPTIONS] PATH | URL | -``` - buduje obraz na podstawie pliku Dockerfile i kontekstu (plików dostępnych podczas budowania). Przykład:<br>\n", "- ```docker build [OPTIONS] PATH | URL | -``` - buduje obraz na podstawie pliku Dockerfile i kontekstu (plików dostępnych podczas budowania). Przykład:<br>\n",
" - ```docker build -t tzietkiewicz/helloworld:1.0 .```<br>\n", " - ```docker build -t tzietkiewicz/helloworld:1.0 .```<br>\n",
" buduje obraz przekazując bieżący katalog (`.`) jako kontekst i korzystając z pliku Dockerfile znajdującego się tamże. Obraz zostanie otagowany (`-t`) tagiem `tzietkiewicz/helloworld` z wersją `1.0`\n", " buduje obraz przekazując bieżący katalog (`.`) jako kontekst i korzystając z pliku Dockerfile znajdującego się tamże. Obraz zostanie otagowany (`-t`) tagiem `tzietkiewicz/helloworld` z wersją `1.0`"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"- ```docker images``` - listuje dostępne lokalnie obrazy\n", "- ```docker images``` - listuje dostępne lokalnie obrazy\n",
"- ```docker ps``` - listuje uruchomione/zatrzymane kontenery\n", "- ```docker ps``` - listuje uruchomione/zatrzymane kontenery\n",
"- ```docker stop CONTAINER_ID``` - zatrzymuje kontener. Uruchomione w nim procesy zostają wyłączone (`SIGTERM` -> `SIGKILL`)\n", "- ```docker stop CONTAINER_ID``` - zatrzymuje kontener. Uruchomione w nim procesy zostają wyłączone (`SIGTERM` -> `SIGKILL`)\n",
"- ```docker start CONTAINER_ID``` - uruchamia ponownie kontener\n", "- ```docker start CONTAINER_ID``` - uruchamia ponownie kontener\n",
"- ```docker system prune``` - usuwa nieużywane obrazy i kontenery, zazwyczaj zwalniając sporo miejsca na dysku" "- ```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 exec``` - "
] ]
}, },
{ {
@ -149,7 +180,9 @@
" - Poprzez terminal\n", " - Poprzez terminal\n",
" - 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: podmontowanie katalogów hosta w kontenerze poprzez flagę `-v` [dokumentacja](https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only)" " - Przez system plików: \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/"
] ]
}, },
{ {
@ -215,7 +248,7 @@
} }
}, },
"source": [ "source": [
"Przykładowy Dockerfile:\n", "### Przykładowy Dockerfile:\n",
"```Dockerfile\n", "```Dockerfile\n",
"# Nasz obraz będzie dzidziczył 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",
@ -425,8 +458,8 @@
}, },
"source": [ "source": [
"### 2.1 Jenkins - Terminologia (https://www.jenkins.io/doc/book/glossary/):\n", "### 2.1 Jenkins - Terminologia (https://www.jenkins.io/doc/book/glossary/):\n",
" - **Agent**: An agent is typically a machine, or container, which connects to a Jenkins controller and executes tasks when directed by the controller\n",
" - **Controller**: The central, coordinating process which stores configuration, loads plugins, and renders the various user interfaces for Jenkins\n", " - **Controller**: The central, coordinating process which stores configuration, loads plugins, and renders the various user interfaces for Jenkins\n",
" - **Agent**: An agent is typically a machine, or container, which connects to a Jenkins controller and executes tasks when directed by the controller\n",
" - **Master**: A deprecated term, synonymous with Controller.\n", " - **Master**: A deprecated term, synonymous with Controller.\n",
" - **Node**: A machine which is part of the Jenkins environment and capable of executing Pipelines or Projects. Both the Controller and Agents are considered to be Nodes.\n", " - **Node**: A machine which is part of the Jenkins environment and capable of executing Pipelines or Projects. Both the Controller and Agents are considered to be Nodes.\n",
" - **Executor**: A slot for execution of work defined by a Pipeline or Project on a Node. A Node may have zero or more Executors configured which corresponds to how many concurrent Projects or Pipelines are able to execute on that Node." " - **Executor**: A slot for execution of work defined by a Pipeline or Project on a Node. A Node may have zero or more Executors configured which corresponds to how many concurrent Projects or Pipelines are able to execute on that Node."
@ -476,7 +509,9 @@
" ## 2.2 Docker w Jenkins\n", " ## 2.2 Docker w Jenkins\n",
" <img style=\"height: 100px;\" src=\"IUM_04/docker-jenkins.png\"/></b>\n", " <img style=\"height: 100px;\" src=\"IUM_04/docker-jenkins.png\"/></b>\n",
"\n", "\n",
" \n", " - Jenkins posiada wygodną intergrację z Dockerem \n",
" - Umożliwia ona uruchamianie kroków (steps) wewnątrz kontera\n",
" - Obrazy mogą być automatycznie pobrane albo zbudowane na podstawie Dockerfile\n",
" - Więcej informacji: https://www.jenkins.io/doc/book/pipeline/docker/" " - Więcej informacji: https://www.jenkins.io/doc/book/pipeline/docker/"
] ]
}, },
@ -501,7 +536,7 @@
" }\n", " }\n",
"```\n", "```\n",
" - Declarative:\n", " - Declarative:\n",
" ```groovy\n", " ```groovy\n",
" pipeline {\n", " pipeline {\n",
" agent {\n", " agent {\n",
" docker { image 'ubuntu:latest' }\n", " docker { image 'ubuntu:latest' }\n",
@ -542,7 +577,7 @@
" }\n", " }\n",
"```\n", "```\n",
" - Declarative:\n", " - Declarative:\n",
" ```groovy\n", " ```groovy\n",
" pipeline {\n", " pipeline {\n",
" agent { \n", " agent { \n",
" dockerfile true \n", " dockerfile true \n",
@ -571,10 +606,7 @@
" Skorzystaj z mechanizmu tworzącego kontener bezpośrednio na Jenkinsie wprost z pliku Dockerfile.\n", " Skorzystaj z mechanizmu tworzącego kontener bezpośrednio na Jenkinsie wprost z pliku Dockerfile.\n",
"\n", "\n",
"2. Zmodyfikuj stworzony na poprzednich (3.) zajęciach Jenkinsfile opisujący pipeline \"s123456-dataset-stats\" tak, żeby wywoływać w nim skrypty stworzone na zajęciach 2., w środku kontenera stworzonego w zadaniu 2.<br>\n", "2. Zmodyfikuj stworzony na poprzednich (3.) zajęciach Jenkinsfile opisujący pipeline \"s123456-dataset-stats\" tak, żeby wywoływać w nim skrypty stworzone na zajęciach 2., w środku kontenera stworzonego w zadaniu 2.<br>\n",
" Skorzystaj z mechanizmu wykorzystującego gotowy obraz (lokalny, albo ściągany z Docker Hub)\n", " Skorzystaj z mechanizmu wykorzystującego gotowy obraz (ściągany z Docker Hub)"
"\n",
"### Termin\n",
"Termin na oddanie obu zadań (zadanie 2. i zadanie 3.): 11 IV"
] ]
} }
], ],
@ -598,7 +630,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.12"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -12,7 +12,7 @@
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 5. <i>Biblioteki Deep Learning</i> [laboratoria]</h2> \n", "<h2> 5. <i>Biblioteki Deep Learning</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2022)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -294,13 +294,14 @@
"source": [ "source": [
"## Zadanie [22 pkt.]\n", "## Zadanie [22 pkt.]\n",
"\n", "\n",
"Termin: 2 tygodnie (25 IV)\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 tutotoriali 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 z pliku [2 pkt.]\n", " - wczytaj dane trenujące z pliku [2 pkt.]\n",
" - wytrenuj na nich model [8 pkt.]\n", " - wytrenuj na nich model [6 pkt.]\n",
" - przy jego pomocy dokonaj klasyfikacji/regresji na danych ze zbioru testującego [8 pkt.]\n", " - zapisz model do pliku [2 pkt.]\n",
" - zapisz wyniki zwrócone przez model do pliku [2 pkt.]<br>\n", " - w osobnym skypcie, przy pomocy zapisanego wcześniej modelu, dokonaj predykcji na danych ze zbioru testującego [8 pkt.]\n",
" - zapisz wyniki predykcji zwrócone przez model do pliku (nie metryki, tylko wyniki predykcji, czyli te informacje, które model miał przewidzieć) [2 pkt.]<br>\n",
" Uwagi:\n", " Uwagi:\n",
" - wyniki nie są najważniejsze - o ile twój model nie zwraca losowych danych ;)\n", " - wyniki nie są najważniejsze - o ile twój model nie zwraca losowych danych ;)\n",
" - nie musisz wnikać głęboko w szczegóły trenowania modelu i inferencji. W tym zadaniu chodzi o poznanie API i praktycznych aspektów\n", " - nie musisz wnikać głęboko w szczegóły trenowania modelu i inferencji. W tym zadaniu chodzi o poznanie API i praktycznych aspektów\n",
@ -331,7 +332,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.12"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

View File

@ -8,11 +8,11 @@
} }
}, },
"source": [ "source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", "## ![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 6. <i>Jenkins, część 2.</i> [laboratoria]</h2> \n", "<h2> 6. <i>Jenkins, część 2.</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2022)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -172,7 +172,7 @@
"emailext body: 'Test Message', subject: 'Test Subject', to: 'test@example.com'\n", "emailext body: 'Test Message', subject: 'Test Subject', to: 'test@example.com'\n",
"```\n", "```\n",
"- Microsoft Teams ma swój własny plugin do powiadomień (https://plugins.jenkins.io/Office-365-Connector/), ale jest on zablokowany od strony Teams przez administratorów\n", "- Microsoft Teams ma swój własny plugin do powiadomień (https://plugins.jenkins.io/Office-365-Connector/), ale jest on zablokowany od strony Teams przez administratorów\n",
"- Na szczęście, kanały Teams mają swój adres email. Adres stworzonego przeze mnie kanału \"Powiadomienia z Jenkins\" na naszej grupie zajęciowej: 26ab8f35.uam.onmicrosoft.com@emea.teams.ms\n", "- Na szczęście, kanały Teams mają swój adres email. Adres stworzonego przeze mnie kanału [\"IUM powiadomienia z Jenkins\"](https://teams.microsoft.com/l/channel/19%3a503542f4a8b449f79ba1bd42348c4da1%40thread.tacv2/IUM%2520powiadomienia%2520z%2520Jenkins?groupId=39ed4bde-b916-4da3-921c-92d3c25f1f04&tenantId=73689ee1-b42f-4e25-a5f6-66d1f29bc092) na naszej grupie zajęciowej: e19191c5.uam.onmicrosoft.com@emea.teams.ms\n",
"- Wysłanie na niego wiadomości email spowoduje pojawienie się jej na tym kanale" "- Wysłanie na niego wiadomości email spowoduje pojawienie się jej na tym kanale"
] ]
}, },
@ -184,12 +184,12 @@
} }
}, },
"source": [ "source": [
"## Zadanie 1 [5 pkt] (termin: 2 V 2021)\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. [1 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. 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", "<!--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]" "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]"
] ]
}, },
@ -201,24 +201,30 @@
} }
}, },
"source": [ "source": [
"## Zadanie 2 [15 pkt] (termin: 2 V 2021)\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 trenującego [1pkt]\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 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), zapisaniu metryk(i( do pliku i zarchiwizowaniu go [3 pkt]\n", "2. Ewaluacja polega na:\n",
" - skopiowanie modelu z artefaktu z projektu training\n",
" - wczytaniu tego modelu\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",
" - zapisaniu metryk do pliku\n",
" - zarchiwizowaniu go\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). [3 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",
" - [Matplotlib](https://matplotlib.org/) - biblioteka pythonowa - w tym przypadku archiwizuj wygenerowany obrazek z wykresem\n", " - [Matplotlib](https://matplotlib.org/) - biblioteka pythonowa - w tym przypadku archiwizuj wygenerowany obrazek z wykresem\n",
" - [Gnuplot](http://www.gnuplot.info/) - w tym przypadku archiwizuj wygenerowany obrazek z wykresem\n", " - [Gnuplot](http://www.gnuplot.info/) - w tym przypadku archiwizuj wygenerowany obrazek z wykresem\n",
"5. Projekt powinien odpalać się automatycznie po zakończonym trenowaniu (s123456-training) i kopiować model z artefaktów. Zauważ, że żeby odpalony projekt (s123456-evaluation) skopiował artefakty z odpowiedniego brancha (tego, który go odpalił), projekt s123456-evaluation musi być wywołany przez s123456-training z odpowiednią wartością parametru branch (patrz punkt 7.) [2pkt]\n", "5. Projekt powinien odpalać się automatycznie po zakończonym trenowaniu (s123456-training) i kopiować model z artefaktów. Zauważ, że żeby odpalony projekt (s123456-evaluation) skopiował artefakty z odpowiedniego brancha (tego, który go odpalił), projekt s123456-evaluation musi być wywołany przez s123456-training z odpowiednią wartością parametru branch (patrz punkt 7.) [1 pkt]\n",
"6. Dane testujące powinny być skopiowane z projektu s123456-create-dataset [1pkt]\n", "6. Dane testujące powinny być skopiowane z projektu s123456-create-dataset [1pkt]\n",
"7. Dodaj parametry umożliwiające wybór:\n", "7. Dodaj parametry umożliwiające wybór:\n",
" - gałęzi (branch) projektu s123456-training z której ma być skopiowany model. Można by tutaj użyć prostego parametru typu String, ale użyj łatwiejszego (w użytkowaniu) parametru typu \"Git parameter\" (patrz wyżej)[1 pkt]\n", " - gałęzi (branch) projektu s123456-training z której ma być skopiowany model. Można by tutaj użyć prostego parametru typu String, ale użyj łatwiejszego (w użytkowaniu) parametru typu \"Git parameter\" (patrz wyżej)[1 pkt]\n",
" - numeru builda projektu s123456-training (\"Build selector for Copy artifact\", patrz zajęcia 3.) [1pkt]\n", " - numeru builda projektu s123456-training (\"Build selector for Copy artifact\", patrz zajęcia 3.) [1pkt]"
"8. Ewaluacja modelu potrafi zająć dużo czasu. Sprawdzanie co 10 minut, czy już się zakończyła, to zły pomysł. Dodaj powiadomienie o zakończonej ewaluacji zawierające status builda oraz wynik ewaluacji (wartość obliczonej metryki) [1 pkt]"
] ]
} }
], ],
@ -242,7 +248,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.16"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

File diff suppressed because it is too large Load Diff

9
IUM_07/Dockerfile Normal file
View File

@ -0,0 +1,9 @@
FROM ubuntu:latest
RUN apt update && apt install -y \
git \
python3-pip \
python3
RUN python3 -m pip install sacred pymongo

13
IUM_07/Jenkinsfile vendored Normal file
View File

@ -0,0 +1,13 @@
node {
checkout scm
//Pierwszy argument to tag, który zostania nadany zbudowanemu obrazowi
//Jeśli chcemy użyć Dockerfile z innej ścieżki niż ./Dockerfile, możemy ją podać jako drugi argument
def testImage = docker.build("sacred_pymongo", "./IUM_07/")
//Wszystkie polecenia poniżej wykonają się w kontenerze, z podmontowanym Workspace Jenkinsa
testImage.inside {
dir ("IUM_07"){
sh 'python3 mongo_observer.py'
}
}
}

39
IUM_07/mongo_observer.py Normal file
View File

@ -0,0 +1,39 @@
from sacred.observers import MongoObserver
from sacred import Experiment
import random
import time
ex = Experiment("sacred_scopes", interactive=True)
ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@172.17.0.1:27017', db_name='sacred'))
#ex.observers.append(MongoObserver(url='mongodb://mongo_user:mongo_password@localhost:27017',
# db_name='sacred')) # Tutaj podajemy dane uwierzytelniające i nazwę bazy skonfigurowane w pliku .env podczas uruchamiania bazy.
# W przypadku instancji na Jenkinsie url będzie wyglądał następująco: mongodb://mongo_user:mongo_password_IUM_2021@localhost:27017
@ex.config
def my_config():
recipient = "Świecie"
greeting = "Witaj"
@ex.capture
def prepare_message(recipient, greeting):
return "{0} {1}!".format(greeting, recipient)
@ex.main
def my_main(recipient, greeting, _run):
print(prepare_message()) ## Nie musimy przekazywać wartości
counter = 0
while counter < 20:
counter+=1
value = counter
ms_to_wait = random.randint(5, 5000)
time.sleep(ms_to_wait/1000)
noise = 1.0 + 0.1 * (random.randint(0, 10) - 5)
# This will add an entry for training.loss metric in every second iteration.
# The resulting sequence of steps for training.loss will be 0, 2, 4, ...
if counter % 2 == 0:
_run.log_scalar("training.loss", value * 1.5 * noise, counter)
# Implicit step counter (0, 1, 2, 3, ...)
# incremented with each call for training.accuracy:
_run.log_scalar("training.accuracy", value * 2 * noise)
ex.run()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -12,8 +12,8 @@
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n", "<div class=\"alert alert-block alert-info\">\n",
"<h1> Inżynieria uczenia maszynowego </h1>\n", "<h1> Inżynieria uczenia maszynowego </h1>\n",
"<h2> 11. <i>Github actions i CML</i> [laboratoria]</h2> \n", "<h2> 11. <i>Github actions</i> [laboratoria]</h2> \n",
"<h3> Tomasz Ziętkiewicz (2021)</h3>\n", "<h3> Tomasz Ziętkiewicz (2023)</h3>\n",
"</div>\n", "</div>\n",
"\n", "\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
@ -70,13 +70,13 @@
"source": [ "source": [
"### Terminologia Github Actions\n", "### Terminologia Github Actions\n",
" - *Workflow* - workflow odpowiada \"Pipeline\" z Jenkinsa.\n", " - *Workflow* - workflow odpowiada \"Pipeline\" z Jenkinsa.\n",
" - *Job* - workflow składa się z jednego lub kilku \"jobs\". Każdy z nich może być wykonywany równolegle na innej maszynie (patrz \"runner\")\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* - 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* - odpowiednik \"Stage\" z Jenkinsa - służu do grupowania \"Actions\"\n", " - *Step* - odpowiednik \"Stage\" z Jenkinsa - służu do grupowania \"Actions\"\n",
" - *Action* - odpowiednik \"Step\" z Jenkinsa - pojedyncze polecenie do wykonania, np. dodanie komentarze do Pull requesta, 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* - 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* - nasz własny serwer, z zinstalowaną aplikacją [Github actions runner](https://github.com/actions/runner)\n", " - *Self-hosted runner* - nasz własny serwer, z zinstalowaną aplikacją [Github actions runner](https://github.com/actions/runner)"
" - *Event* - zdażenie, które odapala (\"triggers\") uruchomienie 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)"
] ]
}, },
{ {
@ -89,7 +89,7 @@
}, },
"source": [ "source": [
"### Definicja workflow\n", "### Definicja workflow\n",
" - Workflow definiuje się w plikach YAM(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` [opcjonalna] - 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",
@ -103,33 +103,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 4,
"id": "955585a9",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/home/tomek/AITech/repo/aitech-ium-private/IUM_11\n",
"Initialized empty Git repository in /home/tomek/AITech/repo/aitech-ium-private/IUM_11/github-actions-hello/.git/\r\n"
]
}
],
"source": [
"%cd IUM_11\n",
"!mkdir github-actions-hello;\\\n",
"cd github-actions-hello;\\\n",
"git init"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f4916c1f", "id": "f4916c1f",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -141,18 +115,53 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"/home/tomek/AITech/repo/aitech-ium-private/IUM_11/github-actions-hello\n" "/home/tomek/repos/aitech-ium/IUM_11/github-actions-hello\n"
] ]
} }
], ],
"source": [ "source": [
"%cd github-actions-hello\n", "!mkdir -p IUM_11/github-actions-hello\n",
"%cd IUM_11/github-actions-hello\n",
"!mkdir -p .github/workflows" "!mkdir -p .github/workflows"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 6, "execution_count": 19,
"id": "88ce689f",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Reinitialized existing Git repository in /home/tomek/repos/aitech-ium/IUM_11/github-actions-hello/.git/\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": [
"!git init\n",
"!git branch -M main\n",
"!git remote add origin git@github.com:TomekZet/ium-ga-hello.git\n",
"!git push -u origin main"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "dde8d432", "id": "dde8d432",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -164,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"
] ]
} }
], ],
@ -185,6 +194,164 @@
" - run: python3 --version" " - run: python3 --version"
] ]
}, },
{
"cell_type": "code",
"execution_count": 22,
"id": "ff1e011e",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"On branch main\n",
"Your branch is up to date with 'origin/main'.\n",
"\n",
"nothing to commit, working tree clean\n",
"Everything up-to-date\n"
]
}
],
"source": [
"!git add .github/workflows/workflow.yml\n",
"!git commit -m \"Github Actions Workflow\"\n",
"!git push"
]
},
{
"cell_type": "markdown",
"id": "3e237076",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Zakładka actions na stronie repozytorium:\n",
"https://github.com/TomekZet/ium-ga-hello/actions"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "32701383",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"total 16\r\n",
"drwxr-sr-x 2 tomek tomek 4096 May 17 11:51 .\r\n",
"drwxr-sr-x 3 tomek tomek 4096 May 17 11:51 ..\r\n",
"-rw-r--r-- 1 tomek tomek 456 May 17 11:51 parametrized.yml\r\n",
"-rw-r--r-- 1 tomek tomek 305 May 17 12:01 workflow.yml\r\n"
]
}
],
"source": [
"!ls -al .github/workflows"
]
},
{
"cell_type": "markdown",
"id": "1c01acb5",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Ręczne wywoływanie\n",
"Workflow można również wywołać ręcznie, podając parametry.\n",
"Więcej informacji np. tutaj: https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "a7250bf7",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting .github/workflows/parametrized.yml\n"
]
}
],
"source": [
"%%writefile .github/workflows/parametrized.yml\n",
"name: github-actions-hello-parametrized\n",
"on: \n",
" workflow_dispatch:\n",
" inputs:\n",
" input_text:\n",
" description: 'Text to display' \n",
" required: true\n",
" default: 'Hello World'\n",
"jobs:\n",
" hello-job:\n",
" runs-on: ubuntu-latest\n",
" steps:\n",
" - name: Checkout repo\n",
" uses: actions/checkout@v2\n",
" - name: Install dependencies\n",
" run:\n",
" sudo apt update;\n",
" sudo apt install -y figlet\n",
" - name: Write\n",
" run:\n",
" figlet \"${{ github.event.inputs.input_text }}\""
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "36ddaac0",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[main a98938d] just dispatch\n",
" 1 file changed, 6 deletions(-)\n",
"Enumerating objects: 9, done.\n",
"Counting objects: 100% (9/9), done.\n",
"Delta compression using up to 4 threads\n",
"Compressing objects: 100% (3/3), done.\n",
"Writing objects: 100% (5/5), 411 bytes | 411.00 KiB/s, done.\n",
"Total 5 (delta 1), reused 0 (delta 0), pack-reused 0\n",
"remote: Resolving deltas: 100% (1/1), completed with 1 local object.\u001b[K\n",
"To github.com:TomekZet/ium-ga-hello.git\n",
" 6c4a361..a98938d main -> main\n"
]
}
],
"source": [
"!git add -u .github/workflows\n",
"!git commit -m \"just dispatch\"\n",
"!git push"
]
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "ed780dea", "id": "ed780dea",
@ -219,6 +386,339 @@
" - z [Github Marketplace](https://github.com/marketplace?type=actions)" " - z [Github Marketplace](https://github.com/marketplace?type=actions)"
] ]
}, },
{
"cell_type": "markdown",
"id": "a764cc0d",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Akcje wykonywane w kontenerze Docker\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"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "ff4dab8c",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting action.yml\n"
]
}
],
"source": [
"%%writefile action.yml\n",
"name: 'Hello World'\n",
"description: 'Greet someone and record the time'\n",
"inputs:\n",
" who-to-greet: # id of input\n",
" description: 'Who to greet'\n",
" required: true\n",
" default: 'World'\n",
"outputs:\n",
" time: # id of output\n",
" description: 'The time we greeted you'\n",
"runs:\n",
" using: 'docker'\n",
" image: 'Dockerfile'\n",
" args:\n",
" - ${{ inputs.who-to-greet }}"
]
},
{
"cell_type": "code",
"execution_count": 80,
"id": "f1aaff7c",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting Dockerfile\n"
]
}
],
"source": [
"%%writefile Dockerfile\n",
"# Container image that runs your code\n",
"FROM ubuntu:latest\n",
" \n",
"RUN apt update && apt install -y figlet\n",
"\n",
"# Copies your code file from your action repository to the filesystem path `/` of the container\n",
"COPY entrypoint.sh /entrypoint.sh\n",
"\n",
"VOLUME /github/workspace/\n",
"\n",
"WORKDIR /github/workspace/\n",
"\n",
"# Code file to execute when the docker container starts up (`entrypoint.sh`)\n",
"ENTRYPOINT [\"/entrypoint.sh\"]"
]
},
{
"cell_type": "code",
"execution_count": 84,
"id": "7f778025",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting entrypoint.sh\n"
]
}
],
"source": [
"%%writefile entrypoint.sh\n",
"#!/bin/sh -l\n",
"\n",
"figlet \"Hello $1\" | tee figlet.txt\n",
"echo \"Entrypoint invoked in: $PWD\"\n",
"readlink -f figlet.txt\n",
"time=$(date)\n",
"echo \"time=$time\" >> $GITHUB_OUTPUT"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "911975de",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"!chmod +x entrypoint.sh"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "483e0498",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting .github/workflows/docker.yml\n"
]
}
],
"source": [
"%%writefile .github/workflows/docker.yml\n",
"name: github-actions-hello-docker\n",
"on: \n",
" workflow_dispatch:\n",
" inputs:\n",
" input_text:\n",
" description: 'Who to greet' \n",
" required: true\n",
" default: 'World'\n",
"jobs:\n",
" hello-job:\n",
" runs-on: ubuntu-latest\n",
" steps:\n",
" - name: Checkout repo\n",
" uses: actions/checkout@v2\n",
" - name: Use docker action\n",
" id: hello\n",
" uses: ./\n",
" with:\n",
" who-to-greet: \"${{ github.event.inputs.input_text }}\"\n",
" # Use the output from the `hello` step\n",
" - name: Get the output time\n",
" run: echo \"The time was ${{ steps.hello.outputs.time }}\"\n",
" \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "bc24dff3",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[main 22a5094] Fix path\n",
" 1 file changed, 1 insertion(+)\n",
"Enumerating objects: 9, done.\n",
"Counting objects: 100% (9/9), done.\n",
"Delta compression using up to 4 threads\n",
"Compressing objects: 100% (5/5), done.\n",
"Writing objects: 100% (5/5), 570 bytes | 570.00 KiB/s, done.\n",
"Total 5 (delta 1), reused 0 (delta 0), pack-reused 0\n",
"remote: Resolving deltas: 100% (1/1), completed with 1 local object.\u001b[K\n",
"To github.com:TomekZet/ium-ga-hello.git\n",
" 97c7272..22a5094 main -> main\n"
]
}
],
"source": [
"!git add .github entrypoint.sh Dockerfile\n",
"!git commit -m \"Fix path\"\n",
"!git push"
]
},
{
"cell_type": "markdown",
"id": "12af9d1b",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Archiwizowanie artefaktów\n",
"https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts\n",
"\n",
"Do archiwizowania artefaktów służy akcja \"upload-artifact\":\n",
"\n",
"```yaml\n",
" - name: Archive artifacts\n",
" uses: actions/upload-artifact@v3\n",
" with:\n",
" name: figlet-output\n",
" path: figlet.txt\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "245f7c8a",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting .github/workflows/docker-artifact.yml\n"
]
}
],
"source": [
"%%writefile .github/workflows/docker-artifact.yml\n",
"name: github-actions-hello-docker-artifact\n",
"on: \n",
" workflow_dispatch:\n",
" inputs:\n",
" input_text:\n",
" description: 'Who to greet' \n",
" required: true\n",
" default: 'World'\n",
"jobs:\n",
" hello-job:\n",
" name: \"Do all the hard stuff\"\n",
" runs-on: ubuntu-latest\n",
" steps:\n",
" - name: Checkout repo\n",
" uses: actions/checkout@v2\n",
" - name: Use docker action\n",
" id: hello\n",
" uses: ./\n",
" with:\n",
" who-to-greet: \"${{ github.event.inputs.input_text }}\"\n",
" # Use the output from the `hello` step\n",
" - name: Get the output time\n",
" run: echo \"The time was ${{ steps.hello.outputs.time }}\" > time.txt\n",
" - name: Archive artifacts\n",
" uses: actions/upload-artifact@v3\n",
" with:\n",
" name: figlet-output\n",
" path: |\n",
" figlet.txt\n",
" time.txt\n",
" publish:\n",
" name: \"Publish as github comment\"\n",
" runs-on: ubuntu-latest\n",
" needs: hello-job\n",
" steps:\n",
" - uses: actions/checkout@v3\n",
" #We need to download the artifact first, jobs do not share workflow files\n",
" - name: get-artifact \n",
" uses: actions/download-artifact@v3\n",
" with:\n",
" name: figlet-output\n",
" - name: display_artifact_contents\n",
" run:\n",
" cat time.txt ; tr ' ' '#' < figlet.txt\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "47e301f9",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[main 5a40228] Archive in one job, use in other\n",
" 1 file changed, 1 insertion(+)\n",
"Enumerating objects: 9, done.\n",
"Counting objects: 100% (9/9), done.\n",
"Delta compression using up to 4 threads\n",
"Compressing objects: 100% (5/5), done.\n",
"Writing objects: 100% (5/5), 622 bytes | 622.00 KiB/s, done.\n",
"Total 5 (delta 2), reused 0 (delta 0), pack-reused 0\n",
"remote: Resolving deltas: 100% (2/2), completed with 2 local objects.\u001b[K\n",
"To github.com:TomekZet/ium-ga-hello.git\n",
" 4df6dc0..5a40228 main -> main\n"
]
}
],
"source": [
"!git add -u\n",
"!git commit -m \"Archive in one job, use in other\"\n",
"!git push"
]
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "805622e8", "id": "805622e8",
@ -547,19 +1047,23 @@
} }
}, },
"source": [ "source": [
"## Zadania\n", "## Zadania [20 pkt] (termin: 24.05.2023)\n",
"1. Utwórz konto na 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\" 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", "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",
"2. Stwórz prosty Github workflow wykorzystujący akcje CML, który:\n", "2. Stwórz prosty Github workflow który:\n",
" - zrobi checkout Twojego repozytorium [2 pkt]\n", " - zrobi checkout Twojego repozytorium [1 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 koplikacje, 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", " - ś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",
" - dokona trenowania i ewaluacji [8 pkt]\n", " - będzie wywoływalny przez \"Workflow dispatch\" z parametrami trenowania [2 pkt]\n",
" - wyniki opublikuje za pomocą `cml-send-github-check` i/lub `cml-send-comment` [2 pkt]" " - składał się będzie z co najmniej 3 jobów:\n",
" 1. dokona trenowania jako osobnej akcji wykonanej w Dockerze [8 pkt]\n",
" 2. dokona ewaluacji modelu [6 pkt]\n",
" 3. zarchiwizuje plik z modelem"
] ]
} }
], ],
"metadata": { "metadata": {
"author": "Tomasz Ziętkiewicz", "author": "Tomasz Ziętkiewicz",
"celltoolbar": "Slideshow",
"email": "tomasz.zietkiewicz@amu.edu.pl", "email": "tomasz.zietkiewicz@amu.edu.pl",
"kernelspec": { "kernelspec": {
"display_name": "Python 3", "display_name": "Python 3",
@ -577,7 +1081,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.9.16"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

@ -0,0 +1 @@
Subproject commit 5a40228be54897d47e0480318adcdbdec0e74d60

View File

@ -66,7 +66,7 @@
"author": "Tomasz Ziętkiewicz", "author": "Tomasz Ziętkiewicz",
"email": "tomasz.zietkiewicz@amu.edu.pl", "email": "tomasz.zietkiewicz@amu.edu.pl",
"kernelspec": { "kernelspec": {
"display_name": "Python 3", "display_name": "Python 3 (ipykernel)",
"language": "python", "language": "python",
"name": "python3" "name": "python3"
}, },
@ -81,7 +81,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.1" "version": "3.10.4"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"

577
IUM_12.Publikacja.ipynb Normal file
View File

@ -0,0 +1,577 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "honey-resistance",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<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)"
]
},
{
"cell_type": "markdown",
"id": "a5f10a0e",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Abstract\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",
"- LaTeX + Overleaf jaka narzędzia do składu artykułu"
]
},
{
"cell_type": "markdown",
"id": "35d3630d",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Introduction\n",
"\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",
"- A jeśli nasza praca ma charakter badawczy, to warto efekty naszej pracy od zebrać w postaci artykułu i opublikować\n",
"- Nasz pracodawca może od nas tego wymagać lub przynajmniej zachęcać\n",
"- Dlatego zapoznamy się z:\n",
"1. Strukturą artykułu naukowego\n",
"2. Technicznymi aspektami jego tworzenia"
]
},
{
"cell_type": "markdown",
"id": "1033fc4d",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Related work\n",
"\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",
"- https://www.researchgate.net/publication/337857231_How_to_Write_a_Machine_Learning_Paper_for_not_so_Dummies/comments\n",
"- https://towardsdatascience.com/writing-more-successful-machine-learning-research-papers-39863ca9ea90\n",
"- https://towardsdatascience.com/tips-for-reading-and-writing-an-ml-research-paper-a505863055cf\n",
"\n",
"Dobre wyjaśnienie struktury artykułu naukowego znajdziemy w napisanym po polsku artykule\n",
"- https://ekulczycki.pl/warsztat_badacza/struktura-artykulu-naukowego-uniwersalne-wytyczne-i-przydatne-wskazowki/"
]
},
{
"cell_type": "markdown",
"id": "2c7eb238",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Methods"
]
},
{
"cell_type": "markdown",
"id": "changed-president",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"### Struktura artykułu naukowego\n",
"Struktura [(A)IMRaD](https://en.wikipedia.org/wiki/IMRAD):\n",
"\n",
"0. Abstrakt (**A**bstract) - Dlaczego, jak, \n",
"1. Wprowadzenie (**I**ntroduction) - \"Dlaczego?\"\n",
" 1. Related work - \"Kontekst naukowy\"\n",
"2. Metody (**M**ethod) - \"Jak?\"\n",
"3. Wyniki (**R**esults) - \"Co?\"\n",
"4. Wnioski (**D**iscussion/Conclusions) - \"Interpretacja wyników\""
]
},
{
"cell_type": "markdown",
"id": "8cb9b025",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"<img src=\"https://upload.wikimedia.org/wikipedia/commons/7/75/Wineglass_model_for_IMRaD_structure..png\"/>"
]
},
{
"cell_type": "markdown",
"id": "d3e245eb",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Tytuł\n",
"- powinien odzwierciedlać treść artykułu ;)\n",
"- nie za długi (< 12 wyrazów)\n",
"- lepiej, żeby nie był pytaniem (patrz [Prawo nagłówków Betteridge'a](https://pl.wikipedia.org/wiki/Prawo_nag%C5%82%C3%B3wk%C3%B3w_Betteridge%E2%80%99a), choć [niekoniecznie](https://link.springer.com/article/10.1007/s11192-016-2030-2))\n",
"- dobry artykuł może mieć krótki, chwytliwy tytuł, szczególnie, jeśli autorzy mają renomę ;) Przykłady:\n",
" - [\"Attention Is All You Need\"](https://arxiv.org/abs/1706.03762)"
]
},
{
"cell_type": "markdown",
"id": "1f150ddb",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Abstrakt\n",
"\n",
"- stanowi samodzielną całość - powinien być zrozumiały bez reszty artykułu\n",
"- jest bardzo istotny - stanowi \"reklamówkę\" naszej pracy - ma zachęcić do lektury\n",
"- powinien zawierać wszystkie najważniejsz elementy artykułu i mieć podobną strukturę (IMRaD)"
]
},
{
"cell_type": "markdown",
"id": "6005b4bd",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Wprowadzenie\n",
" - Kontekst badań\n",
" - Od ogółu do szczegółu\n",
" - Motywacja\n",
" - Co chcemy właściwie zbadać - sformułowanie hipotezy badawczej"
]
},
{
"cell_type": "markdown",
"id": "1308de25",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Related work\n",
" - Kontekst naukowy\n",
" - Co zrobiono przed nami\n",
" - Musimy się do tego odnieść w dalszej części i zaznaczyć co nasze badania wnoszą nowego do dziedziny\n",
" - Cytujemy najważniejsze prace\n",
" - Najlepiej zacząć szeroko i w przeszłości i stopniowo przechodzili do coraz nowszych i bardziej szczegółowych badań, bliżej związanych z tematyką poruszaną w naszym artykule."
]
},
{
"cell_type": "markdown",
"id": "b6cf4464",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Metody\n",
"- Jak przeprowadziliśmy nasze badania/eksperymenty\n",
"- Informacje tu zawarte w powinny umożliwić zreprodukowanie naszych wyników innym badaczom\n",
"- Opisujemy:\n",
" - Dane\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 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",
"- 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."
]
},
{
"cell_type": "markdown",
"id": "5aee7988",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Wyniki\n",
"- Jakie wyniki otrzymaliśmy\n",
"- Powstrzymajmy się z ich interpretacją\n",
"- Możemy dokonywać porównań, ale z opiniami w stylu \"Nasze podejście deklasuje obecny SOTA\" (State Of The Art) poczekajmy do następnej sekcji"
]
},
{
"cell_type": "markdown",
"id": "7be88b24",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### Konkluzje\n",
"- Interpretacja wyników\n",
"- Jakie jest ich znaczenie?\n",
"- Jak prezentują się w szerszym kontekście\n",
"- Tak jak we wprowaszeniu przechodzimy od ogółu do szczegółu (zawężamy perspektywę), tutaj postępujemy odwrotnie - zaczynając od szczegółowej interpretacji przechodzimy do znaczenia wyników w szerszym kontekście"
]
},
{
"cell_type": "markdown",
"id": "4753cf22",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Latex\n",
"\n",
"- LaTeX (wym. *Latech*) to system składu tekstu\n",
"- Najbardziej popularny w dziedzinach technicznych\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",
"- Piszemy tekst ze znacznikami, kompilujemy, dostajemy gotowy dokument, np. pdf\n",
"- Stosowany powszechnie do pisania publikacji naukowych (artykułów, książek jak i rozpraw nukowych)\n",
"- Pozwala łatwo zmienić styl/szablon\n",
"- W założeniu, podczas pisania skupiamy się na treści i strukturze a LaTeX sam zatroszczy się o wygląd\n",
"- Przystępna dokumentacja: https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes"
]
},
{
"cell_type": "markdown",
"id": "918e3b39",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Struktura\n",
"```latex\n",
"\n",
"\\documentclass[conference]{IEEEtran}\n",
"%\\documentclass[a4paper]{IEEEconf}\n",
"\n",
"\\usepackage[]{graphicx}\n",
"% to typeset algorithms\n",
"\\usepackage{algorithmic}\n",
"\\usepackage{algorithm}\n",
"% to typeset code fragments\n",
"\\usepackage{listings}\n",
"% to make an accent \\k be available\n",
"\\usepackage[OT4,T1]{fontenc}\n",
"% provides various features to facilitate writing math formulas and to improve the typographical quality of their output.\n",
"\\usepackage[cmex10]{amsmath}\n",
"\\interdisplaylinepenalty=2500\n",
"% por urls typesetting and breaking\n",
"\\usepackage{url}\n",
"% for vertical merging table cells\n",
"\\usepackage{multirow}\n",
"% \\usepackage[utf8]{inputenc}\n",
"\n",
"\n",
"\\title{Research paper structure in LaTeX}\n",
"\n",
"\n",
"%\\author{}\n",
"\\name{Tomasz Ziętkiewicz}\n",
"\n",
"\n",
"\\begin{document}\n",
"\\maketitle\n",
"% \n",
"\\begin{abstract}\n",
"This paper is an example of a paper structure in \\LaTeX\n",
"\\end{abstract}\n",
"\n",
"\\noindent\\textbf{Index Terms}: speech recognition, error correction, post-processing, post-editing, natural language processing\n",
"\n",
"\n",
"\\section{Introduction}\n",
"Introductions has always been very important parts of scientific papers...\n",
"\n",
"\\section{Related work} \\label{sec:related}\n",
"Tips on writing research papers can be found in \\cite{howtowrite}\n",
"\n",
"\n",
"\\section{Data} \\label{sec:data}\n",
"Data is prepared using our novel data pipeline presented on figure \\ref{fig:data-piepline}\n",
"\n",
"\\begin{figure}[htbp]\n",
" \\centering\n",
" \\label{fig:data-pipeline}\n",
" \\includegraphics[scale=0.6]{data-pipeline.pdf}\n",
" \\caption{Data preparation pipeline}\n",
"\\end{figure}\n",
"\n",
"\n",
"Data statistics are shown in Table \\ref{tab:data}.\n",
"Data sets were randomly divided into training, development, and test subsets in a proportion 8:1:1.\n",
"\n",
"\t\\begin{table}\n",
"\t \\caption{Datasets statistics }\n",
" \\label{tab:data}\n",
" \\centering\n",
"\t\t\\begin{tabular}{|l|r|r|r|r|r|}\n",
" \t\t\\hline\n",
" \t\tLanguage & \\textbf{de-DE} & \\textbf{es-ES} & \\textbf{fr-FR} \\\\\n",
" \t\t\\hline\n",
" \t\tSentences & $12 242$ & $16 905$ & $7180$ \\\\\n",
" \t\tTokens & $37 955$ & $55 567$ & $28 004$ \\\\\n",
" \t\t\\hline\n",
"\t\t\\end{tabular}\n",
"\t\t\\end{table}\n",
"\n",
"\\section{Method} \\label{sec:method}\n",
"The proposed method consists of ...\n",
"\n",
"\\subsection{Data preparation}\n",
"To train the model, a lot of data is needed...\n",
"\n",
"\\subsection{Architecture}\n",
"\n",
"\n",
"\\section{Results} \\label{sec:results}\n",
"Table \\ref{tab:results} presents averaged results.\n",
"The metric used is computes as follows:\n",
"\\begin{equation}\n",
" RMSE = \\sqrt{\\frac{1}{n}\\Sigma_{i=1}^{n}{\\Big(\\frac{d_i -f_i}{\\sigma_i}\\Big)^2}}\n",
"\\end{equation} \n",
"where ...\n",
"\n",
" \\begin{table}\n",
"\t\t\\begin{tabular}{|l|c|c|c|c|c|}\n",
" \\hline \n",
" & Train & Test & Dev & - & Eval\\\\ \n",
" \\hline \n",
" Raw ASR 1best & 9.59 & 12.08 & 12.39 & 45.64 & 27.6\\\\ \n",
" \\hline \n",
" lattice oracle WER & 3.75 & 4.72 & 4.93 & 30.71 & 17.7\\\\ \n",
" \\hline \n",
" Edit operation tagger (from 1best) & - & 10.7 & - & - & 24.7\\\\ \n",
" \\hline \n",
" Absolute WER Reduction & - & $11.42\\%$ & - & - & $10.50\\%$ \\\\ \n",
" \\hline \n",
" Relative WER Reduction & - & $11.42\\%$ & - & - & $10.50\\%$ \\\\ \n",
" \\hline \n",
"\t\t\\end{tabular}\n",
" \\label{tab:results}\n",
"\t\t\\caption{Word Error Rates for input data and the proposed system.}\n",
"\t\\end{table}\n",
"\n",
"\n",
"\\section{Conclusions} \\label{sec:conclusions}\n",
"We presented a new approach to ASR errors correction problem. As demonstrated using three independent datasets, correction models trained using this approach are effective even for relatively small training datasets. The method allows to precisely control which errors should be included in the model and which of the included ones should be corrected at the inference time. The evaluations performed on the models show that they can significantly improve the ASR results by reducing the WER by more than $20\\%$. All of the models presented offer very good inference latency, making them suitable for use with streaming ASR systems. \n",
"\n",
"The presented method is well suited for industrial applications where the ability to precisely control how the error correction model works, as well as small latency, are crucial. \n",
"\n",
"%\\section{Acknowledgements}\n",
"\n",
"\n",
"\\bibliographystyle{IEEEtran}\n",
"\n",
"\\bibliography{bibliography}\n",
"\n",
"\\end{document}\n",
"\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "3ea5c879",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"```bibtex\n",
"\n",
"@book{Hastie2009,\n",
"\ttitle={The Elements of Statistical Learning: Data Mining, Inference, and Prediction},\n",
"\tauthor={Hastie, Trevor and Tibshirani, Robert and Friedman, Jerome},\n",
"\tyear={2009},\n",
"\tpublisher={Springer},\n",
"\taddress = {New York, NY},\n",
"\tedition = {2nd}\n",
"}\n",
"\n",
"@article{Byon2013,\n",
"title = {Wind turbine operations and maintenance: A tractable approximation of dynamic decision-making},\n",
"author = {Byon, E.},\n",
"journal = { IIE Transactions},\n",
"volume = {45},\n",
"number = {11},\n",
"pages = {1188--1201},\n",
"year = {2013}\n",
"}\n",
"\n",
"@inproceedings{Breunig2000,\n",
" title={{LOF}: Identifying density-based local outliers},\n",
" author={Breunig, M. M. and Kriegel, H.-P. and Ng, R. T. and Sander, J.},\n",
" booktitle={Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data},\n",
" pages={93--104},\n",
" year={2000},\n",
" organization={ACM}\n",
"}\n",
"\n",
"@incollection{Yang2010,\n",
" author = \"Yang, J. AND Huang, T. S.\",\n",
" title = \"Image super-resolution: {H}istorical overview and future challenges\",\n",
" booktitle = \"Super-Resolution Imaging\",\n",
" editor = \"Milanfar, Peyman\",\n",
" pages =\"3--35\",\n",
" publisher = \"Chapman \\& Hall/CRC Press\",\n",
" address = {Boca Raton, FL},\n",
" year = \"2010\"\n",
"}\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "pressing-european",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Overleaf \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",
" - Działa od ręki, bez potrzeby konfiguracji, instalacji pakietów itp.\n",
" - podgląd gotowego dokumentu, automatyczna kompilacja\n",
" - edytor z uzupełnianiem składni\n",
" - intagracja z Git/GitHub"
]
},
{
"cell_type": "markdown",
"id": "ba75e390",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## arXiv.org\n",
" - https://arxiv.org/\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."
]
},
{
"cell_type": "markdown",
"id": "e1822b3c",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### JupyterBook\n",
"https://jupyterbook.org/en/stable/intro.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"
]
},
{
"cell_type": "markdown",
"id": "informational-writer",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Conclusions\n",
"### Zadanie [30pkt][2023-06-07] (zmiana terminu!)\n",
"1. Wybierz konferencję naukową z dziedziny ML/AI/Computer Science\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",
"4. Artykuł musi zawierać co najmniej:\n",
" - 6 niepustych sekcji (abstract, introduction, related work, method, results, conclusions)\n",
" - jedną tabelkę (np. opisującą dane lub wyniki)\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",
" - 1 wzór matematyczny\n",
"5. 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",
"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",
" "
]
},
{
"cell_type": "markdown",
"id": "challenging-student",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"![Tajny język naukowców](https://i1.kwejk.pl/k/obrazki/2017/10/2b48483a6c4f274aa276732e41f856af.jpg)"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

159
IUM_13.Kubernetes.ipynb Normal file
View File

@ -0,0 +1,159 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "3c047009",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Kubernetes\n",
"\n",
"<img style=\"height: 150px;\" src=\"img/kubernetes_logo.png\"/>"
]
},
{
"cell_type": "markdown",
"id": "9a21632b",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Kubernetes (aka. K8s) - system służący do automatyzacji:\n",
" - deploymentu\n",
" - skalowania\n",
" - zarządzania\n",
" \n",
" skonteneryzowanymi aplikacjami"
]
},
{
"cell_type": "markdown",
"id": "7bb1198e",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Motywacja\n",
"- Kubernetes jest środowiskiem, w którym działa Kubeflow - system stworzony z myślą o rozwoju i deploymencie modeli ML"
]
},
{
"cell_type": "markdown",
"id": "abe1d606",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Instalacja\n",
"- Instalacja do nauki i eksperymentów (nieprodukcyjna): https://minikube.sigs.k8s.io/docs/start/"
]
},
{
"cell_type": "markdown",
"id": "4ed97706",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Hello Minikube - interaktywny samouczek\n",
"1. Otwórz stronę: https://kubernetes.io/pl/docs/tutorials/hello-minikube/\n",
"2. Kliknij na \"Launch Terminal\" i wykonuj polecenia w otwartym terminalu (możesz klikać na fragmentach kodu a same przekopiują się do terminala i uruchomią)\n",
"\n",
"Większość interaktywnych samouczków z kubernetes.io przestała działać z końcem marca (https://kubernetes.io/blog/2023/02/14/kubernetes-katacoda-tutorials-stop-from-2023-03-31/), ale ten powyżej (i czasami niektóre inne, jeśli macie szczęście) wciąż działa"
]
},
{
"cell_type": "markdown",
"id": "eded46b6",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Terminologia\n",
"- Pod - (z angielskiego \"strąk\", np. strąk groszku, ale też grupa wielorybów <\"pod of whales\">)\n",
" grupa jednego lub więcej kontenerów wraz z przynależnymi wolumenami (volumes), adresem IP i informacją jak mogą być uruchomione\n",
"<img style=\"height: 200px;\" src=\"img/pod.jpg\"/>\n",
"- Node (węzeł) - pody (jeden lub więcej) są uruchamiane na węzłach - maszynach (fizycznych lub wirtualnych). Na każdym węźle jest uruchomiony proces \"kublet\", służący do komunikacji z \"control plane\", czyli serwerem kontrolującym klaster"
]
},
{
"cell_type": "markdown",
"id": "9d5b11fe",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"- Cluster - grupa węzłów\n",
"- Service - abstrakcja zapewniająca stabilny dostęp do Podów. Ponieważ Pod-y są efemeryczne, mogą być uruchamiane automatczynie np. w wyniki awarii węzła. Service definiuje jakie Pod-y (np. z jaką etykietą) są dostępne pod danym portem (więcej informacji: https://kubernetes.io/docs/concepts/services-networking/service/)\n",
"\n",
"- Schemat klastra: https://kubernetes.io/docs/concepts/overview/components/"
]
},
{
"cell_type": "markdown",
"id": "70932230",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 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/explore/explore-intro/\n",
"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)"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

File diff suppressed because one or more lines are too long

BIN
img/ReCAPTCHA_idea.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
img/cat_captcha.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 KiB

BIN
img/kubernetes_logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
img/pod.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB