BERT Large -mallin hajautettu hienosäätö kysymys-vastaustehtävää varten käyttämällä Hugging Face Transformers -sovellusta Amazon SageMakerissa

Lähdesolmu: 1885069

Uusien mallien koulutuksesta niiden käyttöönottoon tuotannossa, Amazon Sage Maker tarjoaa täydellisimmän joukon työkaluja startupeille ja yrityksille koneoppimisen (ML) ja Deep Learningin tehon valjastamiseen.

Transformers avoimen lähdekoodin kirjaston ja ML-alustan avulla Hugging Face tekee siirtooppimisesta ja uusimmista ML-malleista maailmanlaajuisen tekoälyyhteisön saatavilla, mikä vähentää aikaa, jonka datatutkijat ja ML-insinöörit tarvitsevat yrityksissä ympäri maailmaa hyödyntämään kaikkia uusia tieteellisiä mahdollisuuksia. edistymistä.

Transformersin soveltaminen uusiin NLP-tehtäviin tai -alueisiin edellyttää suurten kielimallien hienosäätöä, tekniikkaa, joka hyödyntää valmiiksi koulutetuista malleista kertynyttä tietoa ja mukauttaa ne uuteen tehtävään tai tietyntyyppisiin asiakirjoihin tehokkaassa lisäkoulutusprosessissa.

Mallin hienosäätäminen tarkkojen ennusteiden tuottamiseksi käsillä olevaan liiketoimintaongelmaan edellyttää suurten Transformers-mallien, esimerkiksi BERT, BART, RoBERTa, T5, koulutusta, joiden suorittaminen skaalautuvalla tavalla voi olla haastavaa.

Hugging Face on toiminut läheisessä yhteistyössä SageMakerin kanssa käyttövalmiit Deep Learning -säiliöt (DLC:t), jotka tekevät uusimpien Transformers-mallien koulutuksesta ja käyttöönotosta helpompaa ja nopeampaa kuin koskaan. Koska ominaisuudet, kuten SageMaker Data Parallel (SMDP), SageMaker Model Parallel (SMMP) ja S3-putkitila, on integroitu säilöön, näiden käyttö vähentää huomattavasti aikaa, joka yrityksillä on luoda Transformers-pohjaisia ​​ML-ratkaisuja, kuten kysymysten vastausta, generointia. tekstiä ja kuvia, optimoida hakutuloksia ja parantaa asiakastuen automaatiota, keskusteluliittymiä, semanttista hakua, asiakirjaanalyysejä ja monia muita sovelluksia.

Tässä viestissä keskitymme SageMaker-hajautettujen kirjastojen syvään integrointiin Hugging Facen kanssa, jonka avulla datatutkijat voivat nopeuttaa Transformers-mallien koulutusta ja hienosäätöä päivistä tuntiin, kaikki SageMakerissa.

Yleiskatsaus hajautettuun koulutukseen

ML-harjoittajat ja datatieteilijät kohtaavat kaksi skaalaushaastetta harjoittaessaan malleja: mallin koon (parametrien ja kerrosten lukumäärä) skaalaus ja harjoitustietojen skaalaus. Joko mallin koon tai harjoitustietojen skaalaus voi johtaa parempaan tarkkuuteen, mutta syvässä oppimisessa voi olla tapauksia, joissa kiihdytin (CPU tai GPU) muistin määrä rajoittaa harjoitustietojen koon ja harjoitustietojen koon yhdistelmää. malli. Esimerkiksi kun opetetaan suurta kielimallia, eräkoko rajoittuu usein pieneen määrään näytteitä, mikä voi johtaa vähemmän tarkaan malliin.

Hajautettu koulutus voi jakaa työmäärän mallin kouluttamiseksi useiden prosessorien kesken, ns työntekijöitä. Nämä työntekijät toimivat rinnakkain mallikoulutuksen nopeuttamiseksi.

Sen perusteella, mitä haluamme skaalata (malli tai data), hajautettuun koulutukseen on kaksi lähestymistapaa: tiedot rinnakkain ja malli rinnakkain.

