NVIDIA Ampere w służbie Data Science

Start / Blog / NVIDIA Ampere w służbie Data Science

14 maja 2020 nastąpił historyczny moment w świecie przetwarzania danych, NVIDIA zaprezentowała najnowszą architekturę nowych akceleratorów GPU. Nowy model NVIDIA A100 Tensor Core GPU bazuje na najnowszej architekturze Ampere wykonanej w litografii 7nm. A100 jest wysoko skalowalnym rozwiązaniem do obliczeń wykonywanych w stacjach roboczych, serwerach, klastrach i centrach danych. Nowa architektura wprowadza również trzecią generację Tensor Core, która zwiększa przepływowość obliczeniową. Przykładowo obliczenia FP32 na A100 są 10x szybsze w stosunku do poprzedniej generacji V100, a w przypadku użycia macierzy rzadkich obliczenia są wykonywane nawet do 20x szybciej.

 
Rysunek 1. Przykładowy wzrost wydajności dla nowych akceleratorów A100
 

Multi-instance GPU (MIG)

Nowa karta wprowadza szereg rozwiązań wpływających na wydajność obliczeń. Jednym z ciekawszych rozwiązań, wcześniej niedostępnych, jest MIG ( multi-instance GPU). MIG pozwala na podzielenie obliczeń wykonywanych na GPU nawet na 7 oddzielnych niezależnych instancji. Obliczenia na tych instancjach są wykonywane jednocześnie, posiadają własną część pamięci, cache oraz jednostek SM. Nowa funkcjonalność jest genialnym rozwiązaniem, którego brakowało od lat w dziedzinie przetwarzania danych AI.

 
Rysunek 2. Przykład granulacji GPU z wykorzystaniem MIG
 

Oprócz podziału na 7 niezależnych instancji możliwa jest również granulacja na mniejszą liczbę instancji, w zależności od wymaganej mocy obliczeniowej lub dostępnej pamięci.

 
Rysunek 3. Przykładowe wielkości pojedynczej instancji GPU w MIG w zależności od wymaganej mocy obliczeniowej
 

Korzystanie z potencjału MIG nie będzie wymagało zmian w kodzie co jest świetną informacją! MIG na starcie będzie w pełni wspierać systemy z rodziny Linux, Kubernetes i kontenery. MIG w połączeniu z NVIDIA vComputeServer zapewni wsparcie dla systemów wirtualizacji tj. VMware vSphere, Red Hat Virtualization.

 

40GB HBM2 i 40MB Cache L2

Aby wykorzystać potencjał płynący z nowej architektury, NVIDIA zadbała o odpowiednią ilość pamięci na karcie. Na pokładzie znalazło się 40GB pamięci wykonanej w technologii HBM2 z przepustowością 1555GB/s, jest to wzrost o 73% w stosunku do Tesli V100. Dodatkowo zwiększona została ilość pamięci podręcznej L2 do 40MB, czyli prawie 7x więcej niż w V100.

 

Nowa generacja NVLink

Trzecia generacja NVLink, która jest zaimplementowana w architekturze Ampere zwiększa dotychczasową wydajność, skalowalność i niezawodność. Zwiększona ilość ścieżek dla każdego GPU i Switcha daje nam pomiędzy dwiema kartami podwójną prędkość w stosunku do V100 ( 50Gbit/s); maksymalna przepustowość wynosi aktualnie do 600Gbit/s.

 

Bliższe spojrzenie na nową architekturę

Chipset karty graficznej A100 jest zbudowany z wielu klastrów procesujących (GPCs), klastrów procesujących teksturowanie (TPCs), bloków SM (SM - Streaming Multiprocessors) oraz kontrolerów HBM2.

 

