Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker

Această postare este scrisă împreună cu Chaim Rand de la Mobileye.

Anumite sarcini de lucru de învățare automată (ML), cum ar fi formarea modelelor de viziune computerizată sau învățarea prin întărire, implică adesea combinarea sarcinii de formare a modelelor de rețea neuronală care necesită un GPU sau un accelerator cu sarcina de preprocesare a datelor, care necesită mult CPU, cum ar fi creșterea imaginii. Când ambele tipuri de sarcini rulează pe același tip de instanță, preprocesarea datelor devine blocată pe CPU, ceea ce duce la o utilizare mai scăzută a GPU-ului. Această problemă se agravează odată cu trecerea timpului, deoarece randamentul generațiilor mai noi de GPU crește într-un ritm mai abrupt decât cel al procesoarelor.

Pentru a aborda această problemă, în iulie 2022, noi a lansat clustere eterogene pt Amazon SageMaker model training, care vă permite să lansați joburi de instruire care utilizează diferite tipuri de instanțe într-un singur job. Acest lucru permite descărcarea unor părți din conducta de preprocesare a datelor către optimizat pentru calcul tipuri de instanțe, în timp ce sarcina de rețea neuronală profundă (DNN) continuă să ruleze GPU sau computer accelerat tipuri de instanțe. Valorile noastre de referință arată un beneficiu de performanță preț de până la 46% după activarea clusterelor eterogene într-un antrenament de model TensorFlow de viziune computerizată legat de CPU.

Pentru un caz de utilizare similar, mobileye, o companie de dezvoltare a tehnologiilor pentru vehicule autonome, a avut de împărtășit:

„Prin mutarea procesului de instruire a modelului de viziune pe computer pentru a rula mai multe tipuri de instanțe (acceleratoare CPU și GPU/ML), folosind o tf.data.service pe care am construit-o, am reușit să reducem timpul de antrenament cu 40%, reducând în același timp costul de antrenament cu 30%. Suntem încântați de clusterele eterogene care ne permit să rulăm această soluție pe Amazon SageMaker.”

— AI Engineering, Mobileye

În această postare, discutăm următoarele subiecte:

  • Cum clusterele eterogene ajută la eliminarea blocajelor CPU
  • Când să folosiți clustere eterogene și alte alternative
  • Implementări de referință în PyTorch și TensorFlow
  • Rezultate de referință de performanță
  • Clustere eterogene la Mobileye

AWS instanță de calcul accelerată familia include acceleratoare de la cipuri personalizate AWS (Inferentia AWS, AWS Trainium), NVIDIA (unități de procesare grafică), Şi Acceleratoare Gaudi de la Habana Labs (o companie Intel). Rețineți că în această postare, folosim termenii GPU și accelerator în mod interschimbabil.

Cum clusterele eterogene elimină blocajele de procesare a datelor

Oamenii de știință de date care antrenează modele de învățare profundă urmăresc să maximizeze eficiența costurilor de formare și să minimizeze timpul de instruire. Pentru a realiza acest lucru, un obiectiv de bază al optimizării este acela de a avea o utilizare ridicată a GPU-ului, cea mai scumpă și mai puțină resursă din Cloud Elastic de calcul Amazon (Amazon EC2). Acest lucru poate fi mai dificil cu sarcinile de lucru ML care combină propagarea înainte și înapoi a modelului clasic de rețea neuronală intensivă în GPU cu sarcini intensive de CPU, cum ar fi procesarea și creșterea datelor în viziunea computerizată sau rularea unei simulări de mediu în învățarea prin consolidare. Aceste sarcini de lucru pot ajunge să fie legate de CPU, în cazul în care a avea mai mult CPU ar avea ca rezultat un debit mai mare și un antrenament mai rapid și mai ieftin, deoarece acceleratoarele existente sunt parțial inactive. În unele cazuri, blocajele CPU pot fi rezolvate prin trecerea la un alt tip de instanță cu un raport CPU:GPU mai mare. Cu toate acestea, există situații în care trecerea la un alt tip de instanță ar putea să nu fie posibilă din cauza arhitecturii familiei de instanțe, a spațiului de stocare sau a dependențelor de rețea.