Data rinnakkais on yleisin lähestymistapa hajautettuun koulutukseen. Tietojen rinnakkaisuus tarkoittaa malliarkkitehtuurista ja painoista eri kiihdyttimien kopion luomista. Sen sijaan, että siirtäisimme koko harjoitussarjan yhdelle kiihdyttimelle, voimme jakaa harjoitussarjan eri kiihdytinten kesken ja saada harjoitussarjan läpi nopeammin. Vaikka tämä lisää vaiheen, jossa kiihdyttimien on välitettävä gradienttitietonsa takaisin parametripalvelimelle, tätä aikaa kompensoi enemmän kuin kiihdytintä kohti koko tietojoukon murto-osan iteroinnin nopeuden lisääminen. Tämän vuoksi tietojen rinnakkaisuus voi merkittävästi lyhentää harjoitusaikoja. Esimerkiksi yhden mallin harjoitteleminen ilman rinnakkaisua kestää 4 tuntia. Hajautetun harjoittelun käyttäminen voi lyhentää sen 24 minuuttiin. SageMakerin hajautettu koulutus toteuttaa myös uusimpia tekniikoita gradienttipäivityksissä.

Mallin rinnakkaista lähestymistapaa käytetään suurissa malleissa, jotka ovat liian suuria mahtumaan yhteen kiihdytin (GPU). Tämä lähestymistapa toteuttaa rinnakkaisstrategian, jossa malliarkkitehtuuri jaetaan sirpaleiksi ja sijoitetaan eri kiihdyttimille. Kunkin näiden sirpaleiden kokoonpano on hermoverkkoarkkitehtuurista riippuvainen ja sisältää tyypillisesti useita kerroksia. Kiihdyttimien välinen tiedonsiirto tapahtuu aina, kun harjoitusdata siirtyy sirpaleista toiseen.

Yhteenvetona voidaan todeta, että sinun tulee käyttää hajautettua harjoitustietojen rinnakkaisuutta aikaa vieviin tehtäviin suurten tietojoukkojen vuoksi tai kun haluat nopeuttaa harjoituskokeitasi. Sinun tulisi käyttää mallin rinnakkaisuutta, kun mallisi ei mahdu yhteen kiihdytin.

Edellytykset

Suorittaaksesi Hugging Face Transformers -mallien hajautetun harjoittelun SageMakerissa, sinun on täytettävä seuraavat edellytykset:

Toteuta hajautettu koulutus

Hugging Face Transformers -kirjasto tarjoaa Trainer API:n, joka on optimoitu kouluttamaan tai hienosäätämään kirjaston tarjoamia malleja. Voit käyttää sitä myös omissa malleissasi, jos ne toimivat samalla tavalla kuin Transformers-mallit; katso Kouluttaja Lisätietoja. Tämä API on käytössä meidän esimerkkiskriptit, jotka näyttävät kuinka esikäsitellä dataa erilaisiin NLP-tehtäviin, joita voit ottaa malleina kirjoittaaksesi komentosarjan, joka ratkaisee oman mukautetun ongelmasi. Trainer API:n lupaus on, että tämä skripti toimii suoraan kaikissa hajautetuissa asetuksissa, mukaan lukien SageMaker.

Trainer API ottaa kaiken tarvittavan koulutukseen. Tämä sisältää tietojoukosi, mallisi (tai funktion, joka palauttaa mallisi), a compute_metrics toiminto, joka palauttaa mittarit, joita haluat seurata predikaatioiden ja otsikoiden taulukoista, optimointityökalusta ja oppimisnopeuden ajoittimesta (hyvät oletusarvot ovat saatavilla), sekä kaikki hyperparametrit, jotka voit virittää harjoitukseesi ryhmiteltynä tietoluokkaan nimeltä TrainingArguments. Kaiken tämän ansiosta se paljastaa kolme menetelmää – kouluttaa, arvioida ja ennustaa – mallin kouluttamiseksi, minkä tahansa tietojoukon mittaustuloksen saamiseksi tai minkä tahansa tietojoukon ennusteiden saamiseksi. Lisätietoja Trainer-objektista on kohdassa Mallin hienosäätö Trainer API:lla ja video Trainer API, joka opastaa sinut yksinkertaisen esimerkin läpi.

Kulissien takana Trainer API aloittaa analysoimalla ympäristön, jossa käynnistät skriptin, kun luot TrainingArguments. Jos esimerkiksi aloitit koulutuksesi SageMakerilla, se tarkastelee SM_FRAMEWORK_PARAMS muuttuja ympäristössä havaitsemaan, oletko ottanut käyttöön SageMaker-tietojen rinnakkaisuuden vai mallin rinnakkaisuuden. Sitten se saa asiaankuuluvat muuttujat (kuten prosessin arvon tai maailman koon) ympäristöstä ennen tarvittavien alustusvaiheiden suorittamista (esim. smdistributed.dataparallel.torch.distributed.init_process_group()).

