Zephyrnet-logo

De parallelle bibliotheek van het Amazon SageMaker-model versnelt nu de PyTorch FSDP-workloads met maximaal 20% | Amazon-webservices

Datum:

Training met grote taalmodellen (LLM) is het afgelopen jaar enorm in populariteit gestegen met de introductie van verschillende populaire modellen zoals Llama 2, Falcon en Mistral. Klanten trainen en verfijnen nu LLM's, variërend van 1 miljard tot meer dan 175 miljard parameters, om de modelprestaties te optimaliseren voor toepassingen in verschillende sectoren, van de gezondheidszorg tot financiën en marketing.

Het trainen van prestatiemodellen op deze schaal kan een uitdaging zijn. Zeer nauwkeurige LLM's kunnen terabytes aan trainingsgegevens en duizenden of zelfs miljoenen uren aan rekentijd van de versneller nodig hebben om de doelnauwkeurigheid te bereiken. Om de training tijdig af te ronden en producten op de markt te brengen, vertrouwen klanten op parallellismetechnieken om deze enorme werklast over wel duizenden acceleratorapparaten te verdelen. Deze parallellismetechnieken kunnen echter moeilijk te gebruiken zijn: verschillende technieken en bibliotheken zijn alleen compatibel met bepaalde werkbelastingen of beperkt tot bepaalde modelarchitecturen, trainingsprestaties kunnen zeer gevoelig zijn voor obscure configuraties, en de stand van de techniek evolueert snel. Als gevolg hiervan moeten beoefenaars van machine learning weken van voorbereiding besteden aan het opschalen van hun LLM-workloads naar grote clusters van GPU's.

In dit bericht belichten we nieuwe functies van de Amazon Sage Maker model parallelle (SMP)-bibliotheek die het trainingsproces voor grote modellen vereenvoudigt en u helpt LLM's sneller te trainen. In het bijzonder behandelen we de nieuwe vereenvoudigde gebruikerservaring van de SMP-bibliotheek die voortbouwt op open source PyTorch Fully Sharded Data Parallel (FSDP) API's, uitgebreide tensor parallelle functionaliteit die trainingsmodellen met honderden miljarden parameters mogelijk maakt, en prestatie-optimalisaties die de modeltrainingstijd verkorten en kosten tot 20%.

Voor meer informatie over de parallelle bibliotheek van het SageMaker-model raadpleegt u SageMaker-modelparallellismebibliotheek v2 documentatie. U kunt ook naar onze verwijzen voorbeeld notitieboekjes om aan de slag te gaan.

Nieuwe functies die de training van grote modellen vereenvoudigen en versnellen

In dit bericht worden de nieuwste functies besproken die zijn opgenomen in de v2.0-release van de parallelle bibliotheek van het SageMaker-model. Deze functies verbeteren de bruikbaarheid van de bibliotheek, breiden de functionaliteit uit en versnellen de training. In de volgende secties vatten we de nieuwe functies samen en bespreken we hoe u de bibliotheek kunt gebruiken om uw grote modeltraining te versnellen.

SMP afstemmen op open source PyTorch

Sinds de lancering in 2020 heeft SMP hoogwaardige, grootschalige training op SageMaker-rekeninstances mogelijk gemaakt. Met deze nieuwste grote versie van SMP vereenvoudigt de bibliotheek de gebruikerservaring door de API's af te stemmen op open source PyTorch.

PyTorch-aanbiedingen Volledig gedeeld parallellisme van gegevens (FSDP) als de belangrijkste methode voor het ondersteunen van een grote trainingswerklast op veel computerapparaten. Zoals blijkt uit het volgende codefragment, weerspiegelen de bijgewerkte API's van SMP voor technieken zoals sharded data parallellisme die van PyTorch. Je kunt gewoon rennen import torch.sagemaker en gebruik het in plaats van torch.

## training_script.py
import torch.sagemaker as tsm
tsm.init()

