Przejdź do treści

02. Technologie

Technologie programistyczne

Pamięć współdzielona

OpenMP

logo OpenMP

powszechnie używany standard do zrównoleglania obliczeń w architekturze pamięci współdzielonej, tj. w obrębie jednego komputera i pojedynczego procesu. Oparty o wiele wątków z dostępem do tej samej pamięci. Przewidziany głównie do wykorzystania możliwości wielordzeniowych procesorów, obecnie umożliwia również offloading na akcelerator (tj. delegowanie obliczeń do wykonania np. na układzie GPU).

więcej...

Obliczenia rozproszone

MPI

logo MPI

powszechnie używany standard do zrównoleglania obliczeń w architekturze rozproszonej, tj. między wieloma komputerami połączonymi w sieć. Oparty o procesy z oddzielną pamięcią, może zostać wykorzystany również w obrębie jednego komputera. Bardzo często jest łączony z innymi technologiami odpowiedzialnymi za dalsze zrównoleglenie obliczeń na wiele wątków lub akceleratory (np. OpenMP, CUDA lub HIP).

Implementacje:   MPICH  •  Open MPI  •  MVAPICH

więcej...

MPI-IO

logo MPI-IO

część standardu MPI definiująca API do równoległej pracy z plikami umieszczonymi we współdzielonym, sieciowym systemie plików przez wiele rozproszonych procesów. Przewidziany szczególnie do wydajnej pracy z równoległymi systemami plików, takimi jak Lustre czy GPFS.

więcej...

Akceleratory

OpenACC

logo OpenACC

podobny do OpenMP, standard do zrównoleglania obliczeń na platformach akcelerowanych. Został zaprojektowany do ułatwienia prowadzenia obliczeń przede wszystkim na GPU. Może wspierać również inne typy akceleratorów. Wprowadził koncepcję delegowania obliczeń (tzw. offloading), która później została zaadaptowana przez standard OpenMP. Niektóre kompilatory umożliwiają wykonanie zrównoleglonego kodu zarówno na GPU jak i na wielordzeniowym CPU.

więcej...

CUDA

logo CUDA

rozwijany przez firmę NVIDIA model programowania dla platform akcelerowanych z układami GPU NVIDIA, przewidziany wyłącznie dla kart tego producenta. Standardowo umożliwia zlecanie obliczeń i komunikację pomiędzy procesorem a kartami GPU, oraz bezpośredni dostęp do pamięci pomiędzy wieloma kartami w obrębie jednego komputera. Posiada dodatkowe rozwiązania wspierające efektywną pracę z wieloma GPU, również w architekturze rozproszonej.

więcej...

HIP

logo ROCm

rozwijany przez firmę AMD model programowania dla platform akcelerowanych będący odpowiednikiem NVIDIA CUDA. Umożliwia tworzenie oprogramowania dla układów GPU AMD, ale jednocześnie gwarantuje przenośność kodu, tj. pozwala na uruchomienie tego samego kodu również na GPU NVIDIA. Wchodzi w skład szerszego zestawu narzędzi programistycznych oraz bibliotek AMD ROCm.

więcej...

SYCL

logo SYCL

wysokopoziomowy model programowania dla platform akcelerowanych, traktujący wielordzeniowe procesory również jako akceleratory. Oparty o C++, oferuje zunifikowany interfejs do programowania różnych urządzeń dostępnych w obrębie jednego komputera (tzw. strategia XPU). Dzięki temu umożliwia kompilację oraz uruchamianie tego samego kodu źródłowego na akceleratorach różnych typów (CPU, GPU, FPGA i inne) od różnych producentów.

Implementacje:   Intel oneAPI DPC++  •  AdaptiveCpp  •  Codeplay ComputeCpp

więcej...

OpenCL

logo OpenCL