Trainer sisältää koko harjoitussilmukan, joten se voi säätää tarvittavia vaiheita varmistaakseen, että smdistributed.dataparallel backendiä käytetään tarvittaessa ilman, että sinun tarvitsee muuttaa skriptin koodiriviä. Se voi silti toimia (tosin paljon hitaammin) paikallisella koneellasi virheenkorjausta varten. Se käsittelee tietojoukkosi jakamisen siten, että jokainen prosessi näkee automaattisesti erilaiset näytteet, jakamalla ne uudelleen jokaisella aikakaudella, synkronoimalla gradienttisi ennen optimointivaihetta, suorittamalla eri tarkkuusharjoituksia, jos olet aktivoinut sen, gradientin keräämisen, jos et mahdu suureen eräkokoon GPU:t ja monia muita optimointeja.

Jos aktivoit mallin rinnakkaisuuden, se varmistaa, että prosessit, joiden täytyy nähdä samat tiedot (jos niiden dp_rank on sama) saada samat erät, ja ne käsittelevät eri tavalla dp_rank eivät näe samoja näytteitä, uudelleen jakamalla joka aikakaudella. Se varmistaa, että mallin tai optimoijien tilasanakirjat ovat oikein synkronoituja tarkistuspisteitä tehtäessä, ja käsittelee jälleen kaikki optimoinnit, kuten sekatarkkuuden ja gradientin kertymisen.

Kun käytät arviointi- ja ennustamismenetelmiä, Trainer suorittaa hajautetun arvioinnin hyödyntääkseen kaikkia GPU:tasi. Se käsittelee oikein tietojesi jakamista jokaista prosessia varten (saman prosessin dp_rank jos mallin rinnakkaisuus on aktivoitu) ja varmistaa, että ennusteet kerätään oikein samassa järjestyksessä kuin käyttämäsi tietojoukko ennen kuin ne lähetetään compute_metrics toiminto tai vain palautettu. Trainer API:n käyttö ei ole pakollista. Käyttäjät voivat edelleen käyttää Kerasta tai PyTorchia Hugging Facessa. Trainer API voi kuitenkin tarjota hyödyllisen abstraktiokerroksen.

Harjoittele mallia SageMaker Hugging Face Estimatorsin avulla

Estimator on korkean tason käyttöliittymä SageMaker-koulutukseen ja käsittelee SageMaker-koulutus- ja käyttöönottotehtävät päästä päähän. Käsikirjoituksen koulutusta vedetään, kun soitat fit on HuggingFace Arvioija. Arvioijassa määrität, mitä hienosäätöskriptiä käytetään entry_point, Joka instance_type käytettäväksi ja mitkä hyperparametrit välitetään. Lisätietoja HuggingFace parametrit, katso Halaavien kasvojen arviointityökalu.

Hajautettu koulutus: Data rinnakkain

Tässä esimerkissä käytämme uusia Hugging Face DLC:itä ja SageMaker SDK:ta kouluttaaksemme hajautetun Seq2Seq-muuntajamallin kysymys- ja vastaustehtävään Transformers- ja datasets-kirjastojen avulla. The bert-suuri-kirjoittamaton-koko-sana-naamiointi mallia on hienosäädetty ryhmä aineisto.

Seuraavat koodiesimerkit näyttävät vaiheet a HuggingFace estimaattori hajautettuun koulutukseen tietojen rinnakkaisuudella.

  1. Valitse Hugging Face Transformers -käsikirjoitus:
    # git configuration to download our fine-tuning script
    git_config = {'repo': 'https://github.com/huggingface/transformers.git','branch': 'v4.6.1'}

Kun luot a HuggingFace Estimator, voit määrittää GitHub-tietovarastoon tallennetun harjoitusskriptin Estimatorin aloituspisteeksi, joten sinun ei tarvitse ladata skriptejä paikallisesti. Voit käyttää git_config suorittaaksesi Hugging Face Transformers -esimerkkiskriptit ja oikean 'haaran', jos haluat transformers_version on konfiguroitava. Esimerkiksi jos käytät transformers_version 4.6.1, sinun on käytettäväbranch':'v4.6.1".

  1. Määritä koulutustyöhön siirrettävät koulutuksen hyperparametrit:
    # 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'
    }

Hyperparametriksi voimme määritellä minkä tahansa Seq2SeqTrainingArguments ja koulutusohjelmassa määritellyt.

  1. Määritä jakeluparametrit HuggingFace Arvioija:
    # configuration for running training on smdistributed Data Parallel
    distribution = {'smdistributed':{'dataparallel':{ 'enabled': True }}}

