Zephyrnet-logo

Amazon SageMaker XGBoost biedt nu volledig gedistribueerde GPU-training | Amazon-webservices

Datum:

Amazon Sage Maker biedt een suite van ingebouwde algoritmen, voorgetrainde modellen en vooraf gebouwde oplossingssjablonen om datawetenschappers en machine learning (ML)-beoefenaars te helpen snel aan de slag te gaan met het trainen en implementeren van ML-modellen. U kunt deze algoritmen en modellen gebruiken voor zowel begeleid als niet-gesuperviseerd leren. Ze kunnen verschillende soorten invoergegevens verwerken, waaronder tabellen, afbeeldingen en tekst.

De SageMaker XGBoost-algoritme stelt u in staat om eenvoudig XGBoost-training en inferentie op SageMaker uit te voeren. XGBoost (eXtreme Gradient Boosting) is een populaire en efficiënte open-source implementatie van het algoritme voor bomen met gradiëntversterking. Gradient boosting is een leeralgoritme onder toezicht dat probeert een doelvariabele nauwkeurig te voorspellen door een verzameling schattingen van een reeks eenvoudigere en zwakkere modellen te combineren. Het XGBoost-algoritme presteert goed in ML-competities vanwege de robuuste verwerking van een verscheidenheid aan gegevenstypen, relaties, distributies en de verscheidenheid aan hyperparameters die u kunt verfijnen. U kunt XGBoost gebruiken voor problemen met regressie, classificatie (binair en multiclass) en classificatie. U kunt GPU's gebruiken om training op grote datasets te versnellen.

Dat kondigen we vandaag met veel plezier aan SageMaker XGBoost biedt nu volledig gedistribueerde GPU-training.

Vanaf versie 1.5-1 en hoger kunt u nu alle GPU's gebruiken bij gebruik van multi-GPU-instanties. De nieuwe functie komt tegemoet aan uw behoeften om volledig gedistribueerde GPU-training te gebruiken bij het omgaan met grote datasets. Dit betekent dat je er meerdere kunt gebruiken Amazon Elastic Compute-cloud (Amazon EC2) instances (GPU) en alle GPU's per instance gebruiken.

Gedistribueerde GPU-training met meerdere GPU-instanties

Met SageMaker XGBoost versie 1.2-2 of hoger kunt u een of meer single-GPU-instanties gebruiken voor training. De hyperparameter tree_method moet worden ingesteld op gpu_hist. Bij gebruik van meer dan één instantie (gedistribueerde installatie), moeten de gegevens als volgt over instanties worden verdeeld (hetzelfde als de niet-GPU gedistribueerde trainingsstappen vermeld in XGBoost-algoritme). Hoewel deze optie performant is en kan worden gebruikt in verschillende trainingsopstellingen, strekt deze zich niet uit tot het gebruik van alle GPU's bij het kiezen van instanties met meerdere GPU's, zoals g5.12xlarge.

Met SageMaker XGBoost versie 1.5-1 en hoger kunt u nu alle GPU's op elke instantie gebruiken wanneer u multi-GPU-instanties gebruikt. De mogelijkheid om alle GPU's in een multi-GPU-instantie te gebruiken, wordt aangeboden door de integratie van de Dashboard kader.

U kunt deze opstelling gebruiken om de training snel af te ronden. Deze optie bespaart niet alleen tijd, maar is ook handig om blokkades te omzeilen, zoals limieten voor maximaal bruikbare instanties (soft), of als de trainingstaak om de een of andere reden niet in staat is een groot aantal instanties met één GPU in te richten.

De configuraties om deze optie te gebruiken zijn dezelfde als de vorige optie, met uitzondering van de volgende verschillen:

  • Voeg de nieuwe toe hyperparameter use_dask_gpu_training met tekenreekswaarde true.
  • Bij het creëren Trainingsinvoer, stel de distributieparameter in op FullyReplicated, of u nu één of meerdere instanties gebruikt. Het onderliggende Dask-framework voert de gegevensbelasting uit en verdeelt de gegevens onder Dask-medewerkers. Dit verschilt van de instelling voor gegevensdistributie voor alle andere gedistribueerde trainingen met SageMaker XGBoost.

Houd er rekening mee dat het splitsen van gegevens in kleinere bestanden nog steeds van toepassing is voor Parquet, waar Dask elk bestand zal lezen als een tussenschot. Omdat u een Dask-werker per GPU heeft, moet het aantal bestanden groter zijn dan het aantal instanties * het aantal GPU's per instantie. Ook kan het te klein maken van elk bestand en het hebben van een zeer groot aantal bestanden de prestaties verminderen. Voor meer informatie, zie Vermijd zeer grote grafieken. Voor CSV raden we nog steeds aan om grote bestanden op te splitsen in kleinere bestanden om de downloadtijd van gegevens te verkorten en sneller lezen mogelijk te maken. Het is echter geen vereiste.

