Przejdź do treści

02. Technologie

Technologie programistyczne

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...

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).

więcej...

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...

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.

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

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...

Popularne biblioteki obliczeniowe
BLAS/LAPACK

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).

więcej...

ScaLAPACK

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.

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...

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...

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...

Rozwiązania AI

PyTorch

logo PyTorch

wysokopoziomowa biblioteka do rozwiązań deep learningowych, 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. Umożliwia ona efektywne strukturyzowanie i upraszczanie kodu stworzonego w bibliotece 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.

więcej...

TensorFlow

logo TensorFlow

wysokopoziomowa biblioteka do rozwiązań uczenia głębokiego (deep learning), stworzona przez Google. Biblioteka jest napisana w języku C++, Python oraz CUDA. Tensorflow, 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

wysokopoziomowa biblioteka do rozwiązań z użyciem uczenia głębokiego (deep learning), działająca obecnie jako wysokopoziomowe API dla Tensorflow. Głównym założeniem twórców Keras było dostarczenie narzędzia do szybkiej i 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...

scikit-learn

logo PyTorch

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

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 i biblioteka umożliwiające graficzną wizualizację modeli uczenia głębokiego. Ułatawia analizę architektury oraz funkcjonalności modeli.

więcej...

DeepSpeed

logo DeepSpeed

stworzona przez Microsoft biblioteka do efektywnego trenowania modeli AI 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...

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 daje dostęp do obszernych zbiorów modeli oraz zestawów danych treningowych.

więcej...


Ostatnia aktualizacja: 13 marca 2024