Voit käyttää SageMaker-tietojen rinnakkaiskirjasto laatikosta hajautettua koulutusta varten. Lisäsimme tiedon rinnakkaisuuden toiminnot suoraan Traineriin. Ota tietojen rinnakkaisuus käyttöön lisäämällä tietoosi yhden parametrin HuggingFace Estimaattori, joka antaa Trainer-pohjaisen koodisi käyttää sitä automaattisesti.

  1. Luo HuggingFace Estimaattori, joka sisältää edellisissä vaiheissa määritellyt parametrit ja aloita harjoittelu:
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 -varasto sisältää useita esimerkkejä ja komentosarjoja tehtävien mallien hienosäätöön kielimallintamisesta merkkien luokitteluun. Meidän tapauksessamme käytämme run_qa.py mistä examples/pytorch/question-answering esimerkkejä.

smdistributed.dataparallel tukee mallikoulutusta SageMakerilla vain seuraavat ilmentymätyypit. Parhaan suorituskyvyn saavuttamiseksi suosittelemme käyttämään ilmentymätyyppiä, joka tukee Joustava kangasadapteri (EFA):

  • ml .p3.16xlarge
  • ml.p3dn.24xlarge (suositus)
  • ml.p4d.24xlarge (suositus)

Saadaksesi parhaan suorituskyvyn ja parhaan hyödyn SMDataParallel, sinun tulee käyttää vähintään kahta esiintymää, mutta voit myös käyttää yhtä tämän esimerkin testaamiseen.

Seuraavat esimerkki muistikirja tarjoaa yksityiskohtaisempia vaiheittaisia ​​ohjeita.

Hajautettu koulutus: Mallin rinnakkaiskoulutus

Hajautettuun koulutukseen mallin rinnakkaisuudella käytämme Hugging Face Transformers - ja tietojoukkokirjastoa yhdessä SageMaker SDK:n kanssa sekvenssiluokitukseen Yleinen kielen ymmärtämisen arviointi (liima) benchmark usean solmun, usean GPU-klusterin avulla SageMaker mallin rinnakkaisuuskirjasto.

Kuten tietojen rinnakkaisuuden tapauksessa, asetamme ensin git-kokoonpanon, harjoitushyperparametrit ja jakeluparametrit HuggingFace Arvioija:

# 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
}

Mallin rinnakkaiskirjasto käyttää sisäisesti MPI:tä, joten mallin rinnakkaisuuden käyttämiseksi MPI on otettava käyttöön jakeluparametrilla. "processes_per_host" edellisessä koodissa määrittää prosessien määrän MPI:n tulee käynnistää kussakin isännässä. Suosittelemme näitä kehittämiseen ja testaukseen. Tuotannon aikana voit ottaa yhteyttä AWS-tukeen, jos tarvitset laajaa GPU-kapasiteettia. Katso lisätietoja Suorita SageMaker-hajautettu mallin rinnakkaiskoulutustyö.

Seuraavat esimerkki muistikirja sisältää täydelliset koodiskriptit.

Paikalliset tapaukset

SageMaker Python SDK:n Hugging Face -kehyslaajennuksen avulla voimme myös hyödyntää täysin hallittuja Amazonin elastinen laskentapilvi (Amazon EC2) Paikalliset tapaukset ja säästät jopa 90 % koulutuskustannuksistamme.

Ellei koulutustyösi valmistu nopeasti, suosittelemme käyttämään tarkistuspiste hallitulla paikalla harjoittelulla, joten sinun on määritettävä checkpoint_s3_uri.

Spot-instanssien käyttäminen HuggingFace Arvioija, meidän on asetettava use_spot_instances parametrin arvoksi True ja määritä oma max_wait ja max_run aika. Lisätietoja hallitun pisteen harjoittelun elinkaaresta on kohdassa Ylläpito pistekoulutuksessa Amazon SageMakerissa.

Seuraavassa on koodinpätkä spot-harjoitteluarvioinnin määrittämistä varten:

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)

Seuraavat muistikirja sisältää täydelliset koodiskriptit.

Yhteenveto

