Zephyrnet-logo

Hoe de Scikit-Learn-modeltraining te versnellen

Datum:

Hoe de Scikit-Learn-modeltraining te versnellen

Als uw scikit-learn-modellen wat tijd nodig hebben om te trainen, dan zijn er verschillende technieken die u kunt gebruiken om de verwerking efficiënter te maken. Van het optimaliseren van uw modelconfiguratie tot het benutten van bibliotheken om training te versnellen door middel van parallellisatie, u kunt het best mogelijke scikit-learn-model bouwen in de kortst mogelijke tijd.


By Michaël Galarnyk, Developer Relations bij Anyscale.

Scikit-Learn is een gebruiksvriendelijke Python-bibliotheek voor machine learning. Soms duurt het echter lang voordat scikit-learn-modellen zijn getraind. De vraag wordt: hoe creëer je in de kortst mogelijke tijd het beste scikit-learn-model? Er zijn nogal wat manieren om dit probleem op te lossen, zoals:

  • Uw optimalisatiefunctie (solver) wijzigen.
  • Gebruik van verschillende hyperparameteroptimalisatietechnieken (grid search, random search, early stop).
  • Parallel of verspreid uw training met baanlib en straal.

Dit bericht geeft een overzicht van elke benadering, bespreekt enkele beperkingen en biedt bronnen om uw machine learning-workflow te versnellen!

Uw optimalisatie-algoritme wijzigen (oplosser)

Sommige oplossers kunnen er langer over doen om samen te komen. Afbeelding van Gaël Varoquaux's toespraak.

Met betere algoritmen kunt u beter gebruik maken van dezelfde hardware. Met een efficiënter algoritme kunt u sneller een optimaal model produceren. Een manier om dit te doen, is door uw optimalisatie-algoritme (solver) te wijzigen. Bijvoorbeeld, de logistische regressie van scikit-learn, stelt u in staat te kiezen tussen oplossers zoals 'newton-cg', 'lbfgs', 'liblinear', 'sag' en 'saga'.

Om te begrijpen hoe verschillende oplossers werken, moedig ik u aan om een ​​lezing te bekijken van de kernbijdrager van scikit-learn Gaël Varoquaux​ Om een ​​deel van zijn toespraak te parafraseren: een volledig gradiëntalgoritme (liblineair) convergeert snel, maar elke iteratie (weergegeven als een witte +) kan onbetaalbaar duur zijn omdat je alle gegevens moet gebruiken. Bij een onderbemonsterde benadering is elke iteratie goedkoop om te berekenen, maar deze kan veel langzamer convergeren. Sommige algoritmen zoals 'saga' bereiken het beste van twee werelden. Elke iteratie is goedkoop te berekenen en het algoritme convergeert snel vanwege een techniek voor variantie-reductie. Het is belangrijk om in acht te nemen dat snelle convergentie doet er in de praktijk niet altijd toe, en verschillende oplossers passen bij verschillende problemen.

Het kiezen van de juiste oplosser voor een probleem kan veel tijd besparen (code voorbeeld).

Om te bepalen welke oplosser geschikt is voor uw probleem, kunt u het documentatie om meer te leren.

Verschillende optimalisatietechnieken voor hyperparameter (grid search, random search, early stop)

Om hoge prestaties te bereiken voor de meeste scikit-learn-algoritmen, moet u de hyperparameters van een model afstemmen. Hyperparameters zijn de parameters van een model die tijdens de training niet worden bijgewerkt. Ze kunnen worden gebruikt om het model of de trainingsfunctie te configureren. Scikit-Learn bevat native een een paar technieken voor het afstemmen van hyperparameters zoals raster zoeken (RasterZoekenCV), die alle parametercombinaties uitvoerig beschouwt, en gerandomiseerde zoekopdracht (GerandomiseerdZoekenCV), die een bepaald aantal kandidaten bemonstert uit een parameterruimte met een gespecificeerde verdeling. Onlangs heeft scikit-learn de experimentele hyperparameterzoekschatters toegevoegd, genaamd halving grid search (HalveringRasterZoekenCV) en halvering willekeurig zoeken (HalveringWillekeurigZoeken).

Opeenvolgende halvering is een experimentele nieuwe functie in scikit-learn-versie 0.24.1 (januari 2021). Afbeelding van documentatie.

Deze technieken kunnen worden gebruikt om de parameterruimte te doorzoeken met opeenvolgende halvering​ De afbeelding hierboven laat zien dat alle hyperparameterkandidaten worden geëvalueerd met een klein aantal resources bij de eerste iteratie, en dat de meer veelbelovende kandidaten worden geselecteerd en meer resources krijgen tijdens elke volgende iteratie.

Hoewel deze nieuwe technieken opwindend zijn, is er een bibliotheek genaamd Tune-sleren dat geavanceerde hyperparameter-afstemmingstechnieken biedt (Bayesiaanse optimalisatie, vroegtijdig stoppen en gedistribueerde uitvoering) die aanzienlijke versnellingen kunnen bieden ten opzichte van rasteronderzoek en willekeurig zoeken.

