Contents
Dit is de derde post in de CUDA Refresher-serie, die tot doel heeft de belangrijkste concepten in CUDA, tools, en optimalisatie voor beginnende of halfgevorderde ontwikkelaars.
Eenvoud van programmeren en een enorme sprong in prestaties is een van de belangrijkste redenen voor de wijdverbreide acceptatie van het CUDA-platform. De op één na grootste reden voor het succes van het CUDA-platform is de beschikbaarheid van een breed en rijk ecosysteem.
Zoals elk nieuw platform, was het succes van CUDA afhankelijk van tools, bibliotheken, applicaties en partners die beschikbaar waren voor het CUDA-ecosysteem. Elk nieuw computerplatform heeft ontwikkelaars nodig om applicaties over te zetten naar een nieuw platform. Om dat te doen, hebben ontwikkelaars geavanceerde tools en ontwikkelomgevingen nodig.
Nadat applicaties beginnen te schalen, zijn meer tools essentieel op datacenterniveau. NVIDIA streeft ernaar geavanceerde tools en ecosysteemdiensten te leveren aan ontwikkelaars en ondernemingen.
NVIDIA heeft onlangs de nieuwste A100-architectuur en DGX A100-systeem aangekondigd op basis van deze nieuwe architectuur. De nieuwe A100 GPU wordt ook geleverd met een rijk ecosysteem.
Afbeelding 1 toont de bredere ecosysteemcomponenten die zich in een periode van meer dan 15 jaar hebben ontwikkeld. In dit bericht duik ik in de inleidende details van elk onderdeel van het ecosysteem.
Programmeertalen en API's
CUDA 1.0 begon met ondersteuning voor alleen de programmeertaal C, maar dit is in de loop der jaren geëvolueerd. CUDA staat nu meerdere programmeertalen op hoog niveau toe om GPU's te programmeren, waaronder C, C++, Fortran, Python, enzovoort.
NVIDIA heeft de CUDA-toolkit uitgebracht, die een ontwikkelomgeving biedt met behulp van de C/C++ programmeertalen. Met deze toolkit kunt u applicaties op GPU's ontwikkelen, optimaliseren en implementeren. NVIDIA biedt ook een PGI-toolkit om te programmeren in de Fortran-taal.
Er zijn ook veel toolketens van derden beschikbaar:
- PyCUDA—Gebruik CUDA API-bewerkingen vanuit een Python-interface.
- Altimesh Hybridizer—Genereer CUDA C-broncode van . NET-assemblies (MSIL) of Java-archieven (java bytecode).
- OpenACC: gebruik instructies om GPU's en door compilers gegenereerde CUDA-code te programmeren voordat deze wordt uitgevoerd op CUDA GPU's.
- OpenCL: gebruik laag API-bewerkingen op niveau om CUDA GPU's te programmeren.
- Alea-GPU—Programmeer CUDA GPU's met het .NET-framework.
Bibliotheken
Bibliotheken zijn essentieel voor het leveren van drop-in prestaties voor veelgebruikte routines in elke programmeeromgeving. Ze zijn goed geoptimaliseerd voor de doelcomputerarchitectuur en zijn van hoge softwarekwaliteit. Ze besparen ook applicatie-ontwikkelingstijd en bieden de gemakkelijkste manier om aan de slag te gaan met GPU-versnelling.
NVIDIA biedt een laag bovenop het CUDA-platform genaamd CUDA-X, , een verzameling bibliotheken, tools en technologieën. GPU-versnelde CUDA-bibliotheken maken drop-in-versnelling mogelijk in meerdere domeinen, zoals lineaire algebra, beeld- en videoverwerking, deep learning en grafiekanalyse. Voor het ontwikkelen van aangepaste algoritmen kunt u gebruikmaken van beschikbare integraties met veelgebruikte talen en numerieke pakketten, evenals goed gepubliceerde ontwikkelings-API-bewerkingen.
De NVIDIA CUDA-toolkit wordt geleverd met een brede verzameling veelgebruikte bibliotheken. Veel partners dragen ook veel bibliotheken bij op het CUDA-platform. Hier is een lijst van enkele veelgebruikte bibliotheken:
- Wiskundige bibliotheken: cuBLAS, cuRAND, cuFFT, cuSPARSE, cuTENSOR, cuSOLVER
- Parallelle algoritme-bibliotheken: nvGRAPH, Thrust
- Beeld- en videobibliotheken: nvJPEG, NPP, Optical Flow SDK
- Communicatiebibliotheken: NVSHMEM, NCCL
- Deep learning-bibliotheken: cuDNN, TensorRT, Jarvis, DALI
- Partnerbibliotheken: OpenCV, FFmpeg, ArrayFire, MAGMA
Profilerings- en foutopsporingstools
Een van de essentiële elementen van elke programmeerarchitectuur zijn robuuste en efficiënte tools om programma's te schrijven, te debuggen en te optimaliseren. Het CUDA-ecosysteem is robuust en NVIDIA heeft enorm veel moeite gedaan om ervoor te zorgen dat u over alle benodigde tools beschikt om snel, gemakkelijk en efficiënt te schrijven.
Hier is een voorbeeld van CUDA-profilerings- en foutopsporingstools :
- NVIDIA Nsight: dit is een tool voor profilering, tracering en foutopsporing met weinig overhead. Het biedt een op GUI gebaseerde omgeving om te schalen over een breed scala aan NVIDIA-platforms, zoals grote multi-GPU x86-servers, Quadro-werkstations, enzovoort.
- CUDA GDB: dit is een uitbreiding van Linux GDB , die een consolegebaseerde foutopsporingsinterface biedt die u vanaf de opdrachtregel kunt gebruiken. CUDA GDB kan worden gebruikt op uw lokale systeem of op een ander systeem op afstand. Op GUI gebaseerde plug-ins zijn ook beschikbaar, bijvoorbeeld DDD, EMACS of Nsight Eclipse Edition.
- CUDA-Memcheck—Een onmisbare tool die inzicht geeft in problemen met geheugentoegang door de duizenden threads die gelijktijdig worden uitgevoerd te onderzoeken.
Er zijn ook veel oplossingen van derden beschikbaar, waaronder de volgende:
- ARM Forge
- TotalView Debugger
- PAPI CUDA Component
- TAU Performance System
- VampirTrace< /li>
Datacentertools en clusterbeheer
NVIDIA GPU's bieden enorme versnelling van applicaties en deze applicaties worden verder opgeschaald naar een groot aantal GPU's. Veel wetenschappelijke toepassingen, zoals moleculaire dynamica en kwantumchemie, en ook AI-toepassingen hebben een cluster van GPU's nodig om de applicatieprestaties uit te schalen naar duizenden GPU's die zijn verbonden via een snel netwerk. De moderne datacenters zijn gebouwd met NVIDIA GPU's en Mellanox high-speed interconnect om de applicaties te schalen voor enorme schaalprestaties.
U hebt een geavanceerd ecosysteem nodig om eenvoudig in datacenters te kunnen worden geïmplementeerd. Ondernemingen hebben tools nodig om deze dichte datacenters eenvoudig te beheren en te runnen. NVIDIA werkt nauw samen met ecosysteempartners om ontwikkelaars en DevOps softwaretools te bieden voor elke stap van de AI- en HPC-softwarelevenscyclus.
Hier zijn enkele van de inspanningen waaraan NVIDIA werkt om dit ecosysteem te versterken:
- Containerregistratie
- Planning en orkestratie
- Clusterbeheertools
- Monitoringtools
Containers
Containers zijn de moderne manier om applicaties eenvoudig te implementeren. NVIDIA levert alle deep learning- en HPC-containers van NVIDIA NGC. Deze containers zijn getest, onderhouden en goed geoptimaliseerd door NVIDIA. NGC biedt ook een manier om containers van derden te hosten. Organisaties kunnen er ook voor kiezen om private containerrepositories te hebben.
Planning en orkestratie
Planning en orkestratie is een ander belangrijk aspect van datacenterbeheer en -activiteiten. Kubernetes is het moderne en populaire container-orkestratiesysteem voor het automatiseren van applicatie-implementatie, schaling en beheer. Kubernetes op NVIDIA GPU's breidt het industriestandaard containerorkestratieplatform uit met GPU-versnellingsmogelijkheden. Kubernetes biedt state-of-the-art ondersteuning voor NVIDIA GPU-resourceplanning.
Clusterbeheertools
Belangrijke standaard clusterbeheertools bieden ondersteuning voor NVIDIA GPU's. Enkele voorbeelden zijn Bright Cluster, Ganglia, StackIQ en Altair PBS Works.
Bewakingstools
NVIDIA biedt ook een reeks tools genaamd DCGM voor het beheer en de bewaking van GPU's in clusteromgevingen. NVIDIA stelt ook een API-gebaseerde interface beschikbaar om GPU's te monitoren door NVML API's. Met behulp van deze tools kan het ops-team van het datacenter continu actieve gezondheidsmonitoring, uitgebreide diagnostiek, systeemwaarschuwingen en governancebeleid uitvoeren, inclusief stroom- en klokbeheer. Deze tools kunnen zowel standalone als geïntegreerd worden gebruikt met alle industriestandaard toolsuites. Je kunt ook je eigen tools bouwen met NVML API-bewerkingen.
CUDA-ecosysteem en GPU-versnelde applicaties
Na de release van CUDA in 2006 hebben ontwikkelaars veel applicaties naar CUDA geporteerd.
De eerste groep ontwikkelaars die applicaties begonnen te porten was de wetenschappelijke gemeenschap. Deze community porteerde veel standaardapplicaties, evenals code van eigen bodem. Toepassingen met inherent parallellisme, zoals beeld- en videoverwerking, waren een van de eerste use-cases die naar CUDA werden overgezet.
Deep learning was een ander voorbeeld waarbij massaal parallellisme hielp om applicaties te versnellen. Bijna elk deep learning-framework gebruikt tegenwoordig CUDA/GPU-computing om deep learning-training en inferentie te versnellen.
NVIDIA houdt een catalogus bij waarin alle GPU-versnelde applicaties worden vermeld. Deze lijst is slechts een subset van applicaties die zijn versneld door GPU-computing. Veel applicaties zijn in-house en komen niet op deze lijst.
GPU's overal
De brede acceptatie van CUDA vereist dat elke ontwikkelaar die een GPU nodig heeft, CUDA-code en poorttoepassingen ontwikkelt. Vele jaren eerder besloot NVIDIA dat elke GPU die door NVIDIA is ontworpen de CUDA-architectuur zal ondersteunen:
- GeForce GPU's voor gaming en notebooks
- Quadro GPU's voor professionele visualisatie
- Datacenter GPU's
- Tegra voor embedded SoC's
Een enkele rekenarchitectuur voor alle productlijnen met achterwaartse compatibiliteit van CUDA maakt dit platform de keuze van een ontwikkelaar. U hebt toegang tot GPU's op laptops en pc's, werkstations, servers en embedded apparaten, en voert overal dezelfde CUDA-code uit. Elke cloudserviceprovider ter wereld maakt gebruik van door CUDA ondersteunde GPU's.
Samenvatting
NVIDIA streeft naar een brede en rijke ecosysteemondersteuning voor CUDA-ontwikkelaars. Een groot team van ingenieurs is continu bezig om ervoor te zorgen dat u over het juiste gereedschap beschikt. Dit is waar CUDA-ontwikkelaars hun voordeel mee kunnen doen:
- Ontwikkeling van CUDA-code met uitgebreide programmeertaalondersteuning en ontwikkelomgevingstools zoals debugger, profiler, enzovoort.
- Drop -in versnelling naar een applicatie door afgestemde, geteste en onderhouden bibliotheken.
- Gemak van implementatie met afgestemde en geteste containers en hun beschikbaarheid op NVIDIA NGC.
- Hulpprogramma's om het uitschalen van applicaties te ondersteunen in een clusteromgeving.
- Een breder scala aan applicaties versneld met CUDA.
Pradeep Gupta
Directeur, Solutions Architecture and Engineering Team, NVIDIA