În astfel de situații, trebuie să creșteți cantitatea de putere a procesorului amestecând tipuri de instanțe: instanțe cu GPU împreună cu CPU. Însumat împreună, acest lucru are ca rezultat un raport general mai mare CPU:GPU. Până de curând, joburile de instruire SageMaker erau limitate la a avea instanțe ale unui singur tip de instanță ales. Cu clusterele eterogene SageMaker, oamenii de știință de date pot rula cu ușurință un job de instruire cu mai multe tipuri de instanțe, ceea ce permite descărcarea unora dintre sarcinile CPU existente de la instanțele GPU la instanțele CPU dedicate optimizate pentru calcul, rezultând o utilizare mai mare a GPU-ului și mai rapid și mai cost- antrenament eficient. Mai mult, cu puterea suplimentară a procesorului, puteți face ca sarcinile de preprocesare care au fost efectuate în mod tradițional offline, ca pas preliminar pentru formare, să devină parte din munca dvs. de formare. Acest lucru face mai rapidă repetarea și experimentarea atât pentru preprocesarea datelor, cât și pentru ipotezele și hiperparametrii de antrenament DNN.

De exemplu, luați în considerare un tip de instanță GPU puternic, ml.p4d.24xlarge (96 vCPU, 8 x NVIDIA A100 GPU), cu un raport CPU:GPU de 12:1. Să presupunem că munca dvs. de formare are nevoie de 20 de procesoare virtuale pentru a preprocesa suficiente date pentru a menține un GPU utilizat 100%. Prin urmare, pentru a menține toate cele 8 GPU-uri utilizate 100%, aveți nevoie de un tip de instanță de 160 de procesoare virtuale. Cu toate acestea, ml.p4d.24xlarge este mai puțin de 64 de procesoare virtuale, sau 40%, limitând utilizarea GPU-ului la 60%, așa cum este prezentat în partea stângă a diagramei următoare. Adăugarea unei alte instanțe ml.p4d.24xlarge ar ajuta? Nu, deoarece raportul CPU:GPU al jobului ar rămâne același.

Cu clustere eterogene, putem adăuga două ml.c5.18xlarge (72 vCPU), așa cum se arată în dreapta diagramei. Totalul net vCPU din acest cluster este de 210 (96+2*72), ceea ce duce la un raport CPU:GPU la 30:1. Fiecare dintre aceste instanțe optimizate pentru calcul va fi descărcată cu o sarcină intensivă de preprocesare a datelor CPU și va permite utilizarea eficientă a GPU-ului. În ciuda costului suplimentar al ml.c5.18xlarge, utilizarea mai mare a GPU-ului permite o procesare mai rapidă și, prin urmare, beneficii de performanță de preț mai mari.

Când să folosiți clustere eterogene și alte alternative

În această secțiune, explicăm modul de identificare a unui blocaj al procesorului și discutăm despre rezolvarea acestuia utilizând scalarea tipului de instanță față de clustere eterogene.

Modul rapid de a identifica un blocaj al procesorului este de a monitoriza CPU și GPU metrici de utilizare pentru locuri de muncă de formare SageMaker în Amazon CloudWatch. Puteți accesa aceste vederi din Consola de administrare AWS în hyperlinkul pentru valorile de instanță a paginii jobului de formare. Alegeți valorile relevante și treceți de la rezoluția de 5 minute la 1 minut. Rețineți că scara este de 100% per vCPU sau GPU, astfel încât rata de utilizare pentru o instanță cu 4 vCPU/GPU-uri poate fi de până la 400%. Următoarea figură este un astfel de exemplu din valorile CloudWatch, unde CPU este utilizat aproximativ 100%, indicând un blocaj al procesorului, în timp ce GPU-ul este subutilizat.

Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Pentru diagnosticare detaliată, rulați joburile de formare cu Debugger Amazon SageMaker pentru a profila starea utilizării resurselor, statistici și operațiuni cadru, prin adăugarea unei configurații de profiler atunci când construiți un estimator SageMaker folosind SDK-ul SageMaker Python. După ce trimiteți jobul de formare, examinați rezultatul raport de profiler pentru blocajele CPU.