# Set up a PyTorch model
model = ...

# Wrap the PyTorch model using the PyTorch FSDP module
model = FSDP(
model,
...
)

optimizer = ...
...

Met deze updates voor de API's van SMP kunt u nu de prestatievoordelen van SageMaker en de SMP-bibliotheek realiseren zonder uw bestaande PyTorch FSDP-trainingsscripts te herzien. Met dit paradigma kunt u bij het trainen op locatie ook dezelfde codebasis gebruiken als bij SageMaker, waardoor de gebruikerservaring wordt vereenvoudigd voor klanten die in meerdere omgevingen trainen.

Voor meer informatie over het inschakelen van SMP met uw bestaande PyTorch FSDP-trainingsscripts raadpleegt u Ga aan de slag met SMP.

Tensor-parallellisme integreren om training op enorme clusters mogelijk te maken

Deze release van SMP breidt ook de mogelijkheden van PyTorch FSDP uit met tensor-parallellisme-technieken. Een probleem bij het gebruik van alleen parallellisme met gesharde gegevens is dat u convergentieproblemen kunt tegenkomen als u uw clustergrootte opschaalt. Dit komt omdat shardingparameters, gradiënten en de optimalisatiestatus over parallelle gegevensrangschikkingen ook uw globale batchgrootte vergroten; op grote clusters kan deze mondiale batchgrootte voorbij de drempel komen waaronder het model zou convergeren. U moet een extra parallellismetechniek opnemen die geen toename van de globale batchgrootte vereist naarmate u uw cluster schaalt.

Om dit probleem te verhelpen introduceert SMP v2.0 de mogelijkheid om parallellisme van gesharde gegevens samen te stellen met tensor-parallellisme. Tensor-parallellisme zorgt ervoor dat de clustergrootte kan toenemen zonder de globale batchgrootte te veranderen of de modelconvergentie te beïnvloeden. Met deze functie kunt u de trainingsdoorvoer veilig verhogen door clusters met 256 knooppunten of meer in te richten.

Tegenwoordig is tensor-parallellisme met PyTorch FSDP alleen beschikbaar met SMP v2. Met SMP v2 kunt u deze techniek inschakelen met een paar regels codewijziging en stabiele training ontgrendelen, zelfs op grote clusters. SMP v2 integreert met Transformator motor voor de implementatie van tensor-parallellisme en maakt het compatibel met de PyTorch FSDP API's. U kunt PyTorch FSDP en SMP tensor-parallellisme tegelijkertijd inschakelen zonder wijzigingen aan te brengen in uw PyTorch-model of PyTorch FSDP-configuratie. De volgende codefragmenten laten zien hoe u het SMP-configuratiewoordenboek in JSON-indeling instelt en de SMP-initialisatiemodule toevoegt torch.sagemaker.init(), dat het configuratiewoordenboek in de backend accepteert wanneer u de trainingstaak start, naar uw trainingsscript.

De SMP-configuratie is als volgt:

{
"tensor_parallel_degree": 8,
"tensor_parallel_seed": 0
}

Gebruik de volgende code in uw trainingsscript:

import torch.sagemaker as tsm
tsm.init()

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_config(..)
model = tsm.transform(model)

Voor meer informatie over het gebruik van tensorparallellisme in SMP raadpleegt u de tensor parallellisme sectie van onze documentatie.

Gebruik geavanceerde functies om modeltraining tot 20% te versnellen

Naast het mogelijk maken van gedistribueerde training op clusters met honderden instances, biedt SMP ook optimalisatietechnieken die modeltraining tot wel 20% kunnen versnellen. In deze sectie belichten we enkele van deze optimalisaties. Raadpleeg voor meer informatie de kernfuncties sectie van onze documentatie.

Hybride scherven