Pełna implementacja chipsetu GA100 jest złożona z:

  • 8 GPCs, 8 TPCs/GPC, 2 SMs/TPC, 16 SMs/GPC, 128 SMs na cały układ GPU
  • 64 FP32 CUDA Cores/SM, 8192 FP32 CUDA Cores na cały układ GPU
  • 4 Tensor Cores/SM, 512 Tensor Cores na cały układ GPU
  • 6 modułów HBM2, 12 kontrolerów pamięci o szynie 512-bit
Implementacja A100 Tensor Core GPU z chipsetu GA100 jest złożona z:
  • 7 GPCs, 7 lub 8 TPCs/GPC, 2 SMs/TPC, do 16 SMs/GPC, 108 SMs na cały układ GPU
  • 64 FP32 CUDA Cores/SM, 6912 FP32 CUDA Cores na cały układ GPU
  • 4 Tensor Cores/SM, 432 Tensor Cores na cały układ GPU
  • 5 modułów HBM2, 10 kontrolerów pamięci o szynie 512-bit
 
Rysunek 4. Chipset GA100 z 128SM
 

Architektura bloków SM w A100

Nowa konstrukcja bloków SM diametralnie zwiększa wydajność, wzbogaca możliwości zaprezentowane w poprzednich generacjach oraz dodaje nowe funkcjonalności i usprawnienia. Poniższy diagram ukazuje konstrukcję bloku SM. Karty w architekturze Volta i Turing mają po 8 Tensor Core dla bloku SM, które wykonują 64 operacji FP16/FP32 dla każdego cyklu GPU. Konstrukcja bloku SM w Ampere pozwala na 256 operacji FP16/FP32 dla każdego cyklu GPU. A100 posiada 4 Tensor Core dla bloku SM co daje nam podwójną wydajność w porównaniu do Volta i Turing.

 
Rysunek 5. Architektura bloku SM dla Ampere
 

Dodatkowo architektura bloków SM przeszła szereg zmian opisanych poniżej:

  • Tensor Core trzeciej generacji:
    • Akceleracja obliczeń dla każdego typu danych m.in. FP16, BF16, TF32, FP64, INT8, INT4, oraz liczb binarnych.
    • Nowa funkcjonalność pozwalająca na korzystanie z macierzy rzadkości przyspiesza uczenie głębokie zwiększając wydajność dwukrotnie w stosunku do operacji na akceleratorach poprzedniej generacji.
    • Obliczenia na FP32 są 10x szybsze niż na V100, a przy użyciu macierzy rzadkości nawet do 20x.
    • Obliczenia mieszane FP16/FP32 są 2,5x szybsze w porównaniu do V100, a przy użyciu macierzy rzadkości nawet 5x.
    • Tak samo szybkie jak powyżej są obliczenia BF16/FP32.
    • Obliczenia FP64 są do 2,5x szybsze w porównaniu do V100.
    • Obliczenia INT8 z użyciem macierzy rzadkości są do 20x szybsze niżeli na V100.
  • 192 KB łącznej dzielonej pamięci i pamięci podręcznej L1. Do 1,5x więcej niż na bloku SM w V100.
  • Nowa funkcjonalność instrukcji kopiowania asynchronicznego z pamięci globalnej do współdzielonej, opcjonalnie możliwe pominięcie L1 oraz wyeliminowanie potrzeby rejestracji pośredniej (RF).
  • Nowe jednostki dla pamięci współdzielonej (asynchronous barriers) do użycia z nowym zestawem instrukcji kopiowania asynchronicznego.
  • Nowe instrukcje do zarządzania pamięcią podręczną L2.
  • Nowe instrukcje redukcji na poziomie warp wspierane przez CUDA.
  • Wiele nowych usprawnień programistycznych w celu zredukowania poziomu skomplikowania oprogramowania.
 
Rysunek 6. Przykładowy wzrost wydajności dla obliczeń
 

Wzrost wydajności nowej architektury A100 względem poprzedniej generacji V100 ukazano poniżej:

 
Rysunek 6. Przykładowy wzrost wydajności dla obliczeń
 

