BERT Large mudeli hajutatud peenhäälestus küsimustele vastamise ülesande jaoks, kasutades Amazon SageMakeris Hugging Face Transformereid

Allikasõlm: 1885069

Alates uute mudelite koolitamisest kuni tootmises kasutuselevõtuni, Amazon SageMaker pakub alustavatele ettevõtetele ja ettevõtetele kõige täiuslikumat tööriistakomplekti masinõppe (ML) ja süvaõppe võimsuse kasutamiseks.

Transformersi avatud lähtekoodiga raamatukogu ja ML-platvormiga Hugging Face muudab ülekandeõppe ja uusimad ML-mudelid ülemaailmsele tehisintellekti kogukonnale kättesaadavaks, vähendades aega, mis kulub andmeteadlastel ja ML-inseneridel ettevõtetes üle maailma, et ära kasutada kõiki uusi teaduslikke eeliseid. areng.

Transformerite rakendamine uutele NLP-ülesannetele või -domeenidele nõuab suurte keelemudelite peenhäälestamist, tehnikat, mis kasutab eelkoolitatud mudelite kogutud teadmisi, et kohandada neid uue ülesande või konkreetset tüüpi dokumentidega täiendava tõhusa koolitusprotsessi käigus.

Mudeli peenhäälestamiseks, et anda täpseid ennustusi käsiloleva äriprobleemi jaoks, on vaja koolitada suuri Transformeri mudeleid, näiteks BERT, BART, RoBERTa, T5, mille skaleeritav toimimine võib olla keeruline.

Hugging Face on tarnimiseks teinud tihedat koostööd SageMakeriga kasutusvalmis süvaõppekonteinerid (DLC-d), mis muudavad koolituse ja uusimate Transformersi mudelite juurutamise lihtsamaks ja kiiremaks kui kunagi varem. Kuna sellised funktsioonid nagu SageMaker Data Parallel (SMDP), SageMaker Model Parallel (SMMP), S3 torurežiim, on konteinerisse integreeritud, vähendab nende kasutamine ettevõtetel oluliselt aega transformeritel põhinevate ML-lahenduste loomiseks, nagu küsimuste vastamine, genereerimine. teksti ja pilte, optimeerides otsingutulemusi ning täiustades klienditoe automatiseerimist, vestlusliideseid, semantilist otsingut, dokumendianalüüse ja paljusid muid rakendusi.

Selles postituses keskendume SageMakeri hajutatud teekide sügavale integreerimisele Hugging Face'iga, mis võimaldab andmeteadlastel kiirendada Transformeri mudelite treenimist ja peenhäälestamist päevadest tundideni, kõike seda SageMakeris.

Ülevaade hajutatud koolitusest

ML-i praktikud ja andmeteadlased seisavad mudelite treenimisel silmitsi kahe skaleerimise väljakutsega: mudeli suuruse (parameetrite ja kihtide arv) skaleerimine ja koolitusandmete skaleerimine. Mudeli suuruse või treeningandmete skaleerimine võib anda tulemuseks parema täpsuse, kuid süvaõppe puhul võib esineda juhtumeid, kus kiirendi (CPU või GPU) mälumaht piirab treeningandmete suuruse ja treeningu andmete suuruse kombinatsiooni. mudel. Näiteks suure keelemudeli koolitamisel on partii suurus sageli piiratud väikese arvu proovidega, mille tulemuseks võib olla vähem täpne mudel.

Jaotatud koolitus võib jagada töökoormuse mudeli koolitamiseks mitme protsessori vahel, nn töötajate. Need töötajad tegutsevad paralleelselt, et kiirendada mudelkoolitust.

Sõltuvalt sellest, mida tahame skaleerida (mudel või andmed), on hajutatud koolitusel kaks lähenemisviisi: paralleelsed andmed ja paralleelsed mudelid.