Tässä viestissä keskustelimme Hugging Face Transformersin hajautetusta harjoittelusta SageMakerin avulla. Tarkastelimme ensin tietojen rinnakkaisuuden ja mallin rinnakkaisuuden käyttötapaukset. Tietojen rinnakkaisuus on tyypillisesti tarkoituksenmukaisempaa, mutta ei välttämättä rajoitettua silloin, kun harjoittelu on pullonkaula laskennan takia, kun taas voit käyttää mallin rinnakkaisuutta, kun malli ei mahdu yksittäisen kiihdytin muistiin. Sitten näytimme kuinka harjoitella molemmilla tavoilla.

Käsittelemämme tietojen rinnakkaisuuden käyttötapauksessa mallin kouluttaminen yhdelle p3.2xlarge-esiintymälle (yhdellä GPU:lla) kestää 4 tuntia ja maksaa noin 15 dollaria tätä kirjoitettaessa. Tietojen rinnakkaisuuden ansiosta voimme kouluttaa saman mallin 24 minuutissa hintaan 28 dollaria. Vaikka kustannukset ovat kaksinkertaistuneet, tämä on lyhentänyt harjoitusaikaa 10-kertaiseksi. Tilanteessa, jossa sinun on koulutettava useita malleja lyhyessä ajassa, tietojen rinnakkaisuus voi mahdollistaa tämän suhteellisen alhaisella kustannusten nousulla. Mitä tulee mallin rinnakkaisuuden käyttötapaukseen, se lisää mahdollisuuden kouluttaa malleja, joita ei olisi voitu aiemmin kouluttaa ollenkaan laitteistorajoitusten vuoksi. Molemmat ominaisuudet mahdollistavat uusia työnkulkuja ML-ammattilaisten käyttöön, ja ne ovat helposti käytettävissä HuggingFace Estimaattori osana SageMaker Python SDK:ta. Näiden mallien käyttöönotto isännöityihin päätepisteisiin noudattaa samaa menettelyä kuin muiden arvioijien tapauksessa.

Tämä integrointi mahdollistaa muut ominaisuudet, jotka ovat osa SageMaker-ekosysteemiä. Voit esimerkiksi käyttää Spot-instanssia lisäämällä arviointityökaluun yksinkertaisen lipun kustannusten lisäoptimointia varten. Seuraavana vaiheena voit etsiä ja suorittaa koulutus demo ja esimerkki muistikirja.


Tietoja Tekijät

Archis Joglekar on AI/ML Partner Solutions -arkkitehti Emerging Technologies -tiimissä. Hän on kiinnostunut suorituskykyisestä, skaalautuvasta syväoppimisesta ja tieteellisestä laskennasta, joka käyttää AWS:n rakennuspalikoita. Hänen aiemmat kokemuksensa vaihtelevat laskennallisen fysiikan tutkimuksesta koneoppimisalustojen kehittämiseen korkeakouluissa, kansallisissa laboratorioissa ja startupeissa. Hänen aikansa tietokoneen ääressä kuluu pelaamalla jalkapalloa sekä ystävien ja perheen kanssa.

James Yi on vanhempi AI/ML Partner Solutions -arkkitehti Amazon Web Servicesin Emerging Technologies -tiimissä. Hän on intohimoinen työskentely yritysasiakkaiden ja kumppaneiden kanssa suunnitella, ottaa käyttöön ja skaalata tekoäly-/ML-sovelluksia niiden liiketoiminta-arvojen johtamiseksi. Työn ulkopuolella hän pelaa jalkapalloa, matkustaa ja viettää aikaa perheensä kanssa.

Philipp Schmid on koneoppimisinsinööri ja tekninen johtaja Hugging Facessa, jossa hän johtaa yhteistyötä Amazon SageMaker -tiimin kanssa. Hän on intohimoinen huippuluokan NLP-mallien demokratisoimiseen, optimointiin ja tuotantoon sekä Deep Learningin käytön helppouden parantamiseen.

Sylvain Gugger on Hugging Facen tutkimusinsinööri ja yksi Transformers-kirjaston tärkeimmistä ylläpitäjistä. Hän rakastaa avoimen lähdekoodin ohjelmistoja ja auttaa yhteisöä käyttämään niitä.

Jeff Boudier rakentaa tuotteita Hugging Facessa, joka on johtava avoimen lähdekoodin ML-kirjaston, Transformersin, luoja. Aiemmin Jeff oli yksi GoPron ostaman Stupeflixin perustajista, jossa hän toimi tuotehallinnan, tuotemarkkinoinnin, liiketoiminnan kehittämisen ja yrityskehityksen johtajana.

Lähde: 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/

Aikaleima:

Lisää aiheesta AWS-koneoppimisblogi