Zephyrnet-logo

Hoe de XGBoost-modeltraining te versnellen

Datum:

By Michaël Galarnyk, Data Science-professional

Algoritmen voor het stimuleren van gradiënten worden veel gebruikt in begeleid leren. Hoewel ze krachtig zijn, kan het lang duren om ze te trainen. Extreme gradiëntversterking, of XGBoost, is een open-source implementatie van gradiëntversterking ontworpen voor snelheid en prestaties. Zelfs XGBoost-training kan echter soms traag zijn.

Er zijn nogal wat manieren om dit proces te versnellen, zoals:

In dit artikel worden de voor- en nadelen van elke benadering besproken en wordt uitgelegd hoe u aan de slag kunt gaan.

Uw boomconstructie-algoritme wijzigen

 
 
XGBoost's tree_method parameter stelt u in staat om te specificeren welk boomconstructie-algoritme u wilt gebruiken. Een geschikt boomconstructie-algoritme kiezen (exactapproxhistgpu_histauto) voor uw probleem kan u helpen om sneller een optimaal model te produceren. Laten we nu de algoritmen bekijken.

exact

Het is een nauwkeurig algoritme, maar het is niet erg schaalbaar omdat het tijdens elke gesplitste zoekprocedure alle invoergegevens herhaalt. In de praktijk betekent dit lange trainingstijden. Het ondersteunt ook geen gedistribueerde training. U kunt meer leren over dit algoritme in het origineel XGBoost-papier.

ongeveer

Hoewel het exacte algoritme nauwkeurig is, is het inefficiënt wanneer de gegevens niet volledig in het geheugen passen. De geschatte boommethode van het origineel XGBoost-papier gebruikt kwantielschets- en gradiënthistogrammen.

gesch

Een benaderingsboommethode die wordt gebruikt in LichtGBM met kleine verschillen in implementatie (gebruikt enkele prestatieverbeteringen zoals bins caching) van approx. Dit is doorgaans sneller dan approx.

gpu_geschiedenis

Omdat GPU's cruciaal zijn voor veel machine learning-toepassingen, heeft XGBoost een GPU-implementatie van het hist-algoritme gpu_hist) die ondersteuning biedt voor extern geheugen. Het is veel sneller en gebruikt aanzienlijk minder geheugen dan hist. Merk op dat XGBoost geen native ondersteuning voor GPU's op sommige besturingssystemen.

Figuur
XGBoost-documentatie

 

auto

Dit is de standaardwaarde voor de parameter. Op basis van de datasetgrootte kiest XGBoost de “snelste methode”. Voor kleine datasets wordt exact gebruikt. Voor grotere datasets zal ca worden gebruikt. Merk op dat hist en gpu_hist niet in aanmerking worden genomen in deze op heuristiek gebaseerde benadering, ook al zijn ze vaak sneller.

Als je dit uitvoert code, zult u zien hoe het draaien van modellen met gpu_hist veel tijd kan besparen. Op een relatief kleine dataset (100,000 rijen, 1000 functies) op mijn computer, verminderde het veranderen van hist naar gpu_hist de trainingstijd met ongeveer een factor 2.

Gebruikmaken van cloudcomputing

 
 

Figuur
Met cloudcomputing kunt u niet alleen meer cores en geheugen gebruiken dan uw lokale machine, maar krijgt u ook toegang tot gespecialiseerde bronnen zoals GPU's.

 

Het laatste deel ging vooral over het kiezen van efficiëntere algoritmen om de beschikbare rekenhulpmiddelen beter te gebruiken. Soms zijn de beschikbare rekenhulpmiddelen echter niet voldoende en heeft u gewoon meer nodig. Zo heeft de MacBook in onderstaande afbeelding maar 4 cores en 16GB geheugen. Verder draait het op MacOS waar XGBoost op het moment van schrijven geen GPU-ondersteuning voor heeft.

Figuur
Voor het doel van dit bericht kun je de MacBook hierboven zien als een enkel knooppunt met 4 kernen.

 

Een manier om dit probleem te omzeilen is om meer resources in de cloud te gebruiken. Het gebruik van cloudproviders is niet gratis, maar u kunt er vaak meer cores en geheugen mee gebruiken dan uw lokale machine. Bovendien, als XGBoost geen ondersteuning biedt voor uw lokale machine, is het gemakkelijk om een ​​instantietype te kiezen waarvoor XGBoost GPU-ondersteuning heeft.

Als u uw training in de cloud wilt versnellen, vindt u hieronder een overzicht van de stappen van Jason Brownlee's artikel over het trainen van een XGBoost-model op een AWS EC2-instantie:

1. Stel een AWS-account in (indien nodig)

2. Start een AWS-instantie

3. Log in en voer de code uit

4. Train een XGBoost-model

5. Sluit de AWS-instantie (betaal alleen voor de instantie wanneer u deze gebruikt)

Als je een krachtiger exemplaar selecteert dan wat je lokaal hebt, zul je waarschijnlijk zien dat training in de cloud sneller is. Merk op dat multi-GPU-training met XGBoost eigenlijk gedistribueerde training vereist, wat betekent dat je meer dan een enkele node/instantie nodig hebt om dit te bereiken.