Shard data parallellisme is een geheugenbesparende gedistribueerde trainingstechniek die de status van een model (modelparameters, gradiënten en optimalisatiestatussen) over apparaten verdeelt. Dankzij deze kleinere geheugenvoetafdruk kunt u een groter model in uw cluster passen of de batchgrootte vergroten. Parallellisme van gesharde gegevens verhoogt echter ook de communicatievereisten van uw trainingstaak, omdat de gesharde modelartefacten tijdens de training regelmatig van verschillende apparaten worden verzameld. Op deze manier is de mate van sharding een belangrijke configuratie die een afweging maakt tussen geheugengebruik en communicatieoverhead.

Standaard modelleren PyTorch FSDP-shards artefacten op alle acceleratorapparaten in uw cluster. Afhankelijk van uw trainingstaak kan deze methode van sharding de communicatieoverhead vergroten en een knelpunt creëren. Om hierbij te helpen biedt de SMP-bibliotheek configureerbaar hybride sharded data-parallellisme bovenop PyTorch FSDP. Met deze functie kunt u de mate van sharding instellen die optimaal is voor uw trainingswerklast. Geef eenvoudigweg de mate van sharding op in een configuratie-JSON-object en neem deze op in uw SMP-trainingsscript.

De SMP-configuratie is als volgt:

{ "hybrid_shard_degree": 16 }

Voor meer informatie over de voordelen van parallellisme van hybride gesharde gegevens raadpleegt u Bijna-lineaire schaal van training met gigantische modellen op AWS. Zie voor meer informatie over het implementeren van hybride sharding met uw bestaande FSDP-trainingsscript hybride gedeeld dataparallellisme in onze documentatie.

Gebruik de collectieve communicatieactiviteiten van SMDDP die zijn geoptimaliseerd voor de AWS-infrastructuur

U kunt de SMP-bibliotheek gebruiken met de SageMaker gedistribueerde data-parallellisme (SMDDP)-bibliotheek om uw gedistribueerde trainingswerklasten te versnellen. SMDDP bevat een geoptimaliseerde AllGather collectieve communicatiebewerking ontworpen voor de beste prestaties op SageMaker p4d- en p4de-versnelde instanties. Bij gedistribueerde training worden collectieve communicatiebewerkingen gebruikt om informatie tussen GPU-werknemers te synchroniseren. AllGather is een van de belangrijkste collectieve communicatiebewerkingen die doorgaans worden gebruikt bij parallellisme van gesharde gegevens om de laagparameters te materialiseren vóór voorwaartse en achterwaartse berekeningsstappen. Voor trainingsbanen die door communicatie worden belemmerd, kunnen snellere collectieve operaties de trainingstijd en -kosten verminderen zonder bijwerkingen op de convergentie.

Om de SMDDP-bibliotheek te gebruiken, hoeft u slechts twee regels code aan uw trainingsscript toe te voegen:

import torch.distributed as dist

# Initialize with SMDDP
import smdistributed.dataparallel.torch.torch_smddp
dist.init_process_group(backend="smddp") # Replacing "nccl"

# Initialize with SMP
import torch.sagemaker as tsm
tsm.init()

Naast SMP ondersteunt SMDDP open source PyTorch FSDP en DeepSpeed. Voor meer informatie over de SMDDP-bibliotheek, zie Voer gedistribueerde training uit met de SageMaker-bibliotheek voor gedistribueerde gegevensparallellisme.

Activering ontladen

Normaal gesproken berekent de voorwaartse doorgang van modeltraining activeringen op elke laag en bewaart deze in het GPU-geheugen totdat de achterwaartse doorgang voor de overeenkomstige laag is voltooid. Deze opgeslagen activeringen kunnen tijdens de training aanzienlijk GPU-geheugen in beslag nemen. Activeringsoffloading is een techniek die deze tensors in plaats daarvan na de voorwaartse doorgang naar het CPU-geheugen verplaatst en ze later terug naar de GPU haalt wanneer ze nodig zijn. Deze aanpak kan het GPU-geheugengebruik tijdens de training aanzienlijk verminderen.