Vroegtijdig stoppen in actie. Hyperparameterset 2 is een set niet veelbelovende hyperparameters die zouden worden gedetecteerd door de vroege stopmechanismen van Tune-sklearn en vroegtijdig zouden worden gestopt om verspilling van tijd en middelen te voorkomen. Afbeelding van GridSearchCV 2.0.

Kenmerken van Tune-sleren omvatten:

  • Consistentie met de scikit-learn API: u hoeft meestal maar een paar regels code te wijzigen om Tune-sklearn (voorbeeld).
  • Toegankelijkheid tot moderne afstemmingstechnieken voor hyperparameters: het is gemakkelijk om uw code te wijzigen om technieken zoals Bayesiaanse optimalisatie, vroegtijdige stopzetting en gedistribueerde uitvoering te gebruiken.
  • Framework-ondersteuning: er is niet alleen ondersteuning voor scikit-learn-modellen, maar ook voor andere scikit-learn-wrappers zoals Schors (PyTorch)KerasClassificaties (Keras) en XGBoostClassifiers (XGBoost).
  • Schaalbaarheid: de bibliotheek maakt gebruik van Ray Tune, een bibliotheek voor gedistribueerde afstemming van hyperparameters, om op efficiënte en transparante wijze kruisvalidatie op meerdere kernen en zelfs op meerdere machines te parallelliseren.

Misschien wel het belangrijkste is dat tune-sklearn snel is, zoals je kunt zien in de onderstaande afbeelding.

U kunt aanzienlijke prestatieverschillen zien op een gemiddelde laptop met tune-sklearn. Afbeelding van GridSearchCV 2.0.

Als je meer wilt weten over tune-sklearn, moet je dit eens bekijken blogpost.

Parallel of verspreid uw training met joblib en Ray

Bronnen (donkerblauw) die scikit-learn kan gebruiken voor training met één kern (A), meerdere kernen (B) en meerdere knooppunten (C).

Een andere manier om de snelheid van uw modelbouw te verhogen, is door uw training parallel te zetten of te verdelen baanlib en straal​ Scikit-learn traint standaard een model met behulp van een enkele kern. Het is belangrijk op te merken dat vrijwel alle computers tegenwoordig meerdere kernen hebben.

Voor deze blog kun je de bovenstaande MacBook zien als een enkele node met 4 cores.

Bijgevolg zijn er veel mogelijkheden om de training van uw model te versnellen door alle kernen op uw computer te gebruiken. Dit is vooral het geval als uw model een hoge mate van parallelliteit heeft, zoals een willekeurig beslissingsbos.

Een willekeurig beslissingsbos is een eenvoudig type model om te parallelliseren, aangezien elke beslissingsboom onafhankelijk is van de andere.

Scikit-Learn kan training op een enkel knooppunt parallel schakelen met joblib, die standaard de 'loky' backend gebruikt​ Met Joblib kunt u kiezen tussen backends zoals 'loky', 'multiprocessing', 'dask' en 'ray'. Dit is een geweldige functie, aangezien de 'loky'-backend dat is geoptimaliseerd voor een enkel knooppunt en niet voor het draaien van gedistribueerde (multinode) applicaties​ Het uitvoeren van gedistribueerde applicaties kan een groot aantal complexiteiten met zich meebrengen, zoals:

  • Taken plannen over meerdere machines.
  • Gegevens efficiënt overbrengen.
  • Herstellen van machinestoringen.

Gelukkig is de 'ray'-backend kan deze details voor u afhandelen, dingen eenvoudig houden en u betere prestaties bieden. De onderstaande afbeelding toont de genormaliseerde versnelling in termen van de uitvoeringstijd van Ray, Multiprocessing en Dask ten opzichte van de standaard 'loky' backend.

De prestaties werden gemeten op één, vijf en tien m5.8xgrote knooppunten met elk 32 kernen. De prestaties van Loky en Multiprocessing zijn niet afhankelijk van het aantal machines, omdat ze op één machine draaien. Beeldbron.

Als u wilt leren hoe u uw scikit-learn-training snel kunt parallelliseren of verspreiden, kunt u dit bekijken blogpost.

Conclusie

Dit bericht ging over een aantal manieren waarop je in zo min mogelijk tijd het best mogelijke scikit-learn-model kunt bouwen. Er zijn enkele manieren die eigen zijn aan scikit-learn, zoals het wijzigen van uw optimalisatiefunctie (solver) of door gebruik te maken van experimentele hyperparameteroptimalisatietechnieken, zoals HalveringRasterZoekenCV or HalveringWillekeurigZoeken​ Er zijn ook bibliotheken die u als plug-ins kunt gebruiken Tune-sleren en straal om uw modelbouw verder te versnellen. Als je vragen of gedachten hebt over Tune-sklearn en Ray, voel je dan vrij om lid te worden van onze community via Redevoering or Slack.

ORIGINELE. Met toestemming opnieuw gepost.

Bio: Michael Galarnyk werkt in Developer Relations bij Anyscale. Je kunt hem vinden op Twitter, Medium en GitHub.

Zie ook:

Afrekenen PrimeXBT
Handel met de officiële CFD-partners van AC Milan
De eenvoudigste manier om crypto te verhandelen.
Bron: https://www.kdnuggets.com/2021/03/speed-up-scikit-learn-model-training.html

spot_img

Laatste intelligentie

spot_img