Andmete paralleel on levinuim lähenemisviis hajutatud koolitusele. Andmete paralleelsus hõlmab mudeli arhitektuuri ja kaalude koopia loomist erinevatel kiirenditel. Seejärel saame kogu treeningkomplekti ühele kiirendile suunamise asemel jagada treeningkomplekti erinevate kiirendite vahel ja läbida treeningkomplekti kiiremini. Kuigi see lisab kiirendite sammu, mis peavad edastama oma gradientiteabe tagasi parameetriserverisse, kompenseerib selle aja enam kui kiiruse suurendamine, mis tuleneb kogu andmestiku murdosast kiirendi kohta. Seetõttu võib andmete paralleelsus oluliselt vähendada treeninguid. Näiteks ühe mudeli väljaõpetamine ilma paralleelsuseta võtab aega 4 tundi. Jaotatud treeningu kasutamine võib seda vähendada 24 minutini. SageMakeri hajutatud koolitus rakendab ka tipptasemel tehnikaid gradiendi värskendustes.

Mudeliga paralleelset lähenemist kasutatakse suurte mudelite puhul, mis on liiga suured, et mahutada ühele kiirendile (GPU). See lähenemisviis rakendab paralleelsusstrateegiat, kus mudeli arhitektuur jagatakse killudeks ja asetatakse erinevatele kiirenditele. Kõigi nende kildude konfiguratsioon sõltub närvivõrgu arhitektuurist ja sisaldab tavaliselt mitut kihti. Kiirendite vaheline side toimub iga kord, kui treeningandmed liiguvad ühest killust teise.

Kokkuvõtteks võiksite kasutada hajutatud treeningandmete paralleelsust suurte andmekogumite tõttu aeganõudvate ülesannete jaoks või kui soovite treeningkatseid kiirendada. Peaksite kasutama mudeli paralleelsust, kui teie mudel ei mahu ühele kiirendile.

Eeldused

Hugging Face Transformers mudelite hajutatud koolituse läbiviimiseks SageMakeris peate täitma järgmised eeltingimused:

Rakendage hajutatud koolitust

Hugging Face Transformersi teek pakub Trainer API-t, mis on optimeeritud teegi pakutavate mudelite treenimiseks või peenhäälestamiseks. Saate seda kasutada ka oma mudelitel, kui need töötavad samamoodi nagu Transformeri mudelid; vaata Treener lisateabe saamiseks. Seda API-t kasutatakse meie näidisskriptid, mis näitavad, kuidas eeltöötleda andmeid erinevate NLP-ülesannete jaoks, mida saate kasutada mudelitena teie enda kohandatud probleemi lahendamiseks skripti kirjutamiseks. Trainer API lubadus on see, et see skript töötab karbist välja mis tahes hajutatud seadistuses, sealhulgas SageMakeris.

Trainer API võtab kõik koolituseks vajaliku. See hõlmab teie andmekogumeid, teie mudelit (või funktsiooni, mis tagastab teie mudeli), a compute_metrics funktsioon, mis tagastab prognooside ja siltide massiividest mõõdikud, mida soovite jälgida, optimeerijast ja õppimiskiiruse planeerijast (pakutakse head vaikeväärtused), samuti kõik hüperparameetrid, mida saate oma treeningu jaoks häälestada ja mis on rühmitatud andmeklassi nimega TrainingArguments. Kõige selle juures pakub see kolm meetodit – treenimine, hindamine ja ennustamine –, et treenida oma mudelit, saada mis tahes andmekogumi mõõdikutulemusi või saada ennustusi mis tahes andmekogumi kohta. Objekti Trainer kohta lisateabe saamiseks vaadake Mudeli peenhäälestus Trainer API-ga ja video Treeneri API, mis juhatab teid läbi lihtsa näite.

