Deep Learning Academy · Oppitunti

Synkronoitu Batch Norm ja jaettu tila

Pitäkää tilastot ja painot yhdenmukaisina

Oppitunti 3/413 vaihetta

Synkronoitu Batch Norm ja jaettu tila on ilmainen Deep Learning Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Deep Learning Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Deep Learning Academy-kurssilla on yhteensä 4 oppituntia.

Pienen eräkoon ongelma

Batch norm laskee tilastot kunkin GPU:n paikallisesta erästä. Kun erä jaetaan monelle GPU:lle, laitekohtainen eräkoko pienenee ja tilastoista tulee kohinaisia.

SyncBatchNorm käyttöön

SyncBatchNorm ratkaisee tämän laskemalla keskiarvon ja varianssin yhdessä kaikilta GPU:lta, aivan kuin se näkisi koko globaalin erän.

Muunna yhdellä kutsulla

Teidän ei tarvitse kirjoittaa kerroksia uudelleen käsin. Yksi apufunktio muuntaa mallinne jokaisen BatchNorm-kerroksen synkronoiduksi versioksi.

import torch.nn as nn
model = nn.SyncBatchNorm.convert_sync_batchnorm(model)

Muunna ennen käärimistä

Järjestyksellä on väliä: kutsukaa muunnosta ennen kuin käär iritte mallin DDP:hen, jotta DDP hallinnoi synkronoituja kerroksia.

model = nn.SyncBatchNorm.convert_sync_batchnorm(model)
model = DDP(model, device_ids=[local_rank])

Viestinnällä on hintansa

Tilastojen synkronointi tarkoittaa ylimääräistä all-reduce-operaatiota jokaisessa batch norm -kerroksessa. Käyttäkää sitä, kun pienet GPU-kohtaiset erät heikentävät tarkkuutta, ei oletusarvoisesti.

Muistiraja

Tavallinen DDP kopioi koko mallin, gradientit ja optimoijan tilan jokaiselle GPU:lle. Valtavien mallien kohdalla tämä redundanssi kuluttaa muistia nopeasti.

Tilaa tila

Sharding jakaa tensorit GPU:iden kesken, joten jokainen laite tallentaa vain yhden osan. Yhdessä GPU:t sisältävät silti koko mallin.

FSDP käyttöön

PyTorchin FullyShardedDataParallel jakaa parametrit, gradientit ja optimoijan tilan osiin. Sen avulla voitte kouluttaa malleja, jotka ovat paljon suurempia kuin yhden GPU:n muisti.

from torch.distributed.fsdp import FullyShardedDataParallel as FSDP
model = FSDP(model)

Kokoa vain tarvittaessa

FSDP kokoaa kunkin kerroksen täydet painot vain kun niitä tarvitaan laskentaan ja vapauttaa ne sen jälkeen uudelleen. Näin huippumuistin käyttö pysyy pienenä.

ZeRO-vaiheet

Sharding tapahtuu tasoittain, joita kutsutaan ZeRO-vaiheiksi: ensin jaetaan optimoijan tila, sitten gradientit ja lopuksi parametrit. Mitä enemmän jaetaan, sitä enemmän muistia säästyy.

Valitkaa oikea työkalu

Jos mallinne mahtuu yhden GPU:n muistiin, tavallinen DDP on yksinkertaisin vaihtoehto. Jos se ei mahdu, käyttäkää FSDP:tä tilan jakamiseen ja jatkakaa koulutusta.

Pikatarkistus

Päättäkää, mihin kutakin tekniikkaa todella käytetään.

Kertaus

Tutustuitte kahteen yhdenmukaisuustyökaluun: SyncBatchNorm pitää tilastot globaaleina GPU:iden välillä, ja FSDP jakaa tilan, jotta valtavat mallit mahtuvat muistiin. Käyttäkää kumpaakin vain tarvittaessa.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Synkronoitu Batch Norm ja jaettu tila” ilmainen?

Kyllä – oppitunnin ”Synkronoitu Batch Norm ja jaettu tila” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Deep Learning Academy-kurssin, päivitä CoddyKit PROhon. Deep Learning Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Synkronoitu Batch Norm ja jaettu tila”?

Pitäkää tilastot ja painot yhdenmukaisina Harjoittelet Deep Learning Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Deep Learning Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Deep Learning Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Synkronoitu Batch Norm ja jaettu tila”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Deep Learning Academy-oppitunnilla?

Kyllä. Jokainen Deep Learning Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Data- ja malliparallelismi
  2. DistributedDataParallelin perusteet
  3. Synkronoitu Batch Norm ja jaettu tila
  4. Käynnistäkää työt torchrunilla
← Takaisin: Deep Learning Academy