Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 3298|Odgovoriti: 0

Dvojna natančnost (FP64), enojna natančnost (P32, TF32), Polovična natančnost (FP16, BF16)

[Kopiraj povezavo]
Objavljeno 10. 3. 2025 ob 14:22:34 | | | |
Učenje in sklepanje velikih modelov pogosto vključuje koncept natančnosti, obstaja veliko vrst in so razdeljene v različne formate na isti ravni natančnosti. Poleg tega obstajajo tudi koncepti večnatančnosti in mešane natančnosti v praktičnih scenarijih uporabe.

Skupna natančnost

Natančnost pri plavajoči vejici: dvojna natančnost (FP64), enojna natančnost (FP32, TF32), polovična natančnost (FP16, BF16), 8-bitna natančnost (FP8), 4-bitna natančnost (FP4, NF4)
Natančnost kvantifikacije: INT8, INT4 (tudi INT3/INT5/INT6)

Število s plavajočo vejico je sestavljeno iz treh delov: predznaka, eksponentnega in mantisinega bita. Večji kot je eksponentni bit, večji je razpon števil, ki jih je mogoče predstaviti. Večja kot je številka mantise, večja je natančnost števila.



Tabela to povzema takole

oblika zapisasimbolni bitEksponentni bitDecimalkoSkupno število števk
FP641115264
FP32182332
TF32181019
BF1618716
FP16151016
FP8 E4M31438
FP8 E5M21528
FP41214


FP32: 32-bitna številka s plavajočo vejico, 4 bajti na podatek
TF32: 19-bitna številka s plavajočo vejico, vsak podatek je 2 bajta
FP16: 16-bitna številka s plavajočo vejico, 2 bajta na podatek
BF16: 16-bitna številka s plavajočo vejico, vsak podatek je 2 bajta
Int8: 8-bitno celo število, vsak podatek zajema 1 bajt
Int4: 4-bitna cela števila, vsak podatek je velik 0,5 bajta

Zakaj toliko natančnosti

Zaradi stroškov in natančnosti. Vsi vemo, da je visoka natančnost zagotovo bolj natančna, vendar bo prinesla tudi višje stroške računalništva in shranjevanja. Nižja natančnost zmanjša natančnost izračunov, vendar lahko izboljša računsko učinkovitost in zmogljivost. Tako vam različne natančnosti omogočajo, da izberete najbolj primerno za različne situacije.
Dvojna natančnost je natančnejša od enkratne natančnosti, vendar zavzame dvakrat več prostora in zahteva več časa za izračun.

Zakaj je treba velike modele kvantificirati?

1. Zmanjšajte porabo pomnilnika
Veliki modeli običajno uporabljajo 32-bitne številke s plavajočo vejico (FP32) ali 16-bitne številke s plavajočo vejico (FP16) za predstavitev uteži in aktivacijskih vrednosti. S kvantizacijo je mogoče te visoko natančne vrednosti pretvoriti v predstavitve z nižjo natančnostjo (npr. 8-bitna cela števila, INT8), kar bistveno zmanjša prostor za shranjevanje modela. To je pomembno za uporabo na napravah z omejenimi viri, kot so mobilne naprave, vgrajeni sistemi itd.

2. Pospešite hitrost sklepanja
Kvantizirani modeli lahko delujejo učinkoviteje na strojni opremi. Veliko sodobne strojne opreme (kot so GPU-ji, TPU-ji, NPU-ji itd.) ima specializirano podporo za optimizacijo nizko-natančnega računanja, kar omogoča hitrejše kvantizacijske operacije. Poleg tega nizko natančni izračuni pogosto vključujejo manj bitnih operacij, kar zmanjšuje računsko zahtevnost in s tem pospešuje sklepanje.

3. Zmanjšati porabo energije
Kvantizirani model ne le zmanjšuje potrebo po računalniških virih, temveč tudi zmanjšuje porabo energije. To je še posebej pomembno za naprave na baterije, kot so pametni telefoni, IoT naprave itd., kjer nizka poraba energije pomeni daljšo življenjsko dobo baterije.

4. Enostavno uvajanje robnih naprav
Veliko velikih modelov je bilo sprva usposobljenih in nameščenih v oblaku, vendar je z razvojem edge computinga vse več aplikacijskih scenarijev zahtevalo namestitev modelov na robnih napravah. Z omejeno računalniško močjo in pomnilniškimi viri na robnih napravah lahko kvantizacija pomaga tem modelom delovati bolj učinkovito na robnih napravah.

