Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products

Techniky optimalizace pro učení ChexNet na serveru Dell C4140 s grafickými kartami Nvidia V100

Summary: Vzorové postupy k dosažení maximálního výkonu distribuovaného škálovaného učení modelu CheXNet s využitím grafických karet Nvidia V100 SXM2 v serverech Dell EMC C4140.

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

Článek napsali Rakshith Vasudev a John Lockman – HPC AI Innovation Lab v říjnu 2019

Cause

  -

Resolution

Jak již bylo uvedeno dříve, CheXNet je model AI asistenta rentgenu, který využívá síť DenseNet k identifikaci až 14 patologií z daného rentgenového snímku hrudníku. Prozkoumali jsme několik přístupů, jak škálovat učení modelu, aby mohl fungovat stejně, nebo dokonce lépe než původní model CheXNet-121. Síť ResNet-50 přitom slibuje zlepšení na poli škálovatelnosti a přesnosti školení (pozitivní AUROC). Autoři demonstrovali škálovatelnost v systémech s procesory, nicméně my chceme využít paralelismus grafických karet k urychlení procesu učení. V tomto článku popisujeme vzorové postupy k dosažení maximálního výkonu distribuovaného, horizontálně škálovaného učení modelu CheXNet s využitím grafických karet Nvidia V100 SXM2 v serverech Dell EMC C4140. Server Dell EMC PowerEdge C4140 poskytuje hustotu a výkon díky čtyřem grafickým kartám Nvidia V100 v konfiguraci SXM2.


 

Konfigurace hardwaru: Konfigurace softwaru:
  • 4x PowerEdge C4140
  • 4x grafická karta Nvidia V100 32 GB SXM2
  • 2x 20jádrový procesor Intel(R) Xeon(R) Gold 6148 s frekvencí 2,40 GHz
  • 384 GB paměti RAM DDR4 2 666 MHz
  • 1x Mellanox EDR HCA
  • Systém souborů Lustre
  • Rámec hlubokého učení: tensorflow-gpu
  • Verze rámce: 1.12.0
  • Verze Horovod: 0.16.4
  • Verze MPI: 4.0.0 s podporou cuda a ucx
  • Verze CUDA: 10.1.105
  • Verze CUDNN: 7.6.0
  • Verze NCCL: 2.4.7
  • Verze Python: 3.6.8
  • Operační systém a verze: RHEL 7.4


 


K dosažení maximálního výkonu vašich akcelerátorů je nezbytný datový kanál:



 

Co jsou data tf a proč byste je měli chtít používat?

 

Jelikož nová výpočetní zařízení (jako grafické karty a jednotky TPU) umožňují stále rychleji učit neuronové sítě, procesor se může stát omezujícím faktorem. Rozhraní API tf.data poskytuje uživatelům stavební bloky pro návrh vstupních kanálů, které efektivně využívají procesor a optimalizují každý krok procesu ETL.

 

Chcete-li provést krok učení, musíte nejprve extrahovat a transformovat školicí data a poté je předat modelu na akcelerátoru. Zatímco však procesor v synchronní implementaci připravuje data, akcelerátor je nečinný. Naopak když akcelerátor učí model, je nečinný procesor. Čas kroku učení tedy představuje součet doby přípravného zpracovávání procesoru a doby učení akcelerátoru.

 

Pipelining se překrývá s předběžným zpracováváním a modelovým provedením kroku učení. Když akcelerátor provádí krok učení N, procesor připravuje data na krok N+1. Tím se zkrátí čas kroku na maximum (na rozdíl od součtu) učení a doba potřebná k extrahování a transformaci dat.

 

Bez pipeliningu jsou procesor a grafická karta / jednotka TPU po většinu času nečinné:

SLN318898_en_US__1Sequantial execution
Obr. 1: Sekvenční spouštění často ponechá grafickou kartu v nečinnosti

 

Díky pipeliningu se doba nečinnosti výrazně snižuje:

SLN318898_en_US__2Pipelining overlaps
Obr. 2: Pipelining překrývá využití procesoru a grafické karty a maximalizuje využití grafické karty

 

Rozhraní tf.data API poskytuje mechanismus pipeliningu softwaru prostřednictvím transformace tf.data.Dataset.prefetch, který lze použít k oddělení času produkce dat od času konzumace dat. Transformace využívá konkrétně vlákno na pozadí a interní vyrovnávací paměť k předběžnému načítání prvků ze vstupní datové sady, než jsou potřeba.

 

Další informace naleznete zde: https://www.tensorflow.org/guide/performance/datasets

 

Pokud se budete řídit pokyny softwaru Tensorflow, můžete získat datový kanál, který vypadá takto (starý přístup):
https://github.com/dellemc-hpc-ai/code-examples/blob/master/cheXNet-snippets/old_approach.py

 

