** Przedmiot jest prowadzony przez Grzegorza Latosińskiego z Antmicro. **
Celem przedmiotu jest przedstawienie różnych aspektów optymalizacji sieci neuronowych
pod urządzenia o ograniczonych zasobach obliczeniowych i pamięciowych, jak i wdrażanie
ich w docelowe aplikacje z użyciem zoptymalizowanych bibliotek do inferencji sieci.
W trakcie wykładów przedstawione będą:
- Przykłady głębokich sieci neuronowych projektowanych pod kątem urządzeń
wbudowanych.
- Algorytmy optymalizujące sieci neuronowe pod względem pamięciowym i
obliczeniowym, jak np. quantization, pruning, clustering czy knowledge distillation. W
ramach analizy algorytmów będą również omawiane algorytmy optymalizacji dużych
modeli językowych (LLM).
- Biblioteki open source do optymalizacji sieci neuronowych i procesu ich
wykonywania, jak na przykład TensorFlow Model Optimization Toolkit, NNI,
LiteRT/TensorFlow Lite, CMSIS-NN
- Biblioteki do wydajnego uruchamiania sieci neuronowych na docelowych
platformach, jak TensorFlow Lite/LiteRT czy ONNXRuntime
- Kompilatory sieci neuronowych do tworzenia zoptymalizowanych bibliotek dla danej
platformy i modelu, jak TVM czy IREE
- Przykłady niskopoziomowych technik optymalizacji najpopularniejszych operacji w
sieciach neuronowych.
- Przykłady sprzętowych akceleracji operacji występujących w sieciach neuronowych
na CPU oraz GPU
- Przykłady akceleratorów operacji sieci neuronowych, włącznie z akceleratorami open
source
- Symulatory/emulatory urządzeń wbudowanych i wybranych akceleratorów i ich
wykorzystanie w testowaniu zoptymalizowanych sieci neuronowych
Zajęcia na uczelni będą zajęciami wykładowo-ćwiczeniowymi. Dodatkowo, zagadnienia
poruszane w trakcie wykładów będą realizowane w praktyce w ramach małych projektów
laboratoryjnych do realizacji samodzielnej w trakcie i po wykładach - przeprowadzane będą
różne optymalizacje sieci, a następnie weryfikowany będzie ich wpływ na szybkość
wykonywania inferencji, zajętość pamięci, oraz jakość predykcji.
Również w ramach zadań praktycznych będziemy weryfikować, jak należy przygotować
odpowiednio model pod wybrane optymalizacje, i jak dobierać optymalizacje pod konkretną
platformę sprzętową, i jak przetestować działanie sieci w symulacji.
Wymagania:
- Podstawowa znajomość Linuxa - wszystkie zadania są przystosowane pod pracę z
Linuxem, podobnie jak wymienione wyżej narzędzia
- Znajomość języków Python oraz C++
Podstawowe zagadnienia z zakresu uczenia maszynowego, sieci neuronowych i urządzeń
wbudowanych potrzebne do rozumienia zagadnień poruszanych na wykładzie będą
przedstawiane na zajęciach, aby ułatwić osobom zaznajomionym tylko z częścią zagadnień
wdrożenie się do przedmiotu.