Momenteel zijn de ondersteunde invoerformaten met deze optie:

  • text/csv
  • application/x-parquet

De volgende invoermodus wordt ondersteund:

De code ziet er ongeveer als volgt uit:

import os
import boto3
import re
import sagemaker
from sagemaker.session import Session
from sagemaker.inputs import TrainingInput
from sagemaker.xgboost.estimator import XGBoost role = sagemaker.get_execution_role()
region = sagemaker.Session().boto_region_name
session = Session() bucket = "<Specify S3 Bucket>"
prefix = "<Specify S3 prefix>" hyperparams = { "objective": "reg:squarederror", "num_round": "500", "verbosity": "3", "tree_method": "gpu_hist", "eval_metric": "rmse", "use_dask_gpu_training": "true"
} output_path = "s3://{}/{}/output".format(bucket, prefix) content_type = "application/x-parquet"
instance_type = "ml.g4dn.2xlarge" xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.5-1")
xgb_script_mode_estimator = sagemaker.estimator.Estimator( image_uri=xgboost_container, hyperparameters=hyperparams, role=role, instance_count=1, instance_type=instance_type, output_path=output_path, max_run=7200, ) test_data_uri = " <specify the S3 uri for training dataset>"
validation_data_uri = “<specify the S3 uri for validation dataset>” train_input = TrainingInput( test_data_uri, content_type=content_type
) validation_input = TrainingInput( validation_data_uri, content_type=content_type
) xgb_script_mode_estimator.fit({"train": train_input, "validation": validation_input})

De volgende schermafbeeldingen tonen een succesvol trainingstaaklogboek van de notebook.

benchmarks

We hebben evaluatiestatistieken gebenchmarkt om ervoor te zorgen dat de modelkwaliteit niet verslechterde met het multi-GPU-trainingstraject in vergelijking met single-GPU-training. We hebben ook gebenchmarkt op grote datasets om ervoor te zorgen dat onze gedistribueerde GPU-configuraties performant en schaalbaar waren.

Factureerbare tijd verwijst naar de absolute wandkloktijd. Trainingstijd is alleen de XGBoost-trainingstijd, gemeten vanaf de train() aanroepen totdat het model is opgeslagen Amazon eenvoudige opslagservice (Amazone S3).

Prestatiebenchmarks op grote datasets

Het gebruik van multi-GPU is meestal geschikt voor grote datasets met complexe training. We hebben een dummy dataset gemaakt met 2,497,248,278 rijen en 28 functies om te testen. De dataset was 150 GB groot en bestond uit 1,419 bestanden. Elk bestand had een grootte tussen 105 en 115 MB. We hebben de gegevens in Parquet-formaat opgeslagen in een S3-bucket. Om enigszins complexe training te simuleren, hebben we deze dataset gebruikt voor een binaire classificatietaak, met 1,000 rondes, om de prestaties tussen het trainingspad met één GPU en het trainingspad met meerdere GPU's te vergelijken.

De volgende tabel bevat de factureerbare trainingstijd en prestatievergelijking tussen het single-GPU-trainingspad en het multi-GPU-trainingspad.

Single-GPU-trainingspad
Instantietype Aantal exemplaren Factureerbare tijd / instantie(s) Trainingstijd(en)
g4dn.xlarge 20 Geen geheugen meer
g4dn.2xgroot 20 Geen geheugen meer
g4dn.4xgroot 15 1710 1551.9
16 1592 1412.2
17 1542 1352.2
18 1423 1281.2
19 1346 1220.3
Multi-GPU-trainingspad (met Dask)
Instantietype Aantal exemplaren Factureerbare tijd / instantie(s) Trainingstijd(en)
g4dn.12xgroot 7 Geen geheugen meer
8 1143 784.7
9 1039 710.73
10 978 676.7
12 940 614.35

We kunnen zien dat het gebruik van multi-GPU-instanties resulteert in een korte trainingstijd en een korte totale tijd. Het single-GPU-trainingspad heeft nog steeds enig voordeel bij het downloaden en lezen van slechts een deel van de gegevens in elke instantie, en dus een korte downloadtijd voor gegevens. Het heeft ook geen last van de overhead van Dask. Daardoor is het verschil tussen trainingstijd en totale tijd kleiner. Door het gebruik van meer GPU's kan de instelling met meerdere GPU's de trainingstijd echter aanzienlijk verkorten.

U moet een EC2-instantie gebruiken die voldoende rekenkracht heeft om geheugenfouten te voorkomen bij het omgaan met grote datasets.

Het is mogelijk om de totale tijd verder te verkorten met de configuratie met één GPU door meer instanties of krachtigere instanties te gebruiken. In termen van kosten kan het echter duurder zijn. De volgende tabel toont bijvoorbeeld de vergelijking van trainingstijd en kosten met een instantie met één GPU g4dn.8xlarge.

