ium/IUM_05.Biblioteki_DL.ipynb
2024-04-09 09:46:32 +02:00

12 KiB

Inżynieria uczenia maszynowego

3 kwietnia 2024

5. Biblioteki do uczenia głębokiego

Plan na dziś

Przegląd bibliotek DL (_deep learning):

  1. Tensorflow
  2. Pytorch
  3. Caffe
  4. Caffe2
  5. Deeplearning4J
  6. CNTK (Microsoft Cognitive Toolkit)
  7. ML.NET
  8. MXNet
  9. Porównanie
  10. Formaty wymiany modeli

Zadanie

Dynamiczne vs statyczne grafy obliczeniowe

  • Żeby wytrenować sieć neuronową, musimy skonstruować graf obliczeniowy
  • Graf może być:
    • statyczny - definiowany raz dla wszystkich danych wejściowych
    • dynamiczny - zmienny, w zależności od danych wejściowych
  • Zalety grafu dynamicznego:
    • bardziej elastyczny i interaktywny - nie musimy kompilować grafu przed jego uruchomieniem
    • łatwiejszy w debudowaniu
  • Zalety grafu statycznego:
    • szybszy - łatwiej zaptymalizować
    • przenośny - łatwiej go "wyeksportować" - graf zawiera wszystkie informacje konieczne do inferencji

1. Tensorflow

  • https://tensorflow.org
  • Open source
  • Rozwijana przez google
  • Bogaty "ekosystem"
  • Napisana w C/C++ i Pythonie
  • Liczne interfejsy/bindingi: Python, Java, Javascript (poprzez Tensorflow.js), Go, Rust, Swift
  • Łatwy do osadzenia dzięki Tensorflow Lite - runtime dla urządzeń mobilnych (C,C++,Java,Swift, Objective-C)
  • "Serwowanie" modeli przez REST API dzięki Tensorflow Serving
  • Trenowanie na GPU, TPU. Distributed training
  • Statyczny graf obliczeń, ale of wersji 2.0 dostępne "Eager execution", które umożliwia wykonywanie operacji w sieci bez budowania grafu

1.1 Keras

  • keras.io
  • Wysokopoziomowy interfejs do Tensorflow 2.0

2. PyTorch

3. Caffe

4. Caffe2

  • https://caffe2.ai/
  • Rozwijana przez Facebook
  • zmergowana do repozytorium PyTorch
  • Open source
  • Głównie zastosowania produkcyjne, w tym modele embedded (Caffe2go)
  • PyTorch: łatwość eksperymentowania, research. Caffe2: wydajność, urządzenia mobilne
  • ONNX jako format wymiany między Caffe2 i PyTorch

5. Deeplearning4J

6. CNTK (Microsoft Cognitive Toolkit)

  • https://cntk.azurewebsites.net/
  • Rozwijana przez ... Microsoft (Rozwój porzucony w 2019 roku)
  • Open source (licencja MIT)
  • Napisana w C++
  • API: Python, C#, C++

8. MXNet

9. Porównanie

Framework Autor Licencja Język Interface Uwagi
Tensorflow Google Apache 2.0 C++, Python C,C++,Python,Java,Javascript
Keras Google MIT Python Python Wysokopoziomowy interfejs do Tensorflow
Tensorflow JS Google Apache 2.0 Javascript Javascript
PyTorch Facebook BSD C++,Python C,Python, Java
Caffe BAIR BSD C++ Python,Matlab
Caffe2 Facebook BSD C++ C++,Python Od 3 lat (2018) część PyTorch
CNTK Microsoft MIT C++ Python, C++, C# nierozwijany od 01.2019
ML.NET Microsoft MIT C++, C## .NET, Python
MXNet Apache Foundation Apache 2.0 C++, Python Python, Scala, Julia, Clojure, Java, C++, R i Perl nierozwijany od 05.2022

9. Formaty wymiany

  • większość bibliotek używa innego formatu do zapisu modeli
  • istnieją otwarte, uniwersalne formaty zapisu modeli sieci neuronowych, które mają za zadanie umożliwienie dzielenia modeli między bibliotekami
  • Lista operacji wspieranych przez formaty nie zawiera wszystkich operacji używanych przez różna biblioteki, dlatego czasami kownwersja do ONNX nie jest w pełni możliwa
  • ONNX - Open Neural Network Exchange
  • NNEF - Neural Network Exchange Format
    • https://www.khronos.org/nnef/
    • wspierany przez Khronos Group (Nvidia, ATI, Intel, Sun, ...) - ta sama, która rozwija OpenGL
    • konwersja z/do ONNX, Caffe, Caffe2, TensorFlow

Zadanie [22 pkt.]

Termin: 24 kwietnia 2024

  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.
    • wczytaj dane trenujące [2 pkt.]
    • wytrenuj na nich model [6 pkt.]
    • zapisz model do pliku [2 pkt.]
    • w osobnym skypcie, przy pomocy zapisanego wcześniej modelu, dokonaj predykcji na danych ze zbioru testującego [8 pkt.]
    • zapisz wyniki predykcji zwrócone przez model do pliku (nie metryki, tylko wyniki predykcji, czyli te informacje, które model miał przewidzieć) [2 pkt.]
      Uwagi:
    • wyniki nie są najważniejsze - o ile twój model nie zwraca losowych danych ;)
    • nie musisz wnikać głęboko w szczegóły trenowania modelu i inferencji. W tym zadaniu chodzi o poznanie API i praktycznych aspektów
    • kod i stworzony model będziemy wykorzystywać na następnych zajęciach
  1. Dostosuj Dockerfile przygotowany na poprzednich zajęciach tak, żeby móc w zdefiniowanym w nim kontenerze wytrenować i uruchomić sieć przygotowaną w punkcie 1 [2 pkt.]