Macierze rzadkości w A100

Wraz z nową architekturą wdrożona została nowa funkcjonalność szczegółowej strukturalnej rzadkości. Jest to nowy sposób obliczeń, który zwiększa dwukrotnie wydajność obliczeniową dla głęboki sieci neuronowych.

Korzystanie z macierzy rzadkości jest możliwe w głębokim uczeniu dzięki zmianom indywidualnych wag podczas ewoluowania w procesie uczenia. Pod koniec uczenia tylko część wag przybiera na znaczeniu w celu znalezienia końcowego wyniku. Pozostałe wagi nie są dłużej potrzebne.

Definicja macierzy rzadkości

Struktura jest wymuszona przez nową definicję macierzy rzadkości w formacie 2:4, pozwala na dwie wartości zerowe w wektorze czteroliczbowym. A100 wspiera strukturę macierzy rzadkości 2:4 w wierszach co jest ukazane na obrazie poniżej.

Dzięki dobrze zdefiniowanej strukturze macierzy może być ona skompresowana nawet do 2x w celu zredukowania zajmowanej pamięci i wykorzystania przepustowości.

 
Rysunek 7. Struktura macierzy rzadkości w A100
 

Architektura MIG

W związku z tym, że nie wszystkie obliczenia na serwerach wymagają maksymalnej wydajności obliczeniowej, została wprowadzona możliwość dzielenia instancji GPU. Dotychczasowo nie istniała taka możliwość przy korzystaniu z akceleratorów graficznych poprzednich generacji. Dzięki nowej architekturze można teraz wykonywać obliczenia na wirtualnych instancjach GPU tak jakby były one fizycznymi kartami. Użytkownicy mogą teraz uruchamiać kontenery oparte na Dockerze z użyciem MIG.

 
Rysunek 8. Obecna architektura GPU
 
Rysunek 9. Architektura GPU z wykorzystaniem MIG
 

NVIDIA Merlin

 

Wraz z zapowiedzią nowej generacji kart NVIDIA zaprezentowała nowy Framework dla systemów decyzyjnych z wykorzystaniem głębokiego uczenia. Systemy tego typu odgrywają bardzo dużą rolę w utrzymywaniu wysokiego zaangażowania klienta podczas korzystania z platformy online.

 
Rysunek 10. Architektura systemu decyzyjnego
 

NVIDIA Merlin jest frameworkiem aplikacyjnym oraz całym ekosystemem stworzonym do wdrażania tego typu rozwiązań. Składa się on z podstawowych elementów:

  • Merlin ETL: zestaw narzędzi dla szybkiego systemu rekomendacyjnego; NVTabular, który jest jego elementem, oferuje bardzo szybkie przetwarzanie danych i ich transformacje na poziomie GPU, gdzie jest możliwe korzystanie z datasetów o rozmiarach wielu terabajtów. W celu wyelminowania słabych przepustowości dane wyjściowe z NVTabular mogą być dalej przekazane - za pomocą wbudowanych data loaderów - do sieci frameworków uczących, tj. HugeCTR, PyTorch albo TensorFlow.
  • Merlin Training: kolekcja systemów głębokiego uczenia i narzędzi uczących.
    • HugeCTR to wysoko wydajny system rekomendacyjny oparty na C++, dedykowany framework trenujący. Zawiera on możliwość uczenia za pomocą wielu GPU i wielu węzłów. HugeCTR korzysta z typowych modeli uczenia tj. Wide&Deep (W&D), Deep Cross Network, DeepFM i niedługo Deep Learning Recommender Model (DLRM).
    • DLRM, W&D, Neaural Collaborative Filtering i Variational AutoEncoder tworzą zestaw narzędzi portfolio NVIDIA DL. Zestaw, pokrywa zakres architektury sieci i aplikacji w wielu domenach wykraczających poza systemy rekomendacyjne m.in. analizę obrazu, tekstu oraz mowy. Modele te są zaprojektowane i zoptymalizowane pod uczenie z wykorzystaniem TensorFlow i PyTorch.
  • Merlin Interface: NVIDIA TensorRT i NVIDIA Triton Interface Server.
    • NVIDIA TensorRT jest to SDK wykorzystywanym do szybkiego przetwarzania DL. Zawiera w sobie optymalizator wnioskowania DL i silnik uruchomieniowy, który zapewnia niską latencję oraz wysoki przepływ danych dla aplikacji DL.
    • Triton Server zapewnia rozwiązania zoptymalizowane pod kątem GPU dla wnioskowania DL, które umożliwia podłączenie wielu backendów tj. PyTorch, TensorFlow, TensorFlowRT oraz Open Neural Network Exchange. Triton Server automatycznie zarządza i wykorzystuje całe dostępne zasoby GPU i pozwala na korzystanie z wielu wersji modeli, aby później raportować ich wyniki i metryki. Pozwala to na dokładne analizowanie wydajności modeli, jak i ich dokładne porównanie.
 