Dacă ajungeți la concluzia că munca dvs. ar putea beneficia de un raport de calcul CPU:GPU mai mare, mai întâi luați în considerare scalarea la un alt tip de instanță din aceeași familie de instanțe, dacă unul este disponibil. De exemplu, dacă vă antrenați modelul pe ml.g5.8xlarge (32 vCPU, 1 GPU), luați în considerare scalarea la ml.g5.16xlarge (64 vCPU, 1 GPU). Sau, dacă vă antrenați modelul folosind instanța multi-GPU ml.g5.12xlarge (48 vCPU, 4 GPU), luați în considerare scalarea la ml.g5.24xlarge (96 vCPU, 4 GPU). Consultați G5 specificația familiei de exemplu pentru mai multe detalii.

Uneori, extinderea nu este o opțiune, deoarece nu există niciun tip de instanță cu un raport vCPU:GPU mai mare în aceeași familie de instanțe. De exemplu, dacă antrenezi modelul pe ml.trn1.32xlarge, ml.p4d.24xlarge sau ml.g5.48xlarge, ar trebui să luați în considerare clustere eterogene pentru antrenamentul modelului SageMaker.

Pe lângă extindere, am dori să remarcăm că există alternative suplimentare la un cluster eterogen, cum ar fi NVIDIA DALI, care descarcă preprocesarea imaginii pe GPU. Pentru mai multe informații, consultați Depășirea blocajelor de preprocesare a datelor cu serviciul de date TensorFlow, NVIDIA DALI și alte metode.

Pentru a simplifica luarea deciziilor, consultați următoarea diagramă.

Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Cum să utilizați clusterele eterogene SageMaker

Pentru a începe rapid, puteți sări direct la exemplele TensorFlow sau PyTorch furnizate ca parte a acestei postări.

În această secțiune, vă prezentăm cum să utilizați un cluster eterogen SageMaker cu un exemplu simplu. Presupunem că știți deja cum să antrenați un model cu SageMaker Python SDK și clasa Estimator. Dacă nu, consultați Folosind SDK-ul SageMaker Python înainte de a continua.