V tomto přístupu označovaném také jako starý přístup datový kanál tf provádí následující operace (za předpokladu, že datová sada rentgenového snímku hrudníku je sekvence formátu TFRecords):

 

  1. Získává absolutní seznam názvů souborů.
  2. Sestavuje datovou sadu ze seznamu názvů souborů pomocí funkce TFRecordDataset().
  3. Vytváří novou datovou sadu, která načítá a formátuje snímky pomocí předběžného zpracování.
  4. Rozděluje datovou sadu.
  5. Míchá datovou sadu při učení.
  6. Opakuje datovou sadu.
  7. Dávkuje datovou sadu.
  8. Předběžně načítá datovou sadu pro parametr batch_size.


 

Nejedná se však o nejvýkonnější kód. Způsobuje zamrzání a časté využití grafické karty na 0 %. V zásadě nevyužívá akcelerátory efektivně.

Ke správnému nastavení datového kanálu tf se řídíme přístupem, který využívají oficiální modely Tensorflow, konkrétně ten pro model ResNet.  Rozdíl mezi starým a novým přístupem spočívá v nastavení datového kanálu, než jej předáte modelu.

 

Nový přístup vypadá takto:
https://github.com/dellemc-hpc-ai/code-examples/blob/master/cheXNet-snippets/new_approach.py

 

Oficiální přístup modelů TensorFlow, označovaný také jako nový přístup, je následující:

 

  1. Získává absolutní seznam názvů souborů.
  2. Sestavuje datovou sadu ze seznamu názvů souborů pomocí funkce from_tensor_slices().
  3. Dělení se provádí předem.
  4. Datová sada je zamíchána během učení.
  5. Datová sada se poté se paralelně prokládá. Jedná se o prokládání a zpracovávání více souborů (definovaných parametrem cycle_length) za účelem jejich transformace a vytvoření datové sady TFRecord.
  6. Datová sada se poté předem načte. Parametr buffer_size definuje, kolik záznamů se předem načte, což obvykle představuje mini batch_size úlohy.
  7. Datová sada se opět zamíchá. Podrobnosti o míchání kontroluje parametr buffer_size.
  8. Datová sada se zopakuje.  Datová sada se opakuje, dokud nedojde k naučení parametru num_epochs.
  9. Datová sada je vystavena souběžné funkci map_and_batch(), která analyzuje soubory záznamu tf a následně provádí předběžné zpracovávání a dávkování snímků.
  10. Předem zpracované snímky jsou připraveny jako datová sada a znovu dojde k jejich předběžnému načtení.


 

Zde je uvedeno srovnání výkonu starých i nových přístupů s využitím oficiálních modelů TF.

SLN318898_en_US__3image(12053)
Obr. 3: Díky novému přístupu je možné očekávat téměř lineární škálování.

 

Jak je vidět, jedná se o výraznou změnu ve výkonu a v případě starého přístupu není k dispozici žádné škálování. U grafických karet často docházelo k minimálnímu až žádnému využití, což vedlo k zastavení výkonu. Pokud komunikace probíhá správně, zefektivnění výpočetního výkonu u jedné grafické karty se projeví ve zefektivnění více grafických karet na několika uzlech.
To, že procesory provádí předběžné zpracování paralelně a předběžně načítají zpracovaná data v paměti a grafických kartách, které provádí náročné úkony maticové multiplikace pomocí rychlé komunikace, je dalším aspektem, díky kterému je tento nový přístup atraktivnější pro škálování u více uzlů.


 


Další metody, kterým je třeba věnovat pozornost, pokud chcete dosáhnout optimálního výkonu:



 

Důležité je používat správné prostředí:

 

Prostředí, které spouští vaše úlohy, je stejně důležité jako úlohy samotné, protože správnost knihoven/modulů ovlivňuje výkon učení. Ke zlepšení výkonu mohou pomoci také nejnovější knihovny související s architekturou CUDA.

Pokud nemáte nastaveno funkční prostředí, postupujte podle tohoto návodu.



 

Použití správných parametrů vazby pro knihovnu MPI:

 

MPI je komunikační knihovna, která pomáhá platformě Horovod distribuovat úlohy. Byly prozkoumány různé možnosti vazeb a mapování parametrů. Nejlepších parametrů v případě serveru C4140 bylo dosaženo pomocí mapování podle soketu. Následuje doporučené nastavení:
mpirun --map-by socket -np x python pyfile.py --pyoptions



 

Ujistěte se, že na jedné grafické kartě probíhá jeden proces:

 

Pokud na jedné grafické kartě probíhá více než jeden proces, mohou soupeřit o prostředky grafické karty, zabírat paměť karty a efektivně neumisťovat více snímků na dávku. Tudíž jsou zodpovědné za snížení výkonu grafické karty. Byl prozkoumán software Tensorflow 1.13.1, ale zdá se, že v té době obsahoval chybu. Na jedné grafické kartě spouštěl více než jeden proces.


 

Shrnutí:

  • Ke zlepšení výkonu je zásadní správné nastavení datového kanálu.
  • Správné nastavení velmi přispívá k vyššímu výkonu.
  • Výkon zlepšuje také použití správných parametrů vazby MPI.
  • Profilujte a opravujte problematická místa, když nejsou grafické karty plně využívány.


 


Affected Products

High Performance Computing Solution Resources, Poweredge C4140
Article Properties
Article Number: 000124384
Article Type: Solution
Last Modified: 17 Sep 2021
Version:  5
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.