Treenige peaaegu lineaarse skaleerimisega hiiglaslikke mudeleid, kasutades Amazon SageMakeris killustatud andmete paralleelsust

Suurema täpsuse saavutamiseks on süvaõppe mudelid sellistes valdkondades nagu loomuliku keele töötlemine ja arvutinägemine viimastel aastatel märkimisväärselt kasvanud, sageli loetakse neid kümnetes kuni sadades miljardites parameetrites. Nende hiiglaslike mudelite koolitamine on keeruline ja nõuab keerulisi levitamisstrateegiaid. Andmeteadlased ja masinõppeinsenerid otsivad pidevalt parimat viisi oma koolitusarvutuse optimeerimiseks, kuid neil on raskusi sidekuludega, mis võivad suureneda koos klastri üldise suurusega.

Seetõttu käivitasime hiljuti skõva andmete paralleelsus on Amazon SageMaker, uus mälu säästev hajutatud treeningtehnika SageMakeri mudeli paralleelteek (SMP).. Jagatud andmete paralleelsus on loodud äärmuslike mudelite jaoks ja kasutab Amazoni ettevõttesisest MiCS kapoti all olev tehnoloogia, teaduslik püüdlus minimeerida side ulatust, vähendades kulukaid sidekulusid, mille juured on parameetrite kogumine ja gradientide sünkroonimine. 30B parameetriga GPT-2 mudeliga jada pikkusega 2048 saavutas see uus funktsioon 141 TFLOP-i, mis on 39.7% kiirem võrreldes DeepSpeed ​​ZeRO-3-ga. 10B GPT-2 mudeli puhul, mille järjestuse pikkus on 512, saavutas see uus funktsioon ka 564 näidist sekundis, mis on 13.9% kiirem võrreldes PyTorchi täielikult jagatud andmeparalleeliga (FSDP). Pidage meeles, et hiiglaslikul mudelikoolitusel tähendab iga kiirendamise protsent teie meeskonna säästetud dollareid ja suurenenud tootlikkust.

Selles ajaveebi postituses vaatleme esmalt põhjalikumalt killustatud andmete paralleelsuse peamisi eristajaid ja seda, millal seda kasutada. Seejärel saate teada, kuidas selle uue funktsiooniga SageMakeris hõlpsalt välja õpetada 30B parameetriga GPT-2 mudelit. Lõpuks võrdleme jõudlust teiste avatud lähtekoodiga valikutega, mis ületab 39.7 GPU puhul DeepSpeed ​​ZeRO-d kuni 256%.

Kuidas killustatud andmete paralleelsus töötab ja millal seda kasutada

Enne kui tutvustame killustatud andmete paralleelsust, vaatame selle laiemat tehnikaperekonda. Hiljutised suurte mudelite hajutatud koolitusmeetodid on liikunud paradigmasse, kus mudeli parameetrid, gradiendid ja optimeerija olekud jagatakse andmetega paralleelsete sõlmede vahel. Erinevalt torujuhtme paralleelsusest, millel on seadmete vahel jagamiseks kihtide valimise loomupärane keerukus, eriti kui teie raamistik seda ei toeta automaatne mudeli jagamine, säilitab see paradigma elegantselt andmete paralleelsuse lihtsuse, eemaldades samal ajal andmete paralleelsuse piirangu, kus mudel peab mahtuma ühte GPU-sse.

Olemasolevates raamistikes, mis kuuluvad selle paradigma alla, eriti DeepSpeed ​​ZeRO-3 ja PyTorchi FSDP, mis on FairScale'ist ülesvoolu, on mudeli olekud killustatud. kõik GPU-d – strateegia, mis vähendab iga GPU mälutarbimist suurte sidekulude arvelt, mis suureneb koos klastri suurusega ja põhjustab seetõttu skaleeritavuse mastaabis märkimisväärselt vähenemist. Seevastu killustatud andmete paralleelsus SMP teegi partitsioonide mudelis on punktis a mastaabiteadlik viisil, jagades iga mudeliolekute koopia ainult sees alamhulk GPU-dest.