Gedistribueerde XGBoost-training met Ray

 
 
Tot dusverre heeft deze tutorial het versnellen van training behandeld door het boomconstructie-algoritme te wijzigen en door de computerbronnen te vergroten via cloud computing. Een andere oplossing is om XGBoost-modeltraining te distribueren met XGBoost-Ray die gebruik maakt van Ray.

Wat is Ray?

 
straal is een snel, eenvoudig gedistribueerd uitvoeringsraamwerk dat het eenvoudig maakt om uw applicaties te schalen en gebruik te maken van geavanceerde machine learning-bibliotheken. Met Ray kun je Python-code die sequentieel wordt uitgevoerd en met minimale codewijzigingen omzetten in een gedistribueerde applicatie. Als je meer wilt weten over Ray en de acteur model, je kunt er meer over leren hier.

Figuur
Hoewel deze tutorial onderzoekt hoe Ray het gemakkelijk maakt om XGBoost-code te parallelliseren en te distribueren, is het belangrijk op te merken dat Ray en zijn ecosysteem het ook gemakkelijk maken om gewone Python-code en bestaande bibliotheken zoals scikit-lerenLichtGBMPyTorchEn nog veel meer.

Aan de slag met XGBoost-Ray

 
Om aan de slag te gaan met XGBoost-Ray, je moet het eerst installeren.

pip install "xgboost_ray"

Omdat het volledig compatibel is met de kern-XGBoost-API, heb je alleen een paar codewijzigingen nodig om XGBoost-training te schalen van een enkele machine naar een cluster met honderden knooppunten.

Figuur
XGBoost-Ray ondersteunt multi-node/multi-GPU-training. Op een machine communiceren GPU's gradiënten via NCCL2. Tussen knooppunten gebruiken ze in plaats daarvan Rabit (MEER INFORMATIE).

 

Zoals je in de onderstaande code kunt zien, lijkt de API erg op XGBoost. De gemarkeerde delen zijn waar de code anders is dan de normale XGBoost API.

van xgboost_ray import RayXGBClassifier, RayParams van sklearn.datasets import load_breast_cancer van sklearn.model_selection import train_test_split seed = 42 X, y = load_breast_cancer(return_X_y=True) X_train, X_test_y,=. =0.25 ) clf = RayXGBClassifier( n_jobs=42, # In XGBoost-Ray stelt n_jobs het aantal actoren in random_state=seed) # scikit-learn API zal de gegevens automatisch # naar RayDMatrix-formaat converteren als dat nodig is. # U kunt X ook doorgeven als RayDMatrix, in welk geval # y wordt genegeerd. clf.fit(X_train, y_train) pred_ray = clf.predict(X_test) print(pred_ray) pred_proba_ray = clf.predict_proba(X_test) print(pred_proba_ray)

De bovenstaande code laat zien hoe weinig u uw code hoeft te wijzigen om XGBoost-Ray te gebruiken. Hoewel je XGboost-Ray niet nodig hebt om de borstkankerdataset te trainen, een vorige post voerde benchmarks uit op verschillende datasetgroottes (~1.5M tot ~12M rijen) over verschillende aantallen werkers (1 tot 8) om te laten zien hoe het presteert op grotere datasets op een enkel knooppunt.

Figuur
Trainingstijden voor benchmarks met één knooppunt (lager is beter). XGBoost-Ray en XGBoost-Dask behalen vergelijkbare prestaties op een enkele AWS m5.4xlarge instance met 16 cores en 64 GB geheugen.

 

XGBoost-Ray presteert ook goed in multi-node (gedistribueerde) instellingen, zoals de onderstaande afbeelding laat zien.

Figuur
Trainingstijden met meerdere knooppunten op verschillende synthetische datasets, variërend van ~ 400k tot ~ 2B rijen (waar lager beter is). XGBoost-Ray en XGBoost-Spark bereiken vergelijkbare prestaties.

 

Als u meer wilt weten over XGBoost Ray, bekijk dit bericht op XGBoost-Ray.

Conclusie

 
 
Dit bericht ging over een aantal benaderingen die je kunt gebruiken om XGBoost-modeltraining te versnellen, zoals het veranderen van boomconstructiemethoden, gebruikmaken van cloud computing en gedistribueerde XGBoost op Ray. Als je vragen of opmerkingen hebt over XGBoost op Ray, word dan alsjeblieft lid van onze community via Redevoering or Slack. Als je op de hoogte wilt blijven van alles wat met Ray te maken heeft, overweeg @raydistributed te volgen op twitter en meld je aan voor de Ray-nieuwsbrief.

 
Bio: Michaël Galarnyk is een Data Science Professional en werkt in Developer Relations bij Anyscale.

ORIGINELE. Met toestemming opnieuw gepost.

Bron: https://www.kdnuggets.com/2021/12/speed-xgboost-model-training.html

spot_img

Laatste intelligentie

spot_img