Rysunek 11. Architektura Merlin
 

Bardzo ciekawym elementem zestawu Merlin jest NVTabular, który jest biblioteką do przetwarzania wstępnego, zdolną do szybkiej i łatwej manipulacji nad datasetami o rozmiarach terabajtów. Dzięki 10-20 liniom kodu napisanych pod wysoko poziomowe API możemy zyskać nawet 10x zysk wydajności w porównaniu z przetwarzaniem za pomocą CPU. NVTabular wspiera akcelerację za pomocą cuDF, ApacheSpark 3.0 i Dask-cuDF.

 
Rysunek 12. Zestawienie NVTabular z innymi bibliotekami do przetwarzania dataframe
 

Poniżej zamieszczamy kod zaprezentowany przez NVIDIA, który posłużył do przetwarzania wstępnego datasetu 1TB firmy Criteo. Na początku definiujemy kolumny numeryczne i kategoryzujące. Następnie definiujemy przepływ pracy NVTabular i załączamy zestaw danych do uczenia i walidacji.

 

import nvtabular as nvt
import glob
 
cont_names = ["I"+str(x) for x in range(1, 14)] # specify continuous feature names
cat_names = ["C"+str(x) for x in range(1, 27)] # specify categorical feature names
label_names = ["label"] # specify target feature
columns = label_names + cat_names + cont_names # all feature names
 
# initialize Workflow
proc = nvt.Worfklow(cat_names=cat_names, cont_names=cont_names, label_name=label_names)
 
# create datsets from input files
train_files = glob.glob("./dataset/train/*.parquet")
valid_files = glob.glob("./dataset/valid/*.parquet")
 
train_dataset = nvt.dataset(train_files, gpu_memory_frac=0.1)
valid_dataset = nvt.dataset(valid_files, gpu_memory_frac=0.1)
 

# add feature engineering and preprocessing ops to Workflow<
/span>
proc.add_cont_feature([nvt.ops.ZeroFill(), nvt.ops.LogOp()])
proc.add_cont_preprocess(nvt.ops.Normalize())
proc.add_cat_preprocess(nvt.ops.Categorify(use_frequency=True, freq_threshold=15))
 
# compute statistics, transform data, export to disk
proc.apply(train_dataset, shuffle=True, output_path="./processed_data/train", num_out_files=len(train_files))
proc.apply(valid_dataset, shuffle=False, output_path="./processed_data/valid", num_out_files=len(valid_files))
 

Czas przetwarzania datasetu Criteo w porównaniu z innymi technologiami jest zaprezentowany poniżej.

 
Rysunek 13. Porównanie Criteo NVTabular ( Tesla V100) vs. CPU (AWS r5d.24xl, 96 rdzeni, 768GB RAM)
 

W tym wpisie zawarte zostały opisy części nowych technologii, w przyszłych tygodniach pojawią się kolejne.