Din ultimul deceniu, am văzut GPU-ul intrând mai des în scenă în domenii precum HPC (High-Performance Computing) și cel mai popular domeniu, și anume jocurile. GPU-urile s-au îmbunătățit de la an la an și acum sunt capabile să facă lucruri incredibil de grozave, dar în ultimii câțiva ani, ele captează și mai multă atenție datorită învățării profunde.

Pentru că modelele de învățare profundă petrec o cantitate mare de timp în formare, chiar și CPU-urile puternice nu erau suficient de eficiente pentru a gestiona atât de multe calcule la un moment dat și acesta este domeniul în care GPU-urile au depășit pur și simplu CPU-urile datorită paralelismului lor. Dar înainte de a intra în profunzime, haideți mai întâi să înțelegem câteva lucruri despre GPU.

Ce este GPU?

Un GPU sau „unitate de procesare grafică” este o versiune mini a unui computer întreg, dar dedicat doar unei sarcini specifice. Spre deosebire de o unitate centrală de procesare care efectuează mai multe sarcini în același timp. GPU vine cu propriul procesor care este încorporat pe propria placă de bază, cuplat cu v-ram sau video ram, și, de asemenea, un design termic adecvat pentru ventilație și răcire.

GPU pentru Deep Learning

sursa(Gamers Nexus)
În termenul „unitate de procesare grafică”, „grafică” se referă la redarea unei imagini la coordonate specificate pe un spațiu 2d sau 3d. Un viewport sau un punct de vedere reprezintă perspectiva privitorului de a privi un obiect, în funcție de tipul de proiecție utilizat. Rasterizarea și Ray-tracing sunt unele dintre modalitățile de redare a scenelor 3D, ambele concepte bazându-se pe un tip de proiecție numit proiecție în perspectivă. Ce este proiecția în perspectivă?

Pe scurt, este modul în care o imagine este formată pe un plan de vizualizare sau pe o pânză în care liniile paralele converg către un punct de convergență numit „centrul de proiecție”, de asemenea, pe măsură ce obiectul se îndepărtează de punctul de vedere, acesta pare mai mic, exact cum arată ochii noștri în lumea reală și acest lucru ajută la înțelegerea profunzimii într-o imagine, acesta fiind motivul pentru care produce imagini realiste.

În plus, GPU-urile procesează și geometrie complexă, vectori, surse de lumină sau iluminări, texturi, forme etc. Deoarece acum avem o idee de bază despre GPU, haideți să înțelegem de ce este foarte utilizat pentru învățarea profundă.

De ce GPU-urile sunt mai bune pentru învățarea profundă?

Una dintre cele mai admirate caracteristici ale unui GPU este capacitatea de a calcula procesele în paralel. Acesta este punctul în care intervine conceptul de calcul paralel. Un procesor, în general, își îndeplinește sarcina într-o manieră secvențială. O unitate centrală de procesare poate fi împărțită în nuclee și fiecare nucleu se ocupă de o sarcină la un moment dat. Să presupunem că un CPU are 2 nuclee. Atunci procesele a două sarcini diferite pot rula pe aceste două nuclee, realizând astfel multitasking.

Dar totuși, aceste procese se execută în mod serial.

GPU pentru Deep Learning
sursa(Exemple de exemple)
Aceasta nu înseamnă că procesoarele nu sunt suficient de bune. De fapt, procesoarele sunt foarte bune în a gestiona diferite sarcini legate de diferite operațiuni, cum ar fi manipularea sistemelor de operare, manipularea foilor de calcul, redarea de videoclipuri HD, extragerea de fișiere zip de mari dimensiuni, toate în același timp. Acestea sunt câteva lucruri pe care un GPU pur și simplu nu le poate face.

Unde se află diferența?

GPU pentru Deep Learning

sursa(NVIDIA)
După cum am discutat anterior, o unitate centrală de procesare este împărțită în mai multe nuclee, astfel încât acestea să poată prelua mai multe sarcini în același timp, în timp ce GPU va avea sute și mii de nuclee, toate acestea fiind dedicate unei singure sarcini. Acestea sunt calcule simple care sunt efectuate mai frecvent și sunt independente unele de altele. Și ambele stochează datele solicitate frecvent în memoria cache respectivă, urmând astfel principiul „referinței de localitate”.