5. Zmanjšanje zahtev po pasovni širini
V procesu distribuiranega sklepanja ali posodabljanja modela lahko kvantizacija zmanjša pasovno širino, potrebno za prenos modela. To je uporabno za okolja z omejeno pasovno širino omrežja, kot so IoT naprave v oddaljenih območjih.

6. Ohranjanje zmogljivosti modela
Čeprav kvantizacija povzroči določeno izgubo natančnosti, je mogoče izvirno zmogljivost modela v veliki meri ohraniti z ustreznimi metodami kvantizacije (kot so mešana natančnost, kvantizacija po treningu, kvantitetno učenje itd.). Zato lahko v praktičnih aplikacijah kvantifikacija doseže dobro ravnovesje med zmogljivostjo in učinkovitostjo.

Spominska referenca

vrstaVsaka milijarda parametrov mora zasedati pomnilnik
Float324G
FP16/BF162G
int81G
int40,5G


FP64 (Dvojna natančnost)

64-bitni plavajoči format, običajno dvojno natančen binarni format s plavajočo vejico, definiran z IEEE 754, ima:

1-mestni simbol
11-mestni indeks
52 decimalk



Doseg: ~2,23e-308 ... ~1,80e308 s polno natančnostjo 15-17 decimal.

Navada:

Ta format se uporablja za znanstvene izračune, ki zahtevajo visoko natančnost.
Običajno se ne uporablja za izračune globokega učenja.
Podpora programski opremi:
Predstavlja dvojni tip na večini C/C++ sistemov.
Podprto v TensorFlow (npr. tf.float64) / PyTorch (npr. torch.float64 ali torch.double).
Podpora strojne opreme:
Običajno podprta v x86 procesorjih.
Večina grafičnih kartic, še posebej igralnih, vključno s serijo RTX, ima močno omejeno zmogljivost FP64 (običajno 1/32 zmogljivosti FP32 namesto 1/2).
Nedavni neomejeni GPU-ji, ki podpirajo FP64, vključujejo GP100/100/102/104 v Tesla P40/P4 in Quadro GP100, GV100 v Tesla V100/Quadro GV100/Titan V ter nedavno napovedani GA100 v A100 (zanimivo, nova arhitektura Ampere ima tretjo generacijo) v primerjavi s FP64 omogočenimi Tensor jedri Nova IEEE-skladna obdelava FP64 je zdaj vključena, ki zagotavlja 2,5-krat večjo zmogljivost FP64 kot V100.

FP32 (Polna natančnost)

Ta format je že dolgo postal delovni konj za globoko učenje. Drug format IEEE 754, enoprecizni sistem s plavajočo vejico, ima:

1-mestni simbol
8-mestni indeks
23 decimalk
Idealno bi bilo, da se v FP32 izvajata tako učenje kot sklepanje, vendar je FP32 dvakrat počasnejši od FP16/BF16, zato se v praksi pogosto uporabljajo metode mešane natančnosti, kjer se uteži FP32 uporabljajo kot natančna "glavna teža", uteži FP16/BF16 za izračune napredne in nazaj propagacije za izboljšanje hitrosti učenja, nazadnje pa se suverene uteži FP32 posodabljajo z gradienti FP16/BF16 v fazi posodobitve gradientov.

Med usposabljanjem je suverena teža vedno FP32. V praksi uteži s polovično natančnostjo pogosto zagotavljajo podobno natančnost kot FP32 pri sklepanju – saj so natančne uteži FP32 potrebne le, ko se gradient modela posodobi. To pomeni, da lahko pri sklepanju uporabimo uteži s polovično natančnostjo, tako da dobimo enak rezultat že s polovico GPU pomnilnika.



Razpon: ~1,18e-38 ... ~3,40e38 z natančnostjo 6-9 pomembnih decimal.

Navada:

Standardna vrsta računalništva z nevronskim omrežjem že dolgo časa. Uteži, aktivacije in druge vrednosti v nevronskih mrežah so že dolgo privzete na FP32.
Pri mnogih znanstvenih izračunih, zlasti iterativnih, natančnost ni dovolj, kar vodi do kopičenja napak.
Podpora programski opremi:
Predstavlja tip float na večini C/C++ sistemov.
Podprto v TensorFlow (npr. tf.float32) / PyTorch (npr. torch.float32 ali torch.float).
Podpora strojne opreme:
Običajno podprta v x86 procesorjih.
Običajno ga podpira NVIDIA/AMD GPU.

FP16 (Polovična natančnost)

Podobno ima standardni format IEEE 754, polnatančen format s plavajočo vejico:

1-mestni simbol
5-mestni indeks
10 decimalk
Številka FP16 ima precej manjši številčni razpon kot FP32. Zato je FP16 izpostavljen tveganju presežka (kadar se uporablja za predstavitev zelo velikih števil) in preliva (kadar se uporablja za predstavitev zelo majhnih števil). Na primer, ko narediš 10k * 10k, bi moral biti končni rezultat 100M, kar FP16 ne more predstavljati, ker je največje število FP16 64k. Tako na koncu dobiš NaN (ne številko) v izračunih nevronskih mrež, ker se izračuni izvajajo v slojevitem in serijskem vrstnem redu, tako da ko se pojavi NaN, so vsi prejšnji izračuni uničeni. Na splošno je to mogoče omiliti s skaliranjem izgub, vendar ta pristop ne deluje vedno.



Doseg: ~5,96e−8 (6,10e−5) ... 65504, z natančnostjo 4 značilnih decimalnih števk.

Navada:

Globoko učenje običajno uporablja FP16 namesto FP32, saj izračuni z nižjo natančnostjo pri nevronskih mrežah niso pomembni. Dodatna natančnost ne naredi ničesar, hkrati pa je počasnejša, zahteva več pomnilnika in upočasnjuje komunikacijo.
Uporablja se lahko za usposabljanje, običajno z mešano natančnostjo (TensorFlow/PyTorch).
Lahko se uporablja za kvantizacijo po treningu za pospešitev sklepanja (TensorFlow Lite). Drugi formati, ki se uporabljajo za kvantizacijo po treningu, vključujejo cela števila INT8 (8-bitna cela števila), INT4 (4-bitna) in celo INT1 (binarne vrednosti).
Podpora programski opremi:
Trenutno ni v C/C++ standardu (vendar obstaja predlog za kratek float). Nekateri C/C++ sistemi podpirajo __fp16 tipe. V nasprotnem primeru ga je mogoče uporabljati s posebnimi knjižnicami.
Podprto v TensorFlow (npr. tf.float16) / PyTorch (npr. torch.float16 ali torch.half).
Podpora strojne opreme:
x86 procesorji niso podprti (kot edinstvena vrsta).
Podpora na starejših igralnih grafičnih karticah je slaba (zmogljivost 32/1 za FP64, za več podrobnosti glejte objavo o grafičnih karticah). Trenutno je dobro podprt na sodobnih grafičnih karticah, kot je NVIDIA RTX serija.

BFLOAT16 (Polovična natančnost)

Drug 16-bitni format, ki ga je prvotno razvil Google, se imenuje "Brain Floating Point Format" ali krajše "bfloat16". Ime izvira iz Google Brain.

Izvirni IEEE FP16 je bil zasnovan brez upoštevanja aplikacij globokega učenja, njegov dinamični razpon pa je bil preozek. BFLOAT16 reši ta problem, saj zagotavlja enak dinamični razpon kot FP32.

Zato BFLOAT16 imamo:

1-mestni simbol
8-mestni indeks
7 decimalk



Format bfloat16 je skrajšan na IEEE 754 FP32, kar omogoča hitro pretvorbo v in iz IEEE 754 FP32. Pri pretvorbi v format bfloat16 se eksponentni biti ohranijo, medtem ko se polja mantise lahko zmanjšajo s skrajšavanjem.



Razpon: ~1,18e-38 ... ~3,40e38 s tremi pomembnimi decimalkami.
Navada:

Zdaj se zdi, da nadomešča FP16. Za razliko od FP16, ki pogosto zahteva posebno obdelavo s tehnikami, kot je skaliranje izgub, je BF16 skoraj neposredna zamenjava za FP32 pri učenju in izvajanju globokih nevronskih mrež.
Podpora programski opremi:
Ne v C/C++ standardu. Lahko se uporablja s posebnimi knjižnicami.
Podprto v TensorFlow (npr. tf.bfloat16) / PyTorch (npr. torch.bfloat16).

TF32

TensorFloat-32 ali TF32 je nov matematični način v NVIDIA A100 grafičnih karticah.

Z uporabo iste 10-bitne mantise kot polovične natančnosti (FP16) matematike TF32 dokazuje, da ima dovolj rezerve za izpolnjevanje zahtev natančnosti AI obremenitev. TF32 uporablja isti 8-bitni indeks kot FP32, zato lahko podpira enak numerični razpon.

Tehnično gledano gre za 19-bitni format. Predstavljajte si to kot razširjeno natančnost BFLOAT16, kot je "BFLOAT19" ali zmanjšano natančnost, kot FP32.

Torej, TF32 ima:

1-mestni simbol
8-mestni indeks
10 decimalk
Prednost TF32 je, da ima enak format kot FP32. Pri izračunu notranjega produkta s TF32 se mantisa vhodnega operanda zaokroži s 23 na 10 bitov. Zaokroževali operandi se natančno pomnožijo in seštejejo v normalnem FP32.

TF32 Tensor Core deluje na vhodih FP32 in generira rezultate v FP32 brez sprememb kode. Operacije brez matrike še naprej uporabljajo FP32. To omogoča enostaven način za pospešitev vhodno/izhodnih podatkov FP32 v okvirih globokega učenja in HPC.

Razpon: ~1,18e-38 ... ~3,40e38 z natančnostjo 4 pomembnih decimal.
Navada:

Ena izmed odličnih stvari pri TF32 je, da potrebuje podporo prevajalnika le na najgloblji ravni, torej znotraj CUDA prevajalnika. Preostanek kode vidi FP32 z manj natančnosti, a z enakim dinamičnim razponom. Uporaba TF32 je predvsem namenjena klicem knjižnici, da preverim, ali deluje pravilno. Prisotnost TF32 omogoča hitre vtičnike, ki izkoriščajo hitrost Tensor jeder brez večjega dela.
Formati, kot sta FP16 in BFLOAT16, zahtevajo več prilagoditev, saj vključujejo različne postavitve bitov. Vendar pa uporaba teh formatov zmanjša pasovno širino pomnilnika, kar omogoča hitrejše izvajanje.
Za primerjavo, vrhunska zmogljivost A100 je:

FP32 brez tenzorskih jeder: 19,5 TFLOPS
TF32 Tensor Core: 156 TFLOPS (torej uporaba TF32 namesto FP32 olajša povečanje hitrosti).
FP16/BF16 Tensor jedra: 312 TFLOPS (zato lahko razumen prehod na FP16/BF16 prinese več povečanja hitrosti, vendar po višji ceni).
Podpora programski opremi:
Ne v C/C++ standardu.
Podprt CUDA 11.
Podpora strojne opreme:
GPU: NVIDIA A100 je prvi podprt model

FP8

Uvedel ga je grafični procesor H100, omogoča večje množenje matrik in konvolucijo, vendar z nižjo natančnostjo.

FP100 podatkovni tipi, ki jih podpira H8, sta pravzaprav dva različna podatkovna tipa, ki ju je mogoče uporabiti za različne dele učenja nevronskih mrež:

E4M3 - sestavljen iz 1 simbolnega bita, 4 eksponentnih bitov in 3 decimalnih mest. Lahko shrani do +/-448 in nan.
E5M2 - sestavljen iz 1 predznaka, 5 eksponentnih bitov in 2 decimalnih mest. Lahko shrani vrednosti do +/-57344, +/-inf in nan. Slabost povečanja dinamičnega razpona je, da so shranjene vrednosti manj natančne.



Struktura podatkovnih tipov s plavajočo vejico. Vse prikazane vrednosti (v FP16, BF16, FP8 E4M3 in FP8 E5M2) so najbližja predstavitev vrednosti 0,3952.

Obe vrsti se lahko uporabljata med treniranjem nevronske mreže. Na splošno aktivacija naprej in uteži zahtevajo večjo natančnost, zato je najbolje uporabiti podatkovni tip E4M3 med prehajanjem naprej. Vendar pa je pri povratnem širjenju gradient, ki teče skozi omrežje, na splošno manj dovzeten za izgubo natančnosti, vendar zahteva večji dinamični razpon. Zato je najbolje, da jih shranite v podatkovnem formatu E5M2. H100 TensorCore podpira katerokoli kombinacijo teh vrst kot vhod, kar nam omogoča, da vsak tenzor shranimo z njegovo želeno natančnostjo.

Referenčni:

Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.




Prejšnji:Omrežje - Naprave pod glavno in podpotjo so medsebojno povezane
Naslednji:[AI] (10) LLM sklepanje z velikim modelom GPU pomnilnika VRAM
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com