Vaatame lähemalt mastaabiteadlik mudeli partitsioonid MiCS-is, mis on paralleelsete andmete killustatud põhitehnoloogia. Selle konstruktsiooni intuitsioon seisneb selles, et kümnete miljardite parameetritega mudeli väljaõpetamiseks ei pruugi koolitusolekute jaotamist kogu andme-paralleelrühmas olla vaja. Näiteks piisab 8 V100 GPU-st (igaüks 32 GB), et hoida mudeliolekute koopiat 10B parameetriga mudelist, mis vajab Adam optimeerijaga treenimisel segatäpsusega umbes 200 GB mälu. Piirates mudeli olekute täielikku koopiat väikseim GPU-de alamhulga, saame tõhusalt vähendada side üldkulusid võrreldes DeepSpeedi ja PyTorchi FSDP-ga. Jagatud andmete paralleelne kasutamine kasutab ka muid MiCS-i tehnikaid, nagu hierarhiline side ja 2-hop gradientsünkroniseerimine. Lisateabe saamiseks vaadake AWS-i hiiglasliku mudeli koolituse peaaegu lineaarne skaleerimine or MiCS: peaaegu lineaarne skaleerimine hiiglasliku mudeli treenimiseks avalikus pilves.

Kuidas nüüd teada saada, millal valida killustatud andmed paralleelselt muude hajutatud treeningtehnikatega? Üldreegel on see, et kui teie mudelil on vähem kui 1 miljard parameetrit ja see mahub GPU mällu, SageMakeri andmete paralleelteek or SageMaker koolituse koostaja võib teile piisata. Kui teil on suuremad keele- või arvutinägemismudelid, soovitame seda treenida killustatud andmete paralleelsuse tehnikaga koos aktiveerimise kontrollpunkt ja aktiveerimise mahalaadimine esmalt SageMakeri mudeli paralleelteegis, enne muid tehnikaid, nagu tensori paralleelsus või torujuhtme paralleelsus.

Killutatud andmete paralleelsuse kasutamine GPT-2 koolitamiseks Amazon SageMakeris

Nüüd õpime, kuidas õpetada paralleelselt killustatud andmetega GPT-2 mudelit, mille keerukuse katab SMP. See täielik õpetusmärkmik juhendab teid läbi kogu protsessi alates andmetöötlusest, koolitustööde määratlemisest ja esitamisest kuni koolituslogide jälgimiseni. Järgnev on lühike ülevaade, mis tõstab esile selle funktsiooni kasutamise peamised sammud.

1. Alustage

Jagatud andmete paralleelsus on saadaval versioonis PyTorch v1.12.0+ ja töötab nii FP16 kui ka BF16-ga. Lihtsaim viis SMP teeki kasutamiseks on PyTorchi jaoks eelehitatud AWS-i süvaõppekonteiner. Kui aga soovite oma Dockeri konteinerit kaasa võtta, võite viidata Looge oma Dockeri konteiner SageMakeri hajutatud mudeli paralleelteegi abil. Alustamiseks järgige Muutke PyTorchi koolitusskripti SMP-de API-de kohandamiseks oma koolitusskriptis. Selles jaotises kutsume esile ainult mõned peamised sammud kasutusvalmis koolitusskripti koodilõikudega train_gpt_simple.py. Saate jälgida skripti kommentaare ja API dokument et saada lisateavet selle kohta, kus SMP API-sid kasutatakse.

Esmalt importige ja lähtestage teek helistades smdistributed.modelparallel.torch.init() treeningskripti alguses:

import smdistributed.modelparallel.torch as smp

smp.init(smp_config)