Înainte de această caracteristică, ați inițializat clasa Estimator a jobului de instruire cu InstanceCount și parametrii InstanceType, care presupune implicit că aveți doar un singur tip de instanță (un cluster omogen). Odată cu lansarea clusterelor eterogene, am introdus noul sagemaker.instance_group.InstanceGroup clasă. Acesta reprezintă un grup de una sau mai multe instanțe ale unui anumit tip de instanță, concepute pentru a avea un rol logic (cum ar fi procesarea datelor sau optimizarea rețelei neuronale. Puteți avea două sau mai multe grupuri și puteți specifica un nume personalizat pentru fiecare grup de instanțe, instanța tip și numărul de instanțe pentru fiecare grup de instanțe. Pentru mai multe informații, consultați Folosind SDK-ul SageMaker Python și Utilizarea API-urilor SageMaker de nivel scăzut.

După ce ați definit grupurile de instanțe, trebuie să modificați scriptul de antrenament pentru a citi SageMaker informarea mediului de antrenament care include configurația cluster eterogenă. Configurația conține informații precum grupurile de instanțe curente, gazdele curente din fiecare grup și în ce grup locuiește gazda curentă cu clasarea lor. Puteți crea o logică în scriptul de antrenament pentru a atribui grupuri de instanțe anumitor sarcini de instruire și procesare a datelor. În plus, scriptul dvs. de antrenament trebuie să aibă grijă de comunicarea între grupuri de instanțe sau de mecanismele de încărcare a datelor distribuite (de exemplu, tf.data.service în TensorFlow sau generic gRPC client-server) sau orice alt cadru (de exemplu, Apache Spark).

Să trecem printr-un exemplu simplu de lansare a unui job de instruire eterogen și citirea configurației mediului în timpul execuției.

  1. Când definim și lansăm jobul de antrenament, configurăm două grupuri de instanțe utilizate ca argumente pentru estimatorul SageMaker:
    from sagemaker.instance_group import InstanceGroup
    data_group = InstanceGroup("data_group", "ml.c5.18xlarge", 2)
    dnn_group = InstanceGroup("dnn_group", "ml.p4d.24xlarge", 1)
    
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(...,
        entry_point='launcher.py',
        instance_groups=[data_group, dnn_group]
    )
  2. Pe scriptul de antrenament al punctului de intrare (numit launcher.py), citim configurația clusterului eterogen pentru a stabili dacă instanța va rula codul de preprocesare sau codul DNN:
    from sagemaker_training import environment
    env = environment.Environment()
    if env.current_instance_group == 'data_group': ...;

Cu aceasta, haideți să rezumam sarcinile pe care SageMaker le face în numele dvs. și sarcinile pentru care sunteți responsabil.

SageMaker efectuează următoarele sarcini:

  1. Furnizați diferite tipuri de instanțe în funcție de definiția grupului de instanțe.
  2. Furnizați canale de intrare pentru toate sau anumite grupuri de instanțe.
  3. Distribuiți scripturi de antrenament și dependențe la instanțe.
  4. Configurați un cluster MPI pe un anumit grup de instanțe, dacă este definit.

Sunteți responsabil pentru următoarele sarcini:

  1. Modificați scriptul jobului de pornire a antrenamentului pentru a specifica grupuri de instanțe.
  2. Implementați o conductă de date distribuite (de exemplu, tf.data.service).
  3. Modificați scriptul punctului de intrare (vezi launcher.py în exemplul de blocnotes) să fie un singur punct de intrare care va rula pe toate instanțele, va detecta în ce grup de instanțe rulează și va declanșa comportamentul relevant (cum ar fi procesarea datelor sau optimizarea DNN).
  4. Când bucla de antrenament se termină, trebuie să vă asigurați că procesul punctului de intrare se încheie în toate instanțele din toate grupurile de instanțe. Acest lucru este important deoarece SageMaker așteaptă ca toate instanțele să se termine procesarea înainte de a marca lucrarea ca finalizată și de a opri facturarea. The launcher.py scriptul din caietele de exemplu TensorFlow și PyTorch oferă o implementare de referință a semnalizării instanțelor grupului de date pentru a ieși când instanțe ale grupului DNN își termină activitatea.

Exemple de notebook-uri pentru clustere eterogene SageMaker

În această secțiune, oferim un rezumat al caiete de exemplu pentru ambele cadre ML TensorFlow și PyTorch. În caiete, puteți găsi detalii de implementare, explicații despre cum funcționează codul, fragmente de cod pe care le puteți reutiliza în scripturile de antrenament, diagrame de flux și analiza de comparare a costurilor.

Rețineți că, în ambele exemple, nu ar trebui să vă așteptați ca modelul să convergă într-un mod semnificativ. Intenția noastră este doar de a măsura fluxul de date și debitul de optimizare a rețelei neuronale exprimat în timp de epocă/pas. Trebuie să faceți benchmark cu propriul model și set de date pentru a obține beneficii de performanță de preț care se potrivesc cu volumul dvs. de lucru.

Cluster eterogen folosind un încărcător de date distribuite bazat pe tf.data.service (TensorFlow)

Acest caiet demonstrează cum se implementează un cluster eterogen pentru instruirea SageMaker folosind TensorFlow tf.data.service pipeline de date distribuite bazate. Antrenăm un model de viziune computerizată de deep learning Resnet50 care necesită creșterea intensă a datelor CPU. Folosește Horvod pentru paralelismul de date distribuite multi-GPU.

Rulem volumul de lucru în două configurații: mai întâi ca un cluster omogen, o singură instanță ml.p4d.24xlarge, folosind un standard tf.data conductă care prezintă blocajele CPU care conduc la o utilizare mai scăzută a GPU-ului. În a doua rulare, trecem de la un singur tip de instanță la două grupuri de instanțe folosind un cluster eterogen SageMaker. Această rulare descarcă o parte din procesarea datelor în instanțe suplimentare CPU (folosind tf.data.service).

Apoi comparăm configurațiile omogene și eterogene și găsim beneficii cheie ale performanței prețului. După cum se arată în tabelul următor, jobul eterogen (86ms/pas) este de 2.2 ori mai rapid de antrenat decât jobul omogen (192ms/pas), ceea ce face cu 46% mai ieftin să antrenezi un model.

Exemplul 1 (TF) ml.p4d.24xl ml.c5.18xl Preț pe oră* Timp mediu de pas Cost pe pas Îmbunătățirea performanței prețurilor
Omogen 1 0 $37.688 192 ms $0.201 .
Eterogen 1 2 $45.032 86 ms $0.108 46%

* Prețul pe oră este bazat pe us-east-1 Prețuri la cerere SageMaker

Această accelerare este posibilă prin utilizarea vCPU-ului suplimentar, furnizat de grupul de date și prin preprocesare mai rapidă. Vezi caiet pentru mai multe detalii si grafice.

Cluster eterogen folosind un încărcător de date distribuite bazat pe client-server gRPC (PyTorch)

Acest caiet demonstrează un eșantion de încărcare de lucru folosind un cluster eterogen pentru instruirea SageMaker folosind un încărcător de date distribuite bazat pe client-server gRPC. Acest exemplu folosește un singur GPU. Utilizăm modelul PyTorch pe baza următoarelor exemplu oficial MNIST. Codul de antrenament a fost modificat pentru a fi greu pentru preprocesarea datelor. Antrenăm acest model atât în ​​moduri de cluster omogen, cât și eterogene și comparăm performanța prețului.

În acest exemplu, am presupus că volumul de lucru nu poate beneficia de mai multe GPU-uri și că depinde de o anumită arhitectură GPU (NVIDIA V100). Am desfășurat atât joburi de formare omogene, cât și eterogene și am găsit beneficii cheie ale performanței prețului, așa cum se arată în tabelul următor. Jobul eterogen (1.19 s/pas) este de 6.5 ori mai rapid de antrenat decât jobul omogen (0.18 s/pas), ceea ce face ca antrenarea unui model este cu 77% mai ieftină.

Exemplul 2 (PT) ml.p3.2xl ml.c5.9xl Preț pe oră* Timp mediu de pas Cost pe pas Îmbunătățirea performanței prețurilor
Omogen 1 0 $3.825 1193 ms $0.127 .
Eterogen 1 1 $5.661 184 ms $0.029 77%

* Prețul pe oră este bazat pe us-east-1 Prețuri la cerere SageMaker

Acest lucru este posibil deoarece, cu un număr mai mare de CPU, am putea folosi 32 de lucrători ai încărcării de date (comparativ cu 8 cu ml.p3.2xlarge) pentru a preprocesa datele și a menține GPU-ul aproape de 100% utilizat la intervale frecvente. Vezi caiet pentru mai multe detalii si grafice.

Clustere eterogene la Mobileye

Mobileye, o companie Intel, dezvoltă sisteme avansate de asistență pentru șofer (ADAS) și tehnologii pentru vehicule autonome, cu scopul de a revoluționa industria transporturilor, de a face drumurile mai sigure și de a salva vieți. Aceste tehnologii sunt activate folosind modele sofisticate de viziune computerizată (CV) care sunt instruite folosind SageMaker pe cantități mari de date stocate în Serviciul Amazon de stocare simplă (Amazon S3). Aceste modele folosesc tehnici de ultimă generație de rețele neuronale de învățare profundă.

Am observat că, pentru unul dintre modelele noastre de CV, blocajul procesorului a fost cauzat în principal de preprocesarea grea a datelor care a condus la GPU-uri subutilizate. Pentru acest volum de lucru specific, am început să căutăm soluții alternative, am evaluat tehnologiile de pipeline de date distribuite cu clustere eterogene bazate pe instanțe EC2 și am venit cu implementări de referință pentru ambele TensorFlow și PyTorch. Lansarea clusterului eterogen SageMaker ne permite să rulăm acest lucru și încărcături similare pe SageMaker pentru a obține beneficii îmbunătățite de performanță de preț.

Considerații

Odată cu lansarea caracteristicii cluster eterogene, SageMaker oferă mult mai multă flexibilitate în combinarea și potrivirea tipurilor de instanțe în cadrul jobului dvs. de instruire. Cu toate acestea, luați în considerare următoarele când utilizați această caracteristică:

  • Caracteristica cluster eterogenă este disponibilă prin SageMaker PyTorch și TensorFlow clase de estimator cadru. Cadrele acceptate sunt PyTorch v1.10 sau o versiune ulterioară și TensorFlow v2.6 sau o versiune ulterioară.
  • Toate grupurile de instanțe au aceeași imagine Docker.
  • Toate grupurile de instanțe au același script de antrenament. Prin urmare, scriptul dvs. de antrenament ar trebui modificat pentru a detecta grupului de instanțe căruia îi aparține și fork rulează în consecință.
  • Numele de gazdă ale instanțelor de antrenament (de exemplu, alog-1, algo-2 și așa mai departe) sunt atribuite aleatoriu și nu indică cărui grup de instanțe aparțin. Pentru a obține rolul instanței, vă recomandăm să obțineți apartenența la grupul de instanțe în timpul rulării. Acest lucru este, de asemenea, relevant la examinarea conectărilor CloudWatch, deoarece numele fluxului de jurnal [training-job-name]/algo-[instance-number-in-cluster]-[epoch_timestamp] are numele de gazdă.
  • O strategie de instruire distribuită (de obicei un cluster MPI) poate fi aplicată doar unui grup de instanțe.
  • SageMaker Piscine calde gestionate și SageMaker Mod local nu poate fi utilizat în prezent cu antrenament cluster eterogen.

Concluzie

În această postare, am discutat când și cum să folosim caracteristica cluster eterogen a instruirii SageMaker. Am demonstrat o îmbunătățire a performanței prețului cu 46% într-un caz de utilizare real și v-am ajutat să începeți rapid cu încărcătorul de date distribuit (tf.data.service și gRPC client-server). Puteți utiliza aceste implementări cu modificări minime de cod în scripturile de antrenament existente.

Pentru a începe, încercați caiete de exemplu. Pentru a afla mai multe despre această caracteristică, consultați Antrenați folosind un cluster eterogen.


Despre autori

Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Gili Nachum este un arhitect senior în soluții de specialitate AI/ML care lucrează ca parte a echipei EMEA Amazon Machine Learning. Gili este pasionat de provocările antrenării modelelor de învățare profundă și de modul în care învățarea automată schimbă lumea așa cum o cunoaștem. În timpul liber, lui Gili îi place să joace tenis de masă.

Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Hrushikesh Gangur este un arhitect principal de soluții pentru startup-urile AI/ML, cu experiență atât în ​​ML Training, cât și în AWS Networking. El ajută startup-urile din tehnologiile Autonomous Vehicle, Robotics, CV, NLP, MLOps, ML Platform și Robotics Process Automation să-și conducă afacerea eficient și eficient pe AWS. Înainte de a se alătura AWS, Hrushikesh a dobândit peste 20 de ani de experiență în industrie, în principal în jurul platformelor Cloud și de date.

Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Gal Oshri este Senior Product Manager în echipa Amazon SageMaker. Are 7 ani de experiență în lucrul cu instrumente, cadre și servicii de învățare automată.

Îmbunătățiți performanța prețului pentru formarea modelului dvs. folosind clustere eterogene Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Chaim Rand este un dezvoltator de algoritmi de învățare automată care lucrează la tehnologii de deep learning și viziune computerizată pentru soluții de vehicule autonome la Mobileye, o companie Intel. Uită-te pe al lui bloguri.

Timestamp-ul:

Mai mult de la Învățare automată AWS