GPU pentru Deep Learning

sursa(NVIDIA)

Există multe programe și jocuri care pot profita de GPU pentru execuție. Ideea din spatele acestui lucru este de a face ca unele părți ale sarcinii sau ale codului aplicației să fie paralele, dar nu și procesele întregi. Acest lucru se datorează faptului că majoritatea proceselor sarcinii trebuie să fie executate doar în mod secvențial. De exemplu, conectarea la un sistem sau la o aplicație nu trebuie să se facă în paralel.

Când există o parte a execuției care poate fi realizată în paralel, aceasta este pur și simplu transferată către GPU pentru procesare, unde, în același timp, sarcina secvențială este executată în CPU, apoi ambele părți ale sarcinii sunt din nou combinate împreună.

În piața GPU, există doi jucători principali, și anume AMD și Nvidia. GPU-urile Nvidia sunt utilizate pe scară largă pentru învățarea profundă, deoarece au un sprijin extins în software-ul forumului, drivere, CUDA și cuDNN. Deci, în ceea ce privește AI și învățarea profundă, Nvidia este pionierul de mult timp.

Se spune că rețelele neuronale sunt jenant de paralele, ceea ce înseamnă că calculele din rețelele neuronale pot fi executate în paralel cu ușurință și sunt independente unele de altele.

GPU pentru Deep Learning

Câteva calcule, cum ar fi calculul ponderilor și al funcțiilor de activare ale fiecărui strat, backpropagarea pot fi efectuate în paralel. Există, de asemenea, multe lucrări de cercetare disponibile pe această temă.
GPU-urile NVIDIA vin cu nuclee specializate, cunoscute sub numele de nuclee CUDA, care ajută la accelerarea învățării profunde.

Ce este CUDA?

CUDA înseamnă „Compute Unified Device Architecture” (Arhitectura dispozitivelor unificate de calcul), care a fost lansată în anul 2007, este o modalitate prin care puteți obține calcul paralel și puteți obține cel mai mult din puterea GPU-ului într-un mod optimizat, ceea ce duce la o performanță mult mai bună în timpul executării sarcinilor.

Imagine pentru post

sursa(NVIDIA)
Kit-ul de instrumente CUDA este un pachet complet care constă într-un mediu de dezvoltare care este utilizat pentru a crea aplicații care utilizează GPU. Acest set de instrumente conține în principal un compilator c/c++, un depanator și biblioteci. De asemenea, runtime-ul CUDA are driverele sale, astfel încât să poată comunica cu GPU-ul. CUDA este, de asemenea, un limbaj de programare special conceput pentru a instrui GPU-ul în vederea îndeplinirii unei sarcini. Este, de asemenea, cunoscut sub numele de programare GPU.
Mai jos este un program simplu hello world doar pentru a avea o idee despre cum arată codul CUDA.