Teiseks mähitage mudel, millega sektsiooni soovite smdistributed.modelparallel.torch.DistributedModel ja kasuta tagastatud DistributedModel edasine objekt:

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_config(model_config)
model = smp.DistributedModel(model, trace_device="gpu", backward_passes_per_step=args.gradient_accumulation)

Pakkige optimeerija sisse smdistributed.modelparallel.torch.DistributedOptimizer optimeerija olekute salvestamiseks ja laadimiseks.

from torch import optim

optimizer = optim.Adam(
    param_groups, betas=(args.beta1, args.beta2), lr=args.lr, weight_decay=args.weight_decay
)

optimizer = smp.DistributedOptimizer(
        optimizer, 
        static_loss_scale=None, 
        dynamic_loss_scale=True,
        dynamic_loss_args={"scale_window": 1000, "min_scale": 1, "delayed_shift": 2},
        )

Pange edasi ja tagasi loogika sammufunktsiooni ja kaunistage sellega smdistributed.modelparallel.torch.step.  Mis tahes arvutus, mis on määratletud sees smp.step-decorated funktsiooni täidetakse hajutatud viisil.

@smp.step
def train_step(model, optimizer, input_ids, attention_mask, args):
    loss = model(input_ids=input_ids, attention_mask=attention_mask, labels=input_ids)["loss"]
    model.backward(loss)

    return loss

@smp.step
def test_step(model, input_ids, attention_mask):
    loss = model(input_ids=input_ids, attention_mask=attention_mask, labels=input_ids)["loss"]
    
    return loss

2. Valmistage ette andmestik

Me kasutame avatud veebitekst on andmestik, mida me selles näites kasutame. Märkmik kasutab skripti data_prep_512.py andmestiku allalaadimiseks ja eeltöötlemiseks. Muutes saate treenida ka teiste andmekogumitega data_pipeline.py. Suure andmestiku ja mudeliga tegelemisel saate treeningtööd kiirendada, kasutades salvestatud andmeid Amazon FSx Lusteri jaoks, mis pakub suure jõudlusega failisüsteemi, mis on algselt integreeritud Amazoni lihtne salvestusteenus (S3). Palun vaadake juhiseid aadressilt Seadistage andmesisestuskanal kasutama Amazon FSx-i läige jaoks FSx Lusteri failisüsteemi andmesisestuskanaliks määramise juhiste saamiseks.

3. Alustage koolitustöödega

See samm eeldab, et olete juba teinud muutis teie treeningskripti ja koostas andmestiku, nagu eelmistes jaotistes mainitud. To lubage killustatud andmete paralleelsus, lihtsalt määrake sharded_data_parallel_degree aasta PyTorchi hindaja. Selles õpetuses seadsime sharded_data_parallel_degree=128 ja instace_count=32 p4d.24xlarge node jaoks, mis näitab, et mudeli olekud jagatakse 128 GPU vahel 256 GPU hulgast. Selle valitud väärtuse põhjal määrab SMP seejärel automaatselt andmete paralleelsuse astmeks 2 (kuna 256/128 = 2), mis tähendab, et meil on andmete paralleelsuse jaoks kaks koopiat. Üldreegel ideaalse väärtuse valimiseks sharded_data_parallel_degree on lisada jagamisrühma veel üks sõlm iga 3B mudeliparameetri kohta. Selles õpetuses on meie mudeli suurus 30B, seega peaksime jagamiseks kasutama vähemalt 10 sõlme. Ja kuna 16 sõlme (128 GPU-d) on 2-st väikseim võimsus, mis ületab läve, määrasime sharded_data_parallel_degree=128.

Kontrollpunktide määramiseks pakume ka komplekti kontrollpunktide määramise utiliite sharded_data_parallel_checkpoint.py , sealhulgas utiliit täielikult rekonstrueerimiseks state_dict edasijõudnud kasutusjuhtudeks. Lõpuks saame käivitada hajutatud treeningtöö, kutsudes prognoos välja fit().