otwarty standard określający model programowania dla platform akcelerowanych, który powstał jako alternatywa dla CUDA. Jest rozwiązaniem nieograniczającym się tylko do kart GPU, tylko jednego producenta. Udostępnia jednolity interfejs pozwalający programować różne typy akceleratorów, zaliczając do tego grona również wielordzeniowe CPU.

więcej...


Biblioteki obliczeniowe

logo

Podstawy korzystania z bibliotek

Biblioteki programistyczne dostarczają gotowe funkcje i typy danych, które mogą zostać użyte przez programistę we własnym kodzie źródłowym. Biblioteki mogą znacznie przyspieszyć i ułatwić tworzenie aplikacji. Omawiamy różne aspekty i pojęcia związane z korzystaniem z bibliotek, m.in.:

  • czym jest API
  • sposoby instalacji i rodzaje bibliotek
  • kompilacja programów korzystających z bibliotek
  • przydatne zmienne środowiskowe

więcej...

Podstawowe biblioteki

BLAS/LAPACK

logo

powszechnie uznane biblioteki matematyczne służące do wykonywania typowych operacji algebry liniowej na wektorach i macierzach liczb rzeczywistych lub zespolonych. Ich interfejs stał się swego rodzaju standardem, który obecnie posiada wiele implementacji. Są przeznaczone do obliczeń na CPU w modelu pamięci współdzielonej. Dostawcy GPU oferują biblioteki o tym samym lub zbliżonym interfejsie, które potrafią wykonać część obliczeń na akceleratorze (np. NVBLAS, cuBLAS, rocBLAS).

Implementacje:   Netlib  •  OpenBLAS  •  ATLAS  •  MKL  •  BLIS/libFLAME  •  AOCL  •  FlexiBLAS (wrapper)

więcej...

ScaLAPACK

logo

skalowalna wersja biblioteki LAPACK, umożliwiająca wykonywanie typowych operacji algebry liniowej w środowisku rozproszonym. Udostępnia podzbiór funkcji LAPACK o interfejsie zmodyfikowanym pod kątem rozpraszania obliczeń. Podobnie jak BLAS i LAPACK posiada kilka implementacji. Jest przeznaczona do obliczeń na CPU. Porównywalne rozwiązania dla GPU oferuje firma NVIDIA w formie bibliotek cuSOLVER (moduł cuSolverMG) oraz cuSOLVERMp.

Moduły:   BLACS  •  PBLAS

więcej...

FFTW

logo FFTW

zoptymalizowana biblioteka pozwalającą na wykonywanie operacji z dziedziny FFT czyli szybkiej transformacji Fouriera (Fast Fourier Transform). Jest to wydajna implementacja umożliwiająca obliczenia zrównoleglone – zarówno wielowątkowe jak i rozproszone. Przewidziana do obliczeń na CPU.

więcej...

Zestawy bibliotek

Intel MKL

logo Intel

złożona biblioteka firmy Intel, zawierająca wydajne funkcje obliczeniowe z wielu dziedzin. Implementuje interfejsy dobrze znanych bibliotek (BLAS/LAPACK/ScaLAPACK, FFTW), dostarcza również funkcje do generowania liczb losowych (RNG), statystyki, interpolacji (data fitting) i wiele innych. Przewidziana do obliczeń głównie na CPU, zoptymalizowana pod architekturę Intel. Posiada pewne wsparcie dla Intel GPU. Oprócz standardowego interfejsu, dostępna również dla SYCL.

więcej...

AMD AOCL

logo AMD

przygotowany przez firmę AMD zestaw popularnych bibliotek obliczeniowych z różnych dziedzin. W jego skład wchodzą implementacje dobrze znanych bibliotek dot. algebry liniowej i FFT (BLAS/LAPACK/ScaLAPACK, FFTW), jak i biblioteki przeznaczone do kompresji, szyfrowania danych czy generowania liczb pseudolosowych (RNG). Biblioteki są zoptymalizowane pod kątem procesorów AMD (z rodziny Zen).