Kulisside taga alustab Trainer API keskkonda, milles te oma skripti käivitate, kui loote TrainingArguments. Näiteks kui käivitasite koolituse SageMakeriga, vaatab see SM_FRAMEWORK_PARAMS muutuja keskkonnas, et tuvastada, kas lubasite SageMakeri andmete paralleelsuse või mudeli paralleelsuse. Seejärel hangib see keskkonnast enne vajalike lähtestamistoimingute sooritamist asjakohased muutujad (nt protsessi auaste või maailma suurus). smdistributed.dataparallel.torch.distributed.init_process_group()).

Treener sisaldab kogu treeningtsüklit, nii et see saab reguleerida vajalikke samme, et veenduda smdistributed.dataparallel Vajadusel kasutatakse taustaprogrammi, ilma et peaksite skriptis koodirida muutma. See võib endiselt töötada (kuigi palju aeglasemalt) teie kohalikus masinas silumiseks. See tegeleb teie andmestiku jagamisega nii, et iga protsess näeb automaatselt erinevaid näidiseid, igal ajajärgul toimub ümberjaotamine, sünkroonib teie gradiente enne optimeerimisetappi, kombineerib täppiskoolitust, kui selle aktiveerisite, gradientide kogumist, kui te ei mahuta suurt partii. oma GPU-sid ja palju muid optimeerimisi.

Kui aktiveerisite mudeli paralleelsuse, tagab see, et protsessid, mis peavad nägema samu andmeid (kui nende dp_rank on sama) saada samad partiid ja see töötleb erinevalt dp_rank ei näe samu näidiseid, iga epohhi ümberkorraldamisega. See tagab, et mudeli või optimeerijate olekusõnastikud on kontrollpunkti määramisel korralikult sünkroonitud, ja tegeleb jällegi kõigi optimeeringutega, nagu segatud täpsus ja gradiendi akumulatsioon.

Hindamis- ja ennustamismeetodite kasutamisel teostab koolitaja hajutatud hindamise, et kasutada ära kõik teie GPU-d. See käsitleb õigesti teie andmete tükeldamist iga protsessi jaoks (sama protsess dp_rank kui mudeli paralleelsus on aktiveeritud) ja veendub, et ennustused kogutakse õigesti samas järjekorras nagu teie kasutatav andmestik, enne kui need saadetakse compute_metrics funktsiooni või lihtsalt tagastatud. Treener API kasutamine ei ole kohustuslik. Kasutajad saavad Hugging Face'is endiselt kasutada Kerast või PyTorchit. Treener API võib aga pakkuda abistavat abstraktsioonikihti.

Treenige modelli, kasutades SageMakeri kallistava näo prognoosijaid

Hindaja on SageMakeri koolituse kõrgetasemeline liides, mis tegeleb SageMakeri koolitus- ja juurutamisülesannetega. Helistamisel käivitatakse teie skripti koolitus fit kohta HuggingFace Hindaja. Hindajas määrate, millist peenhäälestusskripti kasutada entry_point, Mis instance_type kasutada ja millised hüperparameetrid edastatakse. Lisateavet selle kohta HuggingFace parameetrid, vt Kallistava näo hindaja.

Jaotatud koolitus: Andmed paralleelselt

Selles näites kasutame uusi Hugging Face DLC-sid ja SageMaker SDK-d, et koolitada hajutatud Seq2Seq-trafo mudelit küsimuste ja vastamise ülesande jaoks, kasutades Transformerite ja andmekogumite teeke. The bert-suur-kasutamata-terviksõna maskeerimine mudel on peenhäälestatud salk andmestik.

Järgmised koodinäidised näitavad a loomise samme HuggingFace kalkulaator andmete paralleelsusega hajutatud koolituse jaoks.

  1. Valige Hugging Face Transformersi skript:
    # git configuration to download our fine-tuning script
    git_config = {'repo': 'https://github.com/huggingface/transformers.git','branch': 'v4.6.1'}

