This commit is contained in:
Paweł Skórzewski 2024-05-28 10:35:09 +02:00
parent 8ac25d0bd7
commit 30feed3862

View File

@ -23,7 +23,6 @@
} }
}, },
"source": [ "source": [
"## Github actions\n",
"<img src=\"img/expcontrol/github-actions.jpeg\">" "<img src=\"img/expcontrol/github-actions.jpeg\">"
] ]
}, },
@ -37,21 +36,9 @@
}, },
"source": [ "source": [
" - https://docs.github.com/en/actions\n", " - https://docs.github.com/en/actions\n",
" - System ciągłej integracji \"wbudowany\" w GitHub\n", " - System ciągłej integracji „wbudowany” w GitHub\n",
" - Darmowy dla publicznych repozytoriów (z większymi niż w płatnych planach [ograniczeniami dotyczącymi zasobów](https://docs.github.com/en/actions/reference/usage-limits-billing-and-administration#usage-limits))\n", " - Darmowy dla publicznych repozytoriów (z większymi niż w płatnych planach [ograniczeniami dotyczącymi zasobów](https://docs.github.com/en/actions/reference/usage-limits-billing-and-administration#usage-limits))\n",
" " " - https://youtu.be/cP0I9w2coGU"
]
},
{
"cell_type": "markdown",
"id": "2b06cc01",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"https://youtu.be/cP0I9w2coGU"
] ]
}, },
{ {
@ -63,15 +50,15 @@
} }
}, },
"source": [ "source": [
"### Terminologia Github Actions\n", "### Terminologia GitHub Actions\n",
" - *Workflow* - workflow odpowiada \"Pipeline\" z Jenkinsa.\n", " - ***Workflow*** odpowiada *pipeline*'owi z Jenkinsa.\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", " - ***Event*** to zdarzenie, które uruchamia/wyzwala (*triggers*) *workflow*. Np. wypchnięcie zmiany do repozytorium (*push*), utworzenie pull requestu ([pełna lista tutaj](https://docs.github.com/en/actions/reference/events-that-trigger-workflows)).\n",
" - *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", " - ***Job*** - zadanie. Workflow składa się z jednego lub kilku zadań (*jobs*). Każde z nich może być wykonywane równolegle na innej maszynie (patrz *runner*).\n",
" - *Step* - odpowiednik \"Stage\" z Jenkinsa - służu do grupowania \"Actions\"\n", " - ***Step*** (krok) - odpowiednik *stage* z Jenkinsa - służy do grupowania *actions*.\n",
" - *Action/command* - odpowiednik \"Step\" z Jenkinsa - pojedyncze polecenie do wykonania, np. dodanie komentarze do Pull requesta, wykonanie polecenia systemowego itp.\n", " - ***Action/command*** (akcja/polecenie) - odpowiednik *step* z Jenkinsa - pojedyncze polecenie do wykonania, np. dodanie komentarza do pull requestu, wykonanie polecenia systemowego itp.\n",
" - *Runner* - odpowiednik Jenkinsowego \"Agent\" - serwer, na którym mogą być wykonywane zadania (\"jobs\")\n", " - ***Runner*** (wykonawca) - 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)" " - *Self-hosted runner* - własny serwer, z zainstalowaną aplikacją [GitHub Actions Runner](https://github.com/actions/runner)."
] ]
}, },
{ {
@ -83,22 +70,22 @@
} }
}, },
"source": [ "source": [
"### Definicja workflow\n", "### Definicja *workflow*\n",
" - Workflow definiuje się w plikach YAML(o rozszerzeniu `*.yml` albo `*.yaml`) umieszczonych w specjalnym folderze `.github/workflows/` wewnątrz repozytorium\n", " - *Workflow* definiuje się w plikach YAML (o rozszerzeniu `*.yml` albo `*.yaml`) umieszczonych w specjalnym folderze `.github/workflows/` wewnątrz repozytorium.\n",
" - Pełna składnia jest opisana [tutaj](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions)\n", " - Pełna składnia jest opisana [tutaj](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions).\n",
" - Podstawowe pola:\n", " - Podstawowe pola:\n",
" - `name` [opcjonalna] - nazwa, pod którą workflow/step będzie widoczny w UI. Domyślnie ścieżka do pliku yaml\n", " - `name` (opcjonalne) - nazwa, pod którą *workflow*/*step* będzie widoczny w UI. Domyślnie: ścieżka do pliku YAML.\n",
" - `on` - definiuje kiedy workflow ma być odpalony\n", " - `on` - definiuje, kiedy workflow ma być uruchomiony.\n",
" - `jobs` - grupuje razem \"zadania\" do wykonania. Każde może być wykonane na innym \"runnerze\". Domyślnie wykonywane są równolegle (ale możemy definiować [zależności między jobami](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds), co powoduje wykonanie ich sekwencyjnie\n", " - `jobs` - grupuje razem zadania (*jobs*) do wykonania. Każde może być wykonane na innym „wykonawcy” (*runner*). Domyślnie wykonywane są równolegle (ale możemy definiować [zależności między jobami](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds), co powoduje wykonanie ich sekwencyjnie).\n",
" - `runs-on` - parametr joba, definujący na jakiej maszynie wirtualnej ma być uruchomiony (np. `ubuntu-latest`)\n", " - `runs-on` - parametr zadania (*job*) definiujący, na jakiej maszynie wirtualnej ma być uruchomiony (np. `ubuntu-latest`).\n",
" - `uses` - umożliwia użycie gotowych akcji zdefiniowanych przez nas, albo przez innych użytkowników, np. `-uses: actions/checkout@v2` spowoduje checkout plików z repozytorium\n", " - `uses` - umożliwia użycie gotowych akcji zdefiniowanych przez nas albo przez innych użytkowników, np. `-uses: actions/checkout@v2` spowoduje *checkout* plików z repozytorium.\n",
" - `run` - pozwala uruchomić dowolne ([dostępne/zainstalowane](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software)) polecenie, np. `python3 train.py`\n", " - `run` - pozwala uruchomić dowolne ([dostępne/zainstalowane](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software)) polecenie, np. `python3 train.py`\n",
" - `env` - pozwala zdefiniować zmienne środowiskowe dostępne dla akcji lub skorzystać ze [zmiennych ustawionych przez Github](https://docs.github.com/en/actions/reference/environment-variables#default-environment-variables)" " - `env` - pozwala zdefiniować zmienne środowiskowe dostępne dla akcji lub skorzystać ze [zmiennych ustawionych przez Github](https://docs.github.com/en/actions/reference/environment-variables#default-environment-variables)."
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 9,
"id": "f4916c1f", "id": "f4916c1f",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -110,7 +97,15 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"/home/tomek/repos/aitech-ium/IUM_11/github-actions-hello\n" "/home/pawel/ium/IUM_11/github-actions-hello\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/pawel/ium/venv/lib/python3.10/site-packages/IPython/core/magics/osm.py:417: UserWarning: This is now an optional IPython functionality, setting dhist requires you to install the `pickleshare` library.\n",
" self.shell.db['dhist'] = compress_dhist(dhist)[-100:]\n"
] ]
} }
], ],
@ -122,7 +117,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 19, "execution_count": 10,
"id": "88ce689f", "id": "88ce689f",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -134,29 +129,21 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Reinitialized existing Git repository in /home/tomek/repos/aitech-ium/IUM_11/github-actions-hello/.git/\n", "Initialized empty Git repository in /home/pawel/ium/IUM_11/github-actions-hello/.git/\n",
"Enumerating objects: 6, done.\n", "Switched to a new branch 'main'\n"
"Counting objects: 100% (6/6), done.\n",
"Delta compression using up to 4 threads\n",
"Compressing objects: 100% (4/4), done.\n",
"Writing objects: 100% (6/6), 780 bytes | 780.00 KiB/s, done.\n",
"Total 6 (delta 0), reused 0 (delta 0), pack-reused 0\n",
"To github.com:TomekZet/ium-ga-hello.git\n",
" * [new branch] main -> main\n",
"Branch 'main' set up to track remote branch 'main' from 'origin'.\n"
] ]
} }
], ],
"source": [ "source": [
"!git init\n", "!git init\n",
"!git branch -M main\n", "!git checkout -b main\n",
"!git remote add origin git@github.com:TomekZet/ium-ga-hello.git\n", "!git remote add origin git@github.com:USERNAME/ium-ga-hello.git\n",
"!git push -u origin main" "!git push -u origin main"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 20, "execution_count": 11,
"id": "dde8d432", "id": "dde8d432",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -168,7 +155,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Overwriting .github/workflows/workflow.yml\n" "Writing .github/workflows/workflow.yml\n"
] ]
} }
], ],
@ -185,7 +172,7 @@
" - name: Setup Python\n", " - name: Setup Python\n",
" uses: actions/setup-python@v2.2.2\n", " uses: actions/setup-python@v2.2.2\n",
" with:\n", " with:\n",
" python-version: '3.7'\n", " python-version: '3.10'\n",
" - run: python3 --version" " - run: python3 --version"
] ]
}, },
@ -226,13 +213,13 @@
} }
}, },
"source": [ "source": [
"### Zakładka actions na stronie repozytorium:\n", "### Zakładka *Actions* na stronie repozytorium:\n",
"https://github.com/TomekZet/ium-ga-hello/actions" "https://github.com/skorzewski/ium-ga-hello/actions"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 27, "execution_count": 12,
"id": "32701383", "id": "32701383",
"metadata": { "metadata": {
"slideshow": { "slideshow": {
@ -244,11 +231,13 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"total 16\r\n", "total 24\n",
"drwxr-sr-x 2 tomek tomek 4096 May 17 11:51 .\r\n", "drwxr-xr-x 2 pawel pawel 4096 May 28 10:10 .\n",
"drwxr-sr-x 3 tomek tomek 4096 May 17 11:51 ..\r\n", "drwxr-xr-x 3 pawel pawel 4096 May 28 10:10 ..\n",
"-rw-r--r-- 1 tomek tomek 456 May 17 11:51 parametrized.yml\r\n", "-rw-r--r-- 1 pawel pawel 1451 May 28 10:10 docker-artifact.yml\n",
"-rw-r--r-- 1 tomek tomek 305 May 17 12:01 workflow.yml\r\n" "-rw-r--r-- 1 pawel pawel 882 May 28 10:10 docker.yml\n",
"-rw-r--r-- 1 pawel pawel 603 May 28 10:10 parametrized.yml\n",
"-rw-r--r-- 1 pawel pawel 306 May 28 10:10 workflow.yml\n"
] ]
} }
], ],
@ -358,7 +347,7 @@
"source": [ "source": [
"### Zależności\n", "### Zależności\n",
"\n", "\n",
"Maszyny wirtualne (\"runners\"), na których uruchamiane są \"joby\" mają zainstalowany zbiór narzędzi. Przykładowa lista dla [Ubuntu 20.04](https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md)\n", "Maszyny wirtualne (*runners*), na których uruchamiane są zadania, mają zainstalowany zbiór narzędzi. Przykładowa lista dla Ubuntu 24.04: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md\n",
"\n", "\n",
"Brakujące zależności można zainstalować, korzystając z:\n", "Brakujące zależności można zainstalować, korzystając z:\n",
" - akcji\n", " - akcji\n",
@ -391,8 +380,8 @@
}, },
"source": [ "source": [
"### Akcje wykonywane w kontenerze Docker\n", "### Akcje wykonywane w kontenerze Docker\n",
"Akcja może być wywołana w kontenerze Docker (pobranym z Docker hub albo zbudowanym z Dockerfile)\n", "Akcja może być wywołana w kontenerze Docker (pobranym z Docker Hub albo zbudowanym z `Dockerfile`).\n",
"W tym celu należy stworzyć własną akcję w pliku action.yaml i potem użyć jej w Workflow" "W tym celu należy stworzyć własną akcję w pliku `action.yaml` i potem użyć jej w *workflow*."
] ]
}, },
{ {
@ -723,8 +712,7 @@
} }
}, },
"source": [ "source": [
"## CML - Continous Machine Learning\n", "## CML - Continous Machine Learning"
"<img src=\"img/expcontrol/cml.png\">"
] ]
}, },
{ {
@ -1042,17 +1030,16 @@
} }
}, },
"source": [ "source": [
"## Zadania [20 pkt] (termin: 05.06.2024)\n", "## Zadania [20 pkt] (termin: 5 czerwca 2024)\n",
"1. Utwórz konto na Github (jeśli jeszcze nie masz)\n", "1. Utwórz konto w serwisie 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 (Actions)* w arkuszu `IUM-2024.xlsx` [1 pkt]\n",
"2. Stwórz prosty Github workflow który:\n", "3. Stwórz prosty *GitHub workflow*, który:\n",
" - zrobi checkout Twojego repozytorium [1 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 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", " - pobierze pliki z danymi uczącymi (pliki można po prostu dodać do repozytorium albo pobrać przez `wget` jeśli są publicznie dostępne) [2 pkt]\n",
" - będzie wywoływalny przez \"Workflow dispatch\" z parametrami trenowania [2 pkt]\n", " - będzie wywoływalny przez \"Workflow dispatch\" z parametrami uczenia [2 pkt]\n",
" - składał się będzie z co najmniej 3 jobów:\n", " - będzie się składał z co najmniej 2 zadań (*job*):\n",
" 1. dokona trenowania jako osobnej akcji wykonanej w Dockerze [8 pkt]\n", " - uczenie modelu jako osobna akcja wykonana w Dockerze [8 pkt]\n",
" 2. dokona ewaluacji modelu [6 pkt]\n", " - ewaluacja modelu [6 pkt]"
" 3. zarchiwizuje plik z modelem"
] ]
} }
], ],
@ -1076,7 +1063,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.9.16" "version": "3.10.12"
}, },
"slideshow": { "slideshow": {
"slide_type": "slide" "slide_type": "slide"