Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 3298|Odpoveď: 0

Dvojitá presnosť (FP64), Jednoduchá presnosť (P32, TF32), Polovičná presnosť (FP16, BF16)

[Kopírovať odkaz]
Zverejnené 10.3.2025 o 14:22:34 | | | |
Trénovanie a uvažovanie veľkých modelov často zahŕňa koncept presnosti, existuje mnoho typov a sú rozdelené do rôznych formátov s rovnakou úrovňou presnosti. Okrem toho existujú aj koncepty multi-precision a mixed precision v praktických scenároch použitia.

Bežná presnosť

Presnosť v pohyblivej desatinnej čiarke: dvojitá presnosť (FP64), jednorozmerná presnosť (FP32, TF32), polovičná presnosť (FP16, BF16), 8-bitová presnosť (FP8), 4-bitová presnosť (FP4, NF4)
Presnosť kvantifikácie: INT8, INT4 (tiež INT3/INT5/INT6)

Číslo s pohyblivou desatinnou čiarkou sa skladá z troch častí: znamienka, exponenciálna a mantisa bitov. Čím väčší je exponenciálny bit, tým väčší rozsah čísel, ktoré možno reprezentovať. Čím väčšia je mantisa číslica, tým vyššia je presnosť čísla.



Tabuľka to zhrňuje nasledovne

formátSymbol bitExponenciálny bitdesatinné miestoCelkový počet číslic
FP641115264
FP32182332
TF32181019
BF1618716
FP16151016
FP8 E4M31438
FP8 E5M21528
FP41214


FP32: 32-bitové číslo s pohyblivou desatinnou čiarkou, 4 bajty na dáta
TF32: 19-bitové číslo s pohyblivou desatinnou čiarkou, každé dáta majú 2 bajty
FP16: 16-bitové číslo s pohyblivou desatinnou čiarkou, 2 bajty na dáta
BF16: 16-bitové číslo s pohyblivou desatinnou čiarkou, každé dáta majú 2 bajty
Int8: 8-bitové celé číslo, každé dáta pokrývajú 1 bajt
Int4: 4-bitové celé čísla, každé dáta majú veľkosť 0,5 bajtu

Prečo toľko presnosti

Kvôli cene a presnosti. Všetci vieme, že vysoká presnosť je určite presnejšia, ale zároveň prináša vyššie výpočtové a úložné náklady. Nižšia presnosť znižuje presnosť výpočtu, ale môže zlepšiť výpočtovú efektivitu a výkon. Takže rôzne presnosti vám umožňujú vybrať si najvhodnejší v rôznych situáciách.
Dvojitá presnosť je presnejšia ako jednopresný výraz, ale zaberá dvakrát viac úložiska a trvá viac času na výpočty.

Prečo je potrebné veľké modely kvantifikovať?

1. Znížiť spotrebu pamäte
Veľké modely zvyčajne používajú 32-bitové čísla s pohyblivou desatinnou čiarkou (FP32) alebo 16-bitové čísla s pohyblivou desatinnou čiarkou (FP16) na reprezentáciu váh a aktivačných hodnôt. Kvantizáciou je možné tieto vysoko presné hodnoty previesť na reprezentácie s nižšou presnosťou (napr. 8-bitové celé čísla, INT8), čo výrazne znižuje úložný priestor modelu. To je dôležité pri nasadzovaní na zariadeniach s obmedzenými zdrojmi, ako sú mobilné zariadenia, zabudované systémy a podobne.

2. Zrýchliť rýchlosť uvažovania
Kvantované modely môžu na hardvéri bežať efektívnejšie. Mnohé moderné hardvérové zariadenia (ako GPU, TPU, NPU a pod.) majú špecializovanú optimalizačnú podporu pre výpočty s nízkou presnosťou, čo umožňuje rýchlejšie kvantizačné operácie. Okrem toho výpočty s nízkou presnosťou často zahŕňajú menej bitových operácií, čo znižuje výpočtovú zložitosť a tým urýchľuje inferenciu.

3. Znížiť spotrebu energie
Kvantovaný model nielenže znižuje potrebu výpočtových zdrojov, ale aj spotrebu energie. To je obzvlášť dôležité pre zariadenia napájané batériou, ako sú smartfóny, IoT zariadenia a podobne, kde nízka spotreba energie znamená dlhšiu výdrž batérie.

4. Jednoduché nasadenie edge zariadení
Mnohé veľké modely boli spočiatku trénované a nasadené v cloude, ale s rozvojom edge computingu čoraz viac aplikačných scenárov vyžaduje nasadenie modelov na edge zariadeniach. Pri obmedzenom výpočtovom výkone a úložných zdrojoch na okrajových zariadeniach môže kvantizácia pomôcť týmto modelom bežať efektívnejšie na okrajových zariadeniach.