Kui loote a HuggingFace Hindaja, saate prognoosija sisestuspunktiks määrata treeningskripti, mis salvestatakse GitHubi hoidlasse, nii et te ei pea skripte kohapeal alla laadima. Sa võid kasutada git_config Hugging Face Transformersi näidete skriptide käivitamiseks ja õige "haru", kui teie transformers_version tuleb konfigureerida. Näiteks kui kasutate transformers_version 4.6.1, peate kasutama "branch':'v4.6.1'.

  1. Konfigureerige treeningtöösse edastatavad treeningu hüperparameetrid:
    # hyperparameters, which are passed into the training job
    hyperparameters={ 'model_name_or_path': 'bert-large-uncased-whole-word-masking', 'dataset_name':'squad', 'do_train': True, 'do_eval': True, 'fp16': True, 'per_device_train_batch_size': 4, 'per_device_eval_batch_size': 4, 'num_train_epochs': 2, 'max_seq_length': 384, 'max_steps': 100, 'pad_to_max_length': True, 'doc_stride': 128, 'output_dir': '/opt/ml/model'
    }

Hüperparameetrina saame defineerida mis tahes Seq2SeqTrainingArguments ja need, mis on määratletud koolituse skriptis.

  1. Määratlege jaotuse parameetrid jaotises HuggingFace Hinnang:
    # configuration for running training on smdistributed Data Parallel
    distribution = {'smdistributed':{'dataparallel':{ 'enabled': True }}}

Võite kasutada SageMakeri andmete paralleelsuse teek karbist välja jagatud koolituse jaoks. Lisasime andmete paralleelsuse funktsionaalsuse otse Treenerisse. Andmete paralleelsuse lubamiseks saate lihtsalt lisada oma parameetrile ühe parameetri HuggingFace Hindaja, mis võimaldab teie treeneripõhisel koodil seda automaatselt kasutada.

  1. Loo HuggingFace Hindaja, mis sisaldab eelmistes etappides määratletud parameetreid, ja alusta koolitust:
from sagemaker.huggingface import HuggingFace
# estimator
huggingface_estimator = HuggingFace(entry_point='run_qa.py', source_dir='./examples/pytorch/question-answering', git_config=git_config, instance_type= 'ml.p3.16xlarge', instance_count= 2, volume_size= 200, role= <SageMaker Role>, # IAM role, transformers_version='4.6', pytorch_version='1.7', py_version='py36', distribution= distribution, hyperparameters = hyperparameters) # starting the train job huggingface_estimator.fit()

. Hugging Face Transformers hoidla sisaldab mitmeid näiteid ja skripte ülesannete mudelite peenhäälestamiseks alates keele modelleerimisest kuni märgi klassifikatsioonini. Meie puhul kasutame run_qa.py alates examples/pytorch/question-answering näited.

smdistributed.dataparallel toetab SageMakeri mudelikoolitust ainult järgmisi eksemplaritüüpe. Parima jõudluse saavutamiseks soovitame kasutada eksemplari tüüpi, mis toetab Elastsest riidest adapter (EFA):

  • ml.p3.16xsuur
  • ml.p3dn.24xlarge (soovitatav)
  • ml.p4d.24xlarge (soovitatav)

Et saada parimat jõudlust ja maksimaalset kasu SMDataParallel, peaksite kasutama vähemalt kahte eksemplari, kuid võite selle näite testimiseks kasutada ka ühte.

Järgmised näidismärkmik annab üksikasjalikumad samm-sammulised juhised.

Jaotatud koolitus: Mudelparalleel

Mudeli paralleelsusega hajutatud koolituseks kasutame Hugging Face Transformers ja andmekogude teeki koos SageMaker SDK-ga järjestuste klassifitseerimiseks Üldine keeleoskuse hindamine (GLUE) etalon mitme sõlmega, mitme GPU-ga klastris, kasutades SageMakeri mudeli paralleelsuse raamatukogu.

Nagu andmete paralleelsuse puhul, määrame esmalt giti konfiguratsiooni, treeningu hüperparameetrid ja jaotusparameetrid HuggingFace Hinnang:

# git configuration to download our fine-tuning script
git_config = {'repo': 'https://github.com/huggingface/transformers.git','branch': 'v4.6.1'} # hyperparameters, which are passed into the training job
hyperparameters={ 'model_name_or_path':'roberta-large', 'task_name': 'mnli', 'per_device_train_batch_size': 16, 'per_device_eval_batch_size': 16, 'do_train': True, 'do_eval': True, 'do_predict': True, 'num_train_epochs': 2, 'output_dir':'/opt/ml/model', 'max_steps': 500,
} # configuration for running training on smdistributed Model Parallel
mpi_options = { "enabled" : True, "processes_per_host" : 8,
}
smp_options = { "enabled":True, "parameters": { "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "partitions": 4, "ddp": True, }
} distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options
}

Mudeli paralleelsuse teek kasutab sisemiselt MPI-d, nii et mudeli paralleelsuse kasutamiseks peab MPI olema jaotusparameetri abil lubatud. “processes_per_hostEelnev kood määrab protsesside arvu, mida MPI peaks igas hostis käivitama. Soovitame neid arendamiseks ja testimiseks. Tootmise ajal võite võtta ühendust AWS-i toega, kui taotlete suurt GPU võimsust. Lisateabe saamiseks vt Viige läbi SageMakeri hajutatud mudeli paralleelkoolituse töö.

Järgmised näidismärkmik sisaldab täielikke koodiskripte.

Kohtjuhtumid

SageMaker Pythoni SDK Hugging Face raamistiku laiendusega saame kasutada ka täielikult hallatud Amazon Elastic Compute Cloud (Amazon EC2) Kohtjuhtumid ja säästate kuni 90% meie koolituskuludest.

Kui teie koolitustöö ei lõpe kiiresti, soovitame teil seda kasutada kontrollpunkti määramine juhitud kohapealse koolitusega, seetõttu peate määratlema checkpoint_s3_uri.

Punktjuhtumite kasutamiseks koos HuggingFace Hindaja, me peame määrama use_spot_instances parameetri väärtuseks Tõene ja määrake oma max_wait ja max_run aega. Lisateabe saamiseks hallatud kohatreeningu elutsükli kohta vt Hallatud kohapealne koolitus Amazon SageMakeris.

Järgmine on koodilõik punkttreeningu prognoosija seadistamiseks:

from sagemaker.huggingface import HuggingFace # hyperparameters, which are passed into the training job
hyperparameters={'epochs': 1, 'train_batch_size': 32, 'model_name':'distilbert-base-uncased', 'output_dir':'/opt/ml/checkpoints' } # s3 uri where our checkpoints will be uploaded during training
job_name = "using-spot"
checkpoint_s3_uri = f's3://{sess.default_bucket()}/{job_name}/checkpoints' huggingface_estimator = HuggingFace(entry_point='train.py', source_dir='./scripts', instance_type='ml.p3.2xlarge', instance_count=1, base_job_name=job_name, checkpoint_s3_uri=checkpoint_s3_uri, use_spot_instances=True, max_wait=3600, # This should be equal to or greater than max_run in seconds' max_run=1000, # expected max run in seconds role=role, transformers_version='4.6', pytorch_version='1.7', py_version='py36', hyperparameters = hyperparameters)

Järgmised märkmik sisaldab täielikke koodiskripte.

Järeldus

Selles postituses arutasime Hugging Face Transformerite hajutatud koolitust SageMakeri abil. Esmalt vaatasime üle andmete paralleelsuse ja mudeli paralleelsuse kasutusjuhud. Andmete paralleelsus on tavaliselt sobivam, kuid ei pruugi piirduda ainult siis, kui arvutamine takistab treenimist, samas kui mudeli paralleelsust saate kasutada siis, kui mudel ei mahu ühele kiirendile antud mällu. Seejärel näitasime, kuidas mõlema meetodiga treenida.

Andmete paralleelsuse kasutamise juhtumi puhul, mida arutasime, võtab mudeli treenimine ühel p3.2xsuurel eksemplaril (ühe GPU-ga) 4 tundi ja maksab selle kirjutamise ajal ligikaudu 15 dollarit. Andmete paralleelsusega saame sama mudeli treenida 24 minutiga hinnaga 28 dollarit. Kuigi hind on kahekordistunud, on see vähendanud treeninguaega 10 korda. Olukorras, kus peate lühikese aja jooksul palju mudeleid välja õpetama, võimaldab andmete paralleelsus seda suhteliselt väikese kulude kasvuga. Mis puutub mudeli paralleelsuse kasutusjuhtumisse, siis see lisab võimaluse treenida mudeleid, mida riistvaraliste piirangute tõttu poleks saanud varem üldse treenida. Mõlemad funktsioonid võimaldavad ML-praktikute jaoks uusi töövooge ja on hõlpsasti juurdepääsetavad HuggingFace Hindaja SageMaker Python SDK osana. Nende mudelite juurutamine hostitud lõpp-punktidesse järgib sama protseduuri nagu teiste hindajate puhul.

See integratsioon võimaldab muid funktsioone, mis on osa SageMakeri ökosüsteemist. Näiteks saate kasutada punktjuhtumeid, lisades prognoosijale lihtsa lipu kulude täiendavaks optimeerimiseks. Järgmise sammuna saate otsida ja käivitada koolituse demo ja näidismärkmik.


Autoritest

Archis Joglekar on AI/ML partnerlahenduste arhitekt arenevate tehnoloogiate meeskonnas. Ta on huvitatud tulemuslikust, skaleeritavast süvaõppest ja teaduslikust andmetöötlusest, kasutades AWS-i ehitusplokke. Tema varasemad kogemused ulatuvad arvutusfüüsika uurimisest kuni masinõppeplatvormide arendamiseni akadeemilistes ringkondades, riiklikes laborites ja idufirmades. Tema arvutist eemal oldud aeg möödub jalgpalli mängides ning sõprade ja perega.

James Yi on vanem AI/ML partnerlahenduste arhitekt Amazon Web Servicesi arenevate tehnoloogiate meeskonnas. Ta on kirglik koostöösse ettevõtete klientide ja partneritega, et kavandada, juurutada ja skaleerida AI/ML-rakendusi, et tuletada nende äriväärtusi. Väljaspool tööd meeldib talle jalgpalli mängida, reisida ja perega aega veeta.

Philipp Schmid on masinõppeinsener ja Hugging Face tehniline juht, kus ta juhib koostööd Amazon SageMakeri meeskonnaga. Ta on kirglik tipptasemel NLP-mudelite demokratiseerimiseks, optimeerimiseks ja tootmiseks ning süvaõppe kasutusmugavuse parandamiseks.

Sylvain Gugger on Hugging Face uurimisinsener ja Transformersi raamatukogu üks peamisi hooldajaid. Talle meeldib avatud lähtekoodiga tarkvara ja ta aitab kogukonnal seda kasutada.

Jeff Boudier ehitab tooteid Hugging Face'is, mis on juhtiva avatud lähtekoodiga ML-i raamatukogu Transformers looja. Varem oli Jeff GoPro poolt ostetud Stupeflixi kaasasutaja, kus ta töötas tootehalduse, tooteturunduse, äriarenduse ja ettevõtte arenduse direktorina.

Allikas: https://aws.amazon.com/blogs/machine-learning/distributed-fine-tuning-of-a-bert-large-model-for-a-question-answering-task-using-hugging-face- transformers-on-amazon-sagemaker/

Ajatempel:

Veel alates AWS-i masinõppe ajaveeb