smp_estimator = PyTorch(
    entry_point="train_gpt_simple.py",
    instance_type="ml.p4d.24xlarge",
    source_dir=os.getcwd(),
    volume_size=500,
    instance_count=32,
    distribution={
        "mpi": {
            "enabled": True,
            "processes_per_host": processes_per_host,
            "custom_mpi_options": mpioptions,
        },
        "smdistributed": {
            "modelparallel": {
                "enabled": True,
                "parameters": {
                    "ddp": True,
                    "skip_tracing": True,
                    "delayed_parameter_initialization": True,
                    "offload_activations": True,
                    "activation_loading_horizon": 4,
                    # To enable sharded data parallelism.
                    # Here we shard model states across 128 GPUs. 
                    "sharded_data_parallel_degree": 128, 
                    "fp16": False,
                    "bf16": True,
                    # This is to disable pipeline parallelism.
                    "partitions": 1,
                },
            }
        },
    },
    framework_version="1.12",
    py_version="py38",
    hyperparameters=hyperparameters,
    checkpoint_s3_uri=checkpoint_s3_uri if not use_fsx else None,
    checkpoint_local_path=hyperparameters["checkpoint-dir"] if use_fsx else None,
    ...
)

smp_estimator.fit(inputs=data_channels)

4. Jälgige koolitustöid

Saate juurdepääsu treeninglogidele ning jälgida GPU ja mälu kasutamist Amazon CloudWatch. Vaadake kindlasti algo-1 logisid sest see on põhisõlm, mille väljundvoos on kõigi eksemplaride koolitustööde logid.

Võrdlusuuringu tulemuslikkus

Võrdlesime killustatud andmete paralleelsust SMP teegis nii 16 kui ka 32 p4d.24xlarge sõlme puhul järjestuse pikkusega 512 ja 2048. 30B parameetriga GPT2 mudel on konfigureeritud kasutama peidetud laiust 7168, 48 kihti ja 64 pead. Seadistades saate kasutada täpselt sama konfiguratsiooni, kus jada pikkus on 2048 model_config = "gpt2-30b" õpetuse märkmikus. Selle sättega saavutas SMP 73.52 proovi sekundis, mis on 39.7% kiirem kui DeepSpeed ​​ZeRO-3. Kui teie märgi suurus on 500 miljardit, tähendab see kiirus p367d.4xlarge sõlmedelt peaaegu 24 tundi säästmist, mis võrdub enam kui 12,000 XNUMX dollari eelarve säästmisega koolituse kohta! Järgmine tabel võtab kokku meie võrdlusuuringu tulemused.

konfiguratsioon jõudlus SMP-ga treenimise aeg (päevades)
Modell/koolitus Cluster DeepSpeed SMP Kiirus (näidised/s)
DeepSpeed ​​v0.7.2
Kiirus (näidised/s)
SMP v1.11
% SMP kiirendamine SMP saavutanud TFLOPS 100 miljardit märki 500 miljardit märki
30B GPT-2
Sarja pikkus: 512
Globaalne partii suurus: 3072
FP16
16 p4d.24xsuurt sõlme Aktiveerimise kontrollpunkt
gradient_akumulatsiooni_sammud:2
Aktiveerimise kontrollpunkt
sharded_data_parallel_degree:64
gradient_akumulatsioon:1
142 181.05 27.5 173.6 12.49 62.43
30B GPT-2
Sarja pikkus: 2048
Globaalne partii suurus 1536
FP16
32 p4d.24xsuurt sõlme Aktiveerimise kontrollpunkt
gradient_akumulatsiooni_sammud:2
Aktiveerimise kontrollpunkt sharded_data_parallel_degree:128
gradient_akumulatsioon:1
52.6 73.52 39.77 141 7.69 38.43
1/ Testisime iga mudeli konfiguratsiooni jaoks DeepSpeed ​​ZeRO erinevaid funktsioone, etappe ja konfiguratsioone ning valisime DeepSpeedi baasjooneks selle, mis tagab parima läbilaskevõime. Etaloniga sõideti edasi Amazon Elastic Compute Cloud (Amazon EC2). 2/ Need tulemused põhinevad AWS-i jaoks optimeeritud täiustatud suhtluskollektiividel, mis tehakse peagi kättesaadavaks. 3/ Treenimiseks kuluv aeg arvutatakse kiiruse alusel, mis põhineb töödeldud žetoonide arvul.