więcej...

Python

NumPy

logo NumPy

bardzo wydajna biblioteka obliczeniowa dla języka Python, przewidziana do obliczeń wykonywanych na CPU. Umożliwia tworzenie obiektów reprezentujących wielowymiarowe tablice oraz dostarcza funkcje do szybkich operacji na tablicach wielowymiarowych. Zakres wspieranych funkcji jest bardzo szeroki i obejmuje m.in. podstawowe operacje algebry liniowej na wektorach i macierzach.

więcej...

SciPy

logo SciPy

zawiera wiele naukowych i numerycznych algorytmów i funkcji, które rozszerzają NumPy. Podczas gdy NumPy koncentruje się na wydajnych operacjach tablicowych, SciPy udostępnia zbiór modułów dla różnych dziedzin naukowych.

więcej...

CuPy

logo CuPy

biblioteka stanowiąca rozszerzenie popularnej biblioteki NumPy o możliwość łatwego wykonywania obliczeń na GPU. API zostało zaprojektowane tak, aby zapewnić kompatybilność z bibliotekami NumPy i SciPy, umożliwiając tym samym bezpośrednie i szybkie wykorzystanie ich w istniejącym już kodzie. Dużą zaletą jest też niezależność od stosowanych urządzeń – CuPy nie jest ograniczona pod względem danego typu GPU czy CPU. Wspiera platformę NVIDIA CUDA, a od pewnego czasu (wersji 9.0) także AMD HIP/ROCm (wsparcie eksperymentalne).

więcej...


Sztuczna inteligencja (AI)

logo

Poradnik AI/ML

Krótki poradnik zawierający podstawowe informacje, które warto znać, wchodząc w dziedzinę uczenia maszynowego (machine learning), a szczególnie w jej poddziedzinę jaką jest uczenie głębokie (deep learning). Materiał autorstwa dr. hab. inż. Macieja Wielgosza z AGH.

przejdź

logo

Książka "Dive into Deep Learning"

Interaktywna książka, w przystępny sposób wprowadzająca w świat uczenia głębokiego. Łaczy teorię z praktyką - omawiane koncepcje są zobrazowane kodem źródłowym dla PyTorch, TensorFlow, JAX, co pozwala szybko zacząć samodzielnie eksperymentować. Dostępne są równiez notatniki Jupyter.

Książka zawiera suplement tłumaczący podstawy matematyczne, które mają zastosowanie nie tylko dla uczenia głębokiego ale również dla klasycznego uczenia maszynowego (m.in. podstawy algebry liniowej, zmienne losowe, rozkłady prawdopodobieństwa, naiwny klasyfikator bayesowski, statystyka).

przejdź

Klasyczne uczenie maszynowe

scikit-learn

logo PyTorch

biblioteka oferująca klasyczne narzędzia uczenia maszynowego (machine learning). Napisana w Pythonie, stworzona z myślą o wspólnym korzystaniu z bibliotekami NumPy i SciPy. Dostarcza szereg funkcjonalności służących do obróbki i wizualizacji danych.

więcej...

Tworzenie sieci neuronowych

PyTorch

logo PyTorch

rozbudowana biblioteka do rozwiązań uczenia głębokiego (deep learning), stworzona oryginalnie przez Meta, a obecnie stanowiąca część Linux Foundation. Powstała na bazie biblioteki Torch, która już nie jest rozwijana. Z założenia, Pytorch jest nastawiony na modułowość i programowanie obiektowe. Udostępnia również rozwiązania niskopoziomowe do pracy z sieciami neuronowymi.

więcej...

Lightning

logo Lightning

biblioteka, która została stworzona jako wysokopoziomowy interfejs do biblioteki Pytorch. Głównymi celami twórcy frameworku, Williama Falcona, było zminimalizowanie czasu poświęconego na rozwiązywanie problemów inżynieryjnych podczas tworzenia kodu do eksperymentów naukowych. Umożliwia efektywne strukturyzowanie i upraszczanie kodu stworzonego w bibliotece Pytorch.