5. Znížiť požiadavky na šírku pásma
Pri procese distribuovanej inferencie alebo aktualizácie modelu môže kvantovanie znížiť šírku pásma potrebnú na prenos modelu. To je užitočné pre prostredia s obmedzenou sieťovou šírkou pásma, ako sú IoT zariadenia v odľahlých oblastiach.

6. Udržiavať výkon modelu
Hoci kvantizácia spôsobuje určitú stratu presnosti, pôvodný výkon modelu možno do veľkej miery zachovať vhodnými metódami kvantizácie (ako je kvantizácia so zmiešanou presnosťou, kvantovanie po trénovaní, kvantitatívne vnímanie a pod.). Preto v praktických aplikáciách môže kvantifikácia dosiahnuť dobrú rovnováhu medzi výkonom a efektivitou.

Pamäťová referencia

typKaždá miliarda parametrov musí zaberať pamäť
Float324G
FP16/BF162G
int81G
int40,5G


FP64 (Dvojitá presnosť)

64-bitový systém s pohyblivou desatinnou čiarkou, typicky dvojito presný binárny formát definovaný podľa IEEE 754, má:

1-ciferný symbol
11-miestny index
52 desatinných miest



Rozsah: ~2,23e-308 ... ~1,80e308 s plnou presnosťou 15-17 desatinných miest.

Použitie:

Tento formát sa používa pre vedecké výpočty vyžadujúce vysokú presnosť.
Zvyčajne sa nepoužíva na výpočty hlbokého učenia.
Podpora softvéru:
Predstavuje dvojitý typ na väčšine systémov C/C++.
Podporované v TensorFlow (napr. tf.float64) / PyTorch (napr. torch.float64 alebo torch.double).
Podpora hardvéru:
Typicky podporované v x86 procesoroch.
Väčšina GPU, najmä herné GPU, vrátane série RTX, má výrazne obmedzený výkon FP64 (zvyčajne 1/32 výkonu FP32 namiesto 1/2).
Medzi nedávne neobmedzené GPU podporované FP64 patria GP100/100/102/104 v Tesle P40/P4 a Quadro GP100, GV100 v Tesla V100/Quadro GV100/Titan V a nedávno oznámený GA100 v A100 (zaujímavosťou je, že nová architektúra Ampere má tretiu generáciu) v porovnaní s FP64-podporovanými Tensor jadrami Nové spracovanie FP64 kompatibilné s IEEE, ktoré poskytuje 2,5-násobok výkonu FP64 oproti V100.

FP32 (plná presnosť)

Tento formát bol už dlho pracovným koňom pre hlboké učenie. Ďalší formát IEEE 754, jednopresný systém s pohyblivou desatinnou čiarkou, má:

1-ciferný symbol
8-miestny index
23 desatinných miest
Ideálne by sa v FP32 mali vykonávať tréningové aj inferenciálne metódy, ale FP32 je dvakrát pomalší ako FP16/BF16, preto sa v praxi často používajú metódy zmiešanej presnosti, kde váhy FP32 sa používajú ako presná "hlavná váha", váhy FP16/BF16 sa používajú na výpočty šírenia dopredu a dozadu na zlepšenie rýchlosti trénovania a nakoniec suverénne váhy FP32 sa aktualizujú o gradienty FP16/BF16 vo fáze aktualizácie gradientov.

Počas výcviku je suverénna hmotnosť vždy FP32. V praxi váhy s polovicou presnosti často poskytujú podobnú presnosť ako FP32 pri inferencii – pretože presné váhy FP32 sú potrebné len pri aktualizácii gradientu modelu. To znamená, že pri inferencii môžeme použiť váhy s polovičnou presnosťou, takže môžeme dosiahnuť rovnaký výsledok len s polovicou pamäte GPU.



Rozsah: ~1,18e-38 ... ~3,40e38 s presnosťou 6-9 znamených desatinných čísel.

Použitie:

Štandardný typ výpočtovej techniky pomocou neurónových sietí už dlhý čas. Váhy, aktivácie a ďalšie hodnoty v neurónových sieťach sú už dlhodobo predvolene nastavené na FP32.
Pri mnohých vedeckých výpočtoch, najmä iteratívnych, presnosť nestačí, čo vedie k hromadeniu chýb.
Podpora softvéru:
Predstavuje typ float na väčšine systémov C/C++.
Podporované v TensorFlow (napr. tf.float32) / PyTorch (napr. torch.float32 alebo torch.float).
Podpora hardvéru:
Typicky podporované v x86 procesoroch.
Typicky podporované NVIDIA/AMD GPU.