Single-GPU-trainingspad
Instantietype Aantal exemplaren Factureerbare tijd / instantie(s) Kosten ($)
g4dn.8xgroot 15 1679 15.22
17 1509 15.51
19 1326 15.22
Multi-GPU-trainingspad (met Dask)
Instantietype Aantal exemplaren Factureerbare tijd / instantie(s) Kosten ($)
g4dn.12xgroot 8 1143 9.93
10 978 10.63
12 940 12.26

De kostenberekening is gebaseerd op de On-Demand-prijs voor elke instantie. Voor meer informatie, zie Amazon EC2 G4-instanties.

Benchmarks voor modelkwaliteit

Voor modelkwaliteit hebben we evaluatiestatistieken vergeleken tussen de Dask GPU-optie en de single-GPU-optie, en hebben we training gegeven op verschillende instantietypen en aantal instanties. Voor verschillende taken hebben we verschillende datasets en hyperparameters gebruikt, waarbij elke dataset is opgesplitst in trainings-, validatie- en testsets.

Voor een binaire classificatie (binary:logistic) taak, gebruikten we de HIGGS dataset in CSV-formaat. De trainingssplitsing van de dataset heeft 9,348,181 rijen en 28 features. Het aantal rondes gebruikt was 1,000. De volgende tabel vat de resultaten samen.

Multi-GPU-training met Dash
Instantietype Aantal GPU's / instantie Aantal exemplaren Factureerbare tijd / instantie(s) Nauwkeurigheid% F1% ROC AUC%
g4dn.2xgroot 1 1 343 75.97 77.61 84.34
g4dn.4xgroot 1 1 413 76.16 77.75 84.51
g4dn.8xgroot 1 1 413 76.16 77.75 84.51
g4dn.12xgroot 4 1 157 76.16 77.74 84.52

Voor regressie (reg:squarederror), gebruikten we de NYC groene taxi dataset (met enkele aanpassingen) in Parquet-formaat. De trainingssplitsing van de dataset heeft 72,921,051 rijen en 8 features. Het aantal gebruikte rondes was 500. De volgende tabel toont de resultaten.

Multi-GPU-training met Dash
Instantietype Aantal GPU's / instantie Aantal exemplaren Factureerbare tijd / instantie(s) MSE R2 MAE
g4dn.2xgroot 1 1 775 21.92 0.7787 2.43
g4dn.4xgroot 1 1 770 21.92 0.7787 2.43
g4dn.8xgroot 1 1 705 21.92 0.7787 2.43
g4dn.12xgroot 4 1 253 21.93 0.7787 2.44

Modelkwaliteitsstatistieken zijn vergelijkbaar tussen de multi-GPU (Dask) trainingsoptie en de bestaande trainingsoptie. Modelkwaliteit blijft consistent bij gebruik van een gedistribueerde opstelling met meerdere instanties of GPU's.

Conclusie

In dit bericht hebben we een overzicht gegeven van hoe u verschillende combinaties van instantietype en aantal instanties kunt gebruiken voor gedistribueerde GPU-training met SageMaker XGBoost. Voor de meeste use-cases kunt u instanties met één GPU gebruiken. Deze optie biedt een breed scala aan instanties om te gebruiken en is zeer performant. U kunt multi-GPU-instanties gebruiken voor training met grote datasets en veel rondes. Het kan een snelle training bieden met een kleiner aantal instanties. Over het algemeen kunt u de gedistribueerde GPU-configuratie van SageMaker XGBoost gebruiken om uw XGBoost-training enorm te versnellen.

Ga naar voor meer informatie over SageMaker en gedistribueerde training met Dask Amazon SageMaker ingebouwde LightGBM biedt nu gedistribueerde training met behulp van Dask


Over de auteurs

Dhiraj Thakuro is een Solutions Architect bij Amazon Web Services. Hij werkt samen met AWS-klanten en -partners om advies te geven over de acceptatie, migratie en strategie van enterprise-cloud. Hij is gepassioneerd door technologie en geniet van het bouwen en experimenteren op het gebied van analyse en AI / ML.

Dewan Choudhury is een Software Development Engineer bij Amazon Web Services. Hij werkt aan de algoritmen en JumpStart-aanbiedingen van Amazon SageMaker. Naast het bouwen van AI/ML-infrastructuren, is hij ook gepassioneerd door het bouwen van schaalbare gedistribueerde systemen.

Xin HuangDr Xin Huang is een toegepast wetenschapper voor de ingebouwde algoritmen van Amazon SageMaker JumpStart en Amazon SageMaker. Hij richt zich op het ontwikkelen van schaalbare algoritmen voor machine learning. Zijn onderzoeksinteresses liggen op het gebied van natuurlijke taalverwerking, verklaarbaar diep leren op tabelgegevens en robuuste analyse van niet-parametrische ruimte-tijdclustering. Hij heeft veel artikelen gepubliceerd in ACL, ICDM, KDD-conferenties en het tijdschrift Royal Statistical Society: Series A.

Tony Cruz

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?