więcej...

TensorFlow

logo TensorFlow

rozbudowana biblioteka do rozwiązań uczenia głębokiego (deep learning), stworzona przez Google. Podobnie jak Pytorch, pozwala zarówno na wysokopoziomowe, modułowe tworzenie sieci, jak i na niskopoziomowe konfigurowanie sieci krok po kroku. W porównaniu do Pytorcha, niskopoziomowa praca w Tensorflow może być mniej przystępna dla początkującego użytkownika.

więcej...

Keras

logo Keras

biblioteka działająca obecnie jako wysokopoziomowe API dla Tensorflow. Głównym założeniem twórców Keras było dostarczenie narzędzia do prostej implementacji sieci neuronowych, związanych z nią funkcji pomocniczych i szybkiego eksperymentowania.

więcej...

JAX

logo JAX

stworzona przez firmę Google biblioteka do akceleracji obliczeń numerycznych i tworzenia sieci neuronowych dla języka Python. JAX nadaje się jako osobny framework do tworzenia nowych, autorskich rozwiązań z wykorzystaniem uczenia głębokiego (deep learning), głównie w celach badawczych przez zaawansowanych użytkowników. Może być także wykorzystany jako element wspomagający pracę innych frameworków jak Tensorflow i Pytorch. Dodatkowo, stanowi wartościową bibliotekę do wykonywania innych obliczeń naukowych, niekoniecznie związanych z sieciami neuronowymi.

więcej...

Rozwiązania pomocnicze

HuggingFace

logo HuggingFace

platforma społecznościowa/hub AI mająca na celu demokratyzację i rozwój społeczności skoncentrowanej wokół AI. Oprócz samgo aspektu społecznościowego, na ekosystem HuggingFace składa się wiele bibliotek umożliwiających stosowanie udostępnianych zasobów. Platforma HuggingFace udostępnia obszerne zbiory modeli oraz zestawy danych treningowych.

więcej...

DeepSpeed

logo DeepSpeed

stworzona przez Microsoft biblioteka do efektywnego trenowania modeli oraz inferencji. Jako trzon wykorzystuje bibliotekę Pytorch. Niektóre elementy, jak na przykład strategie treningu rozproszonego, są zintegrowane z innymi technologiami takimi jak Lightning czy HuggingFace Transformers.

więcej...

Horovod

logo Horovod

stworzony przez Uber, a obecnie utrzymywany przez Linux Foundation, framework do treningu rozproszonego. Głównym celem projektu jest przyspieszenie procesu treningu modeli oraz zmniejszenie zużycia pamięci akceleratorów.

więcej...

ONNX

logo ONNX

projekt mający na celu unifikację standardów obecnych w dziedzinie AI. Jego głównym założeniem jest ułatwienie transferu modeli gotowych do inferencji pomiędzy różnymi językami programowania, systemami operacyjnymi i architekturami sprzętowymi.

więcej...

Netron

logo Netron

aplikacja do graficznej wizualizacji modeli uczenia głębokiego. Ułatawia analizę architektury oraz funkcjonalności modeli.

więcej...

Zagadnienia

LLM

logo LLM

rodzaj modeli językowych opartych o sieć neuronową. “Large” odnosi się do ogromnej ilości parametrów zawartych w takiej sieci, która z reguły wynosi od 1 miliarda do ponad 1 biliona parametrów. Modele te znalazły szerokie zastosowanie w przetwarzaniu języka naturalnego (NLP, natural language processing). Leżą u podstaw aplikacji konwersacyjnych (popularne chatboty), generujących i uzupełniających tekst, tłumaczących, klasyfikujących treści oraz wielu innych.

więcej...


Ostatnia aktualizacja: 29 lipca 2024