Kokkuvõttes täheldasime erinevate mudelite ja konfiguratsioonide puhul pidevalt suuremat läbilaskevõimet koos killustatud andmete paralleelsusega, võrreldes DeepSpeediga. See uus funktsioon näitas ka DeepSpeediga võrreldes paremat mälutõhusust, võimaldades SMP-l mahutada suurema partii suurust ja vähendada teatud globaalse partii mahu jaoks vajalikku gradiendi kogunemist.

Järeldus

Selles postituses tutvustasime uut hajutatud treeningtehnikat – killustatud andmete paralleelsust – ja seda, kuidas see kiirendab Amazon SageMakeris peaaegu lineaarse skaleerimisega hiiglaslikku mudelitreeningut. Käisime läbi ka selle, kuidas GPT-2 mudelit uue tehnikaga treenida täielik näide. Saate jälgida Amazon SageMakeri näited GitHubi repo et jälgida kõiki SageMakeri mudeli paralleelnäiteid või osaleda järgmisel jagasid koolitusi. Lisateavet killustatud andmete paralleelsuse kohta leiate artiklist dokumentatsioon.


Autoritest

Treenige peaaegu lineaarse skaleerimisega hiiglaslikke mudeleid, kasutades killustatud andmete paralleelsust rakenduses Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Emily Webber liitus AWS-iga vahetult pärast SageMakeri käivitamist ja on sellest ajast saati üritanud sellest maailmale rääkida! Lisaks klientidele uute ML-kogemuste loomisele naudib Emily mediteerimist ja Tiibeti budismi õppimist.

Treenige peaaegu lineaarse skaleerimisega hiiglaslikke mudeleid, kasutades killustatud andmete paralleelsust rakenduses Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Kas Karakus on AWS-i vanemrakendusteadlane, kes optimeerib AWS-is laiaulatuslikku hajutatud süvaõpet. Tema uurimisvaldkonnad hõlmavad süvaõpet, hajutatud optimeerimist, hajutatud süsteeme ja teabeteooriat. Väljaspool tööd naudib ta jalgrattasõitu, reisimist, lugemist ja õppimist.

Treenige peaaegu lineaarse skaleerimisega hiiglaslikke mudeleid, kasutades killustatud andmete paralleelsust rakenduses Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Rahul Huilgol on AWS-i vanemtarkvarainsener. Ta töötab hajutatud süvaõppesüsteemide kallal, et muuta suurte süvaõppemudelite pilves treenimine lihtsaks ja tõhusaks. Vabal ajal harrastab ta fotograafiat, jalgrattasõitu ja aiatööd.

Treenige peaaegu lineaarse skaleerimisega hiiglaslikke mudeleid, kasutades killustatud andmete paralleelsust rakenduses Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Suhit Kodgule on tarkvaraarenduse insener koos AWS-i tehisintellekti rühmaga, kes töötab süvaõppe raamistike kallal. Vabal ajal meeldib talle matkata, reisida ja süüa teha.

Treenige peaaegu lineaarse skaleerimisega hiiglaslikke mudeleid, kasutades killustatud andmete paralleelsust rakenduses Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Erin Ho on AWS-i süvaõppe tootejuht. Ta töötab toodete kallal, mis muudavad klientide jaoks AWS-is süvaõppemudelite koolitamise lihtsamaks. Lõbusaks väljaspool tööd naudib ta matkamist ja suusatamist.

Ajatempel:

Veel alates AWS-i masinõpe