FP16 (Polovičná presnosť)

Podobne štandardný formát IEEE 754, polovičná presnosť s pohyblivou desatinnou čiarkou, má:

1-ciferný symbol
5-miestny index
10 desatinných miest
Číslo FP16 má oveľa menší číselný rozsah ako FP32. Preto je FP16 vystavený riziku pretečenia (keď sa používa na reprezentáciu veľmi veľkých čísel) a podtečenia (keď sa používa na reprezentáciu veľmi malých čísel). Napríklad, keď urobíte 10k * 10k, konečný výsledok by mal byť 100M, čo FP16 nemôže reprezentovať, pretože maximálne číslo, ktoré FP16 môže reprezentovať, je 64k. Takže v neurónových sieťach máte naN (nie číslo), pretože výpočty sa robia v vrstvenom a dávkovom poradí, takže keď sa objaví NaN, všetky predchádzajúce výpočty sú zničené. Vo všeobecnosti sa to dá zmierniť škálovaním strát, ale tento prístup nie vždy funguje.



Dosah: ~5,96e−8 (6,10e−5) ... 65504, s presnosťou 4 znakových desatinných číslic.

Použitie:

Hlboké učenie má tendenciu používať FP16 namiesto FP32, pretože výpočty s nižšou presnosťou sa zdajú byť pre neurónové siete nepodstatné. Tá extra presnosť nič nerobí, a zároveň je pomalšia, vyžaduje viac pamäte a spomaľuje komunikáciu.
Môže sa použiť na tréning, zvyčajne pomocou tréningu s kombinovanou presnosťou (TensorFlow/PyTorch).
Môže sa použiť na kvantizáciu po trénovaní na zrýchlenie inferencie (TensorFlow Lite). Ďalšie formáty používané na kvantovanie po trénovaní zahŕňajú celé čísla INT8 (8-bitové celé čísla), INT4 (4-bitové) a dokonca INT1 (binárne hodnoty).
Podpora softvéru:
Momentálne nie je v štandarde C/C++ (ale existuje krátky float návrh). Niektoré systémy C/C++ podporujú __fp16 typy. Inak sa dá použiť so špeciálnymi knižnicami.
Podporované v TensorFlow (napr. tf.float16) / PyTorch (napr. torch.float16 alebo torch.half).
Podpora hardvéru:
CPU x86 nie sú podporované (ako unikátny typ).
Podpora starších herných GPU je slabá (výkon 32/1 pre FP64, viac informácií nájdete v príspevku o GPU). V súčasnosti je dobre podporovaný na moderných grafických kartách, ako je séria NVIDIA RTX.

BFLOAT16 (Polovičná presnosť)

Ďalší 16-bitový formát pôvodne vyvinutý spoločnosťou Google sa nazýva "Brain Floating Point Format" alebo skrátene "bfloat16". Názov pochádza z Google Brain.

Pôvodný IEEE FP16 bol navrhnutý bez ohľadu na aplikácie hlbokého učenia a jeho dynamický rozsah bol príliš úzky. BFLOAT16 tento problém rieši, keďže poskytuje rovnaký dynamický rozsah ako FP32.

Preto BFLOAT16 mať:

1-ciferný symbol
8-miestny index
7 desatinných miest



Formát bfloat16 je skrátený na IEEE 754 FP32, čo umožňuje rýchlu konverziu do a z IEEE 754 FP32. Pri konverzii do formátu bfloat16 sa exponenciálne bity zachovávajú, zatiaľ čo polia mantisy je možné znížiť orezaním.



Rozsah: ~1,18e-38 ... ~3,40e38 s 3 významnými desatinnými miestami.
Použitie:

Teraz sa zdá, že nahrádza FP16. Na rozdiel od FP16, ktorý často vyžaduje špeciálne spracovanie technikami ako škálovanie strát, BF16 je takmer priamou náhradou FP32 pri trénovaní a prevádzke hlbokých neurónových sietí.
Podpora softvéru:
Nie v štandarde C/C++. Dá sa použiť so špeciálnymi knižnicami.
Podporované v TensorFlow (napr. tf.bfloat16) / PyTorch (napr. torch.bfloat16).

TF32

TensorFloat-32 alebo TF32 je nový matematický režim v grafických kartách NVIDIA A100.