Hoewel PyTorch activatie-offloading ondersteunt, is de implementatie ervan inefficiënt en kan ervoor zorgen dat GPU's inactief zijn terwijl activeringen worden teruggehaald van de CPU tijdens een achterwaartse pass. Dit kan aanzienlijke prestatievermindering veroorzaken bij het gebruik van activatie-offloading.

SMP v2 biedt een geoptimaliseerd activatie-offloading-algoritme dat de trainingsprestaties kan verbeteren. De implementatie van SMP haalt activeringen vooraf op voordat ze nodig zijn op de GPU, waardoor de inactieve tijd wordt verminderd.

Omdat SMP bovenop de API's van PyTorch is gebouwd, vereist het inschakelen van geoptimaliseerde activatie-offloading slechts een paar regels codewijziging. Voeg eenvoudig de bijbehorende configuraties toe (sm_activation_offloading en activation_loading_horizon parameters) en neem deze op in uw trainingsscript.

De SMP-configuratie is als volgt:

{
"activation_loading_horizon": 2,
"sm_activation_offloading": True
}

Gebruik in het trainingsscript de volgende code:

import torch.sagemaker as tsm
tsm.init()

# Native PyTorch module for activation offloading
from torch.distributed.algorithms._checkpoint.checkpoint_wrapper import (
apply_activation_checkpointing,
offload_wrapper,
)

model = FSDP(...)

# Activation offloading requires activation checkpointing.
apply_activation_checkpointing(
model,
check_fn=checkpoint_tformer_layers_policy,
)

model = offload_wrapper(model)

Voor meer informatie over de open source PyTorch-controlepunthulpmiddelen voor activeringsoffloading raadpleegt u de checkpoint_wrapper.py script in de PyTorch GitHub-repository en Activeringscontrolepunten in de PyTorch-blogpost Multimodale funderingsmodellen schalen in TorchMultimodal met Pytorch Distributed. Voor meer informatie over de geoptimaliseerde implementatie van activatie-offloading door SMP, zie de activering ontladen sectie van onze documentatie.

Naast hybride sharding, SMDDP en activatie-offloading biedt SMP aanvullende optimalisaties die de werklast van uw grote modeltraining kunnen versnellen. Dit omvat geoptimaliseerde activeringscontrolepunten, vertraagde parameterinitialisatie en andere. Raadpleeg voor meer informatie de kernfuncties sectie van onze documentatie.

Conclusie

Naarmate datasets, modelgroottes en trainingsclusters blijven groeien, wordt efficiënte gedistribueerde training steeds belangrijker voor tijdige en betaalbare levering van modellen en producten. De nieuwste release van de parallelle bibliotheek van het SageMaker-model helpt u dit te bereiken door codewijzigingen te verminderen en af ​​te stemmen op PyTorch FSDP API's, waardoor training op enorme clusters mogelijk wordt gemaakt via tensor-parallellisme en optimalisaties die de trainingstijd met wel 20% kunnen verkorten.

Om aan de slag te gaan met SMP v2, raadpleeg onze documentatie en onze voorbeeld notitieboekjes.


Over de auteurs

Robert van Dusen is een Senior Product Manager bij Amazon SageMaker. Hij leidt raamwerken, compilers en optimalisatietechnieken voor deep learning-trainingen.

louis quintela is de Software Developer Manager voor de parallelle bibliotheek van het AWS SageMaker-model. In zijn vrije tijd is hij te vinden op zijn Harley in de SF Bay Area.

Gautama Kumar is een software-ingenieur met AWS AI Deep Learning. Hij heeft een passie voor het bouwen van tools en systemen voor AI. In zijn vrije tijd fietst hij graag en leest hij graag boeken.

Rahul Huilgol is een Senior Software Development Engineer in Distributed Deep Learning bij Amazon Web Services.

spot_img

Laatste intelligentie

spot_img