/* hello world program in cuda *\#include<stdio.h>#include<stdlib.h>#include<cuda.h>__global__ void demo() { printf("hello world!,my first cuda program");}int main() { printf("From main!\n"); demo<<<1,1>>>(); return 0;}

Imagine pentru post

output

Ce este CUDNN?

Imagine pentru post

Sursa(Hyper Linuxer)

cuDNN este o bibliotecă de rețele neuronale care este optimizată pentru GPU și poate profita din plin de Nvidia GPU. Această bibliotecă constă în implementarea convoluției, propagării înainte și înapoi, a funcțiilor de activare și a pooling-ului. Este o bibliotecă obligatorie fără de care nu puteți utiliza GPU pentru antrenarea rețelelor neuronale.

Un salt mare cu nucleele Tensor!

Înapoi în anul 2018, Nvidia a lansat o nouă gamă de GPU-uri ale sale, și anume seria 2000. Denumite și RTX, aceste plăci vin cu nuclee tensoriale care sunt dedicate învățării profunde și se bazează pe arhitectura Volta.

Imagine pentru post

Sursa(Anand Tech)
Corele tensoriale sunt nuclee particulare care efectuează înmulțirea matricială a matricei 4 x 4 FP16 și adunarea cu matricea 4 x 4 FP16 sau FP32 în semiprecizie, ieșirea va avea ca rezultat o matrice 4 x 4 FP16 sau FP32 cu precizie totală.
Nota: „FP” reprezintă virgulă mobilă pentru a înțelege mai multe despre virgulă mobilă și precizie, consultați acest blog.

După cum a declarat Nvidia, noua generație de nuclee tensoriale bazate pe arhitectura volta este mult mai rapidă decât nucleele CUDA bazate pe arhitectura Pascal. Acest lucru a dat un impuls uriaș învățării profunde.

Imagine pentru post

sursa(NVIDIA)

În momentul scrierii acestui blog, Nvidia a anunțat cea mai recentă serie 3000 din gama lor de GPU-uri care vin cu arhitectura Ampere. În aceasta, au îmbunătățit performanța nucleelor tensoriale de 2 ori. De asemenea, aducând noi valori de precizie precum TF32(tensor float 32), FP64(floating point 64). TF32 funcționează la fel ca FP32, dar cu o creștere a vitezei de până la 20 de ori, ca urmare a acestui lucru, Nvidia susține că timpul de inferență sau de instruire a modelelor va fi redus de la săptămâni la ore.

AMD vs Nvidia

Imagine pentru post

sursa(Tom’s Hardware)

GPU-urile AMD sunt decente pentru jocuri, dar de îndată ce intră în scenă învățarea profundă, atunci pur și simplu Nvidia este cu mult în față. Aceasta nu înseamnă că GPU-urile AMD sunt rele. Este din cauza optimizării software-ului și a driverelor care nu sunt actualizate în mod activ, pe partea Nvidia au drivere mai bune cu actualizări frecvente și, în plus, CUDA, cuDNN ajută la accelerarea calculului.

Câteva biblioteci bine cunoscute, cum ar fi Tensorflow, PyTorch, susțin CUDA. Aceasta înseamnă că pot fi utilizate GPU-uri entry-level din seria GTX 1000. În ceea ce privește AMD, are foarte puțin suport software pentru GPU-urile lor. În ceea ce privește partea hardware, Nvidia a introdus nuclee tensoriale dedicate. AMD are ROCm pentru accelerare, dar nu este la fel de bun ca nucleele tensoriale, iar multe biblioteci de învățare profundă nu acceptă ROCm. În ultimii câțiva ani, nu s-a observat un salt mare în ceea ce privește performanța.

Datorită tuturor acestor puncte, Nvidia excelează pur și simplu în învățarea profundă.

Rezumat

În concluzie, din tot ceea ce am învățat, este clar că, deocamdată, Nvidia este lider de piață în ceea ce privește GPU, dar sper din tot sufletul ca și AMD să ne ajungă din urmă în viitor sau cel puțin să facă unele îmbunătățiri remarcabile în viitoarea gamă de GPU-uri, deoarece deja fac o treabă excelentă în ceea ce privește CPU-urile lor i.De exemplu, seria Ryzen.

Amplasamentul GPU-urilor în anii următori este uriaș, pe măsură ce vom face noi inovații și progrese în învățarea profundă, învățarea automată și HPC. Accelerarea GPU va fi întotdeauna utilă pentru mulți dezvoltatori și studenți pentru a intra în acest domeniu, deoarece prețurile lor sunt, de asemenea, din ce în ce mai accesibile. De asemenea, mulțumim comunității largi care contribuie, de asemenea, la dezvoltarea inteligenței artificiale și a HPC.

Despre autor

Prathmesh Patil

Prathmesh Patil

Prathmesh Patil

Antrionat de ML, Știința datelor, dezvoltator Python.

LinkedIn: https://www.linkedin.com/in/prathmesh

Lasă un răspuns

Adresa ta de email nu va fi publicată.