Používajúc rovnaké 10-bitové mantissy ako polovičnú presnosť (FP16) matematiku, TF32 má dostatok rezervy na splnenie požiadaviek na presnosť AI záťaží. A TF32 používa rovnaký 8-bitový index ako FP32, takže môže podporovať rovnaký číselný rozsah.

Technicky ide o 19-bitový formát. Predstavte si to ako rozšírený presný BFLOAT16, napríklad "BFLOAT19" alebo zníženú presnosť ako FP32.

Takže TF32 má:

1-ciferný symbol
8-miestny index
10 desatinných miest
Výhodou TF32 je, že má rovnaký formát ako FP32. Pri výpočte skalárneho súčtu pomocou TF32 sa mantisa vstupného operandu zaokrúhľuje z 23 na 10 bitov. Zaokrúhľovacie operandy sa presne násobia a kumulujú v normálnom FP32.

TF32 Tensor Core beží na vstupoch FP32 a generuje výsledky v FP32 bez zmien kódu. Ne-maticové operácie naďalej používajú FP32. To poskytuje jednoduchý spôsob, ako zrýchliť vstupné/výstupné dáta FP32 v frameworkoch hlbokého učenia a HPC.

Rozsah: ~1,18e-38 ... ~3,40e38 s presnosťou 4 významných desatinných miest.
Použitie:

Jednou z výhod TF32 je, že potrebuje podporu kompilátora len na najhlbšej úrovni, teda v rámci CUDA kompilátora. Zvyšok kódu vidí FP32 len s menšou presnosťou, ale s rovnakým dynamickým rozsahom. Používanie TF32 slúži hlavne na volanie knižnice, aby sa ukázalo, či funguje správne. Prítomnosť TF32 umožňuje rýchle plug-iny, využívajúc rýchlosť Tensor Core bez veľkej námahy.
Formáty ako FP16 a BFLOAT16 vyžadujú viac úprav, pretože zahŕňajú rôzne rozloženia bitov. Použitie týchto formátov však znižuje šírku pásma pamäte, čo umožňuje rýchlejšie vykonávanie.
Pre porovnanie, maximálny výkon A100 je:

FP32 bez tenzorových jadier: 19,5 TFLOPS
TF32 Tensor Core: 156 TFLOPS (takže použitie TF32 namiesto FP32 uľahčuje zvýšenie rýchlosti).
FP16/BF16 Tensor Core: 312 TFLOPS (preto rozumný prechod na FP16/BF16 môže priniesť viac rýchlostných nárastkov, ale za vyššiu cenu).
Podpora softvéru:
Nie v štandarde C/C++.
Podporovaná CUDA 11.
Podpora hardvéru:
GPU: NVIDIA A100 je prvý podporovaný model

FP8

Zavedený GPU H100, umožňuje väčšie násobenie a konvolúciu matíc, ale s nižšou presnosťou.

FP100 dátové typy podporované H8 sú v skutočnosti 2 rôzne dátové typy, ktoré možno použiť pre rôzne časti trénovania neurónových sietí:

E4M3 - pozostáva z 1 symbolického bitu, 4 exponenciálnych bitov a 3 desatinných miest. Môže uložiť až +/-448 a nano.
E5M2 - pozostáva z 1 znamienkového bitu, 5 exponenciálnych bitov a 2 desatinných miest. Môže ukladať hodnoty až do +/-57344, +/-inf a nan. Nevýhodou rastúceho dynamického rozsahu je, že uložené hodnoty sú menej presné.



Štruktúra dátových typov s pohyblivou desatinnou čiarkou. Všetky zobrazené hodnoty (v FP16, BF16, FP8 E4M3 a FP8 E5M2) sú najpresnejšou reprezentáciou hodnoty 0,3952.

Oba typy môžu byť použité pri trénovaní neurónovej siete. Vo všeobecnosti aktivácia a závažia vpred vyžadujú vyššiu presnosť, preto je najlepšie použiť dátový typ E4M3 počas predného prechodu. Avšak pri spätnom šírení je gradient pretekajúci sieťou zvyčajne menej náchylný na stratu presnosti, ale vyžaduje si vyšší dynamický rozsah. Preto je najlepšie ich ukladať v dátovom formáte E5M2. H100 TensorCore podporuje akúkoľvek kombináciu týchto typov ako vstup, čo nám umožňuje ukladať každý tenzor s jeho preferovanou presnosťou.

Referencia:

Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.




Predchádzajúci:Sieť - Zariadenia pod hlavnou a podtrasou sú navzájom prepojené
Budúci:[AI] (10) LLM odhad veľkej modelovej inferencie GPU pamäte VRAM
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com