Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 3298|Odpověď: 0

Dvojitá přesnost (FP64), Jednoduchá přesnost (P32, TF32), Poloviční přesnost (FP16, BF16)

[Kopírovat odkaz]
Zveřejněno 10. 3. 2025 14:22:34 | | | |
Trénování a uvažování velkých modelů často zahrnuje koncept přesnosti, existuje mnoho typů a jsou také rozděleny do různých formátů se stejnou úrovní přesnosti. Kromě toho existují také koncepty vícenásobné a smíšené přesnosti v praktických scénářích.

Běžná přesnost

Přesnost v pohyblivé desetinné čárce: dvojnásobná přesnost (FP64), jednorozměrná přesnost (FP32, TF32), poloviční přesnost (FP16, BF16), 8bitová přesnost (FP8), 4bitová přesnost (FP4, NF4)
Přesnost kvantifikace: INT8, INT4 (také INT3/INT5/INT6)

Číslo s plovoucí desetinnou čárkou se skládá ze tří částí: znaménko, exponenciální a mantisové bity. Čím větší je exponenciální bit, tím větší rozsah čísel, které lze reprezentovat. Čím větší je číslice mantisy, tím větší přesnost čísla.



Tabulka to shrnuje takto

formátSymbol bitExponenciální bitdesetinné místoCelkový počet číslic
FP641115264
FP32182332
TF32181019
BF1618716
FP16151016
FP8 E4M31438
FP8 E5M21528
FP41214


FP32: 32bitové číslo s plovoucí desetinnou čárkou, 4 bajty na data
TF32: 19bitové číslo s plovoucí desetinnou čárkou, každé data má 2 bajty
FP16: 16bitové číslo s plovoucí desetinnou čárkou, 2 bajty na data
BF16: 16bitové číslo s plovoucí desetinnou čárkou, každé data má 2 bajty
Int8: 8bitové celé číslo, každé data tvoří 1 bajt
Int4: 4bitová celá čísla, každé data má 0,5 bajtu

Proč tolik přesnosti

Kvůli ceně a přesnosti. Všichni víme, že vysoká přesnost je rozhodně přesnější, ale zároveň přinese vyšší náklady na výpočetní a úložné kapacity. Nižší přesnost snižuje přesnost výpočtu, ale může zlepšit výpočetní efektivitu a výkon. Takže různé různé přesnosti vám umožní vybrat si tu nejvhodnější v různých situacích.
Dvojitá přesnost je přesnější než jednorázová přesnost, ale zabírá dvakrát tolik paměti a trvá více času na výpočet.

Proč je třeba velké modely kvantifikovat?

1. Snížit využití paměti
Velké modely obvykle používají 32bitová čísla s plovoucí desetinnou čárkou (FP32) nebo 16bitová čísla s plovoucí desetinnou čárkou (FP16) k reprezentaci vah a aktivačních hodnot. Kvantizací lze tyto vysoce přesné hodnoty převést na reprezentace s nižší přesností (např. 8bitová celá čísla, INT8), což výrazně snižuje úložný prostor modelu. To je důležité pro nasazení na zařízeních s omezenými zdroji, jako jsou mobilní zařízení, vestavěné systémy apod.

2. Zrychlení rychlosti uvažování
Kvantované modely mohou na hardwaru běžet efektivněji. Mnoho moderního hardwaru (například GPU, TPU, NPU atd.) má specializovanou optimalizační podporu pro nízkopřesné výpočty, což umožňuje rychlejší kvantizační operace. Navíc nízkopřesné výpočty často zahrnují méně bitových operací, což snižuje výpočetní složitost a tím urychluje inferenci.

3. Snížit spotřebu energie
Kvantovaný model nejen snižuje potřebu výpočetních zdrojů, ale také snižuje spotřebu energie. To je zvláště důležité pro zařízení napájená bateriemi, jako jsou chytré telefony, IoT zařízení apod., kde nízká spotřeba energie znamená delší výdrž baterie.

4. Snadno nasaditelné edge zařízení
Mnoho velkých modelů bylo zpočátku trénováno a nasazeno v cloudu, ale s rozvojem edge computingu je stále více aplikačních scénářů potřeba nasazovat modely na edge zařízeních. S omezeným výpočetním výkonem a úložnými zdroji na edge zařízeních může kvantizace pomoci těmto modelům běžet efektivněji na okrajových zařízeních.

5. Snížit požadavky na šířku pásma
Při distribuované inferenci nebo aktualizacích modelu může kvantizace snížit šířku pásma potřebnou pro přenos modelu. To je užitečné pro prostředí s omezenou šířkou pásma sítě, například pro IoT zařízení v odlehlých oblastech.

6. Udržovat výkon modelu
Ačkoli kvantizace přináší určitou ztrátu přesnosti, původní výkon modelu lze z velké části zachovat vhodnými metodami kvantizace (například kvantování s míšenou přesností, kvantizace po trénování, kvantitativní vnímání atd.). Proto v praktických aplikacích může kvantifikace najít dobrou rovnováhu mezi výkonem a efektivitou.

Paměťová reference

typKaždá miliarda parametrů musí zabírat paměť
Float324G
FP16/BF162G
int81G
int40,5G


FP64 (Dvojitá přesnost)

64bitový systém s plovoucí desetinnou čárkou, typicky dvojitě přesný binární formát definovaný IEEE 754, má:

Symbol s 1 číslicí
11místný index
52 desetinných míst



Rozsah: ~2,23e-308 ... ~1,80e308 s plnou přesností 15-17 desetinných čísel.

Zvyk:

Tento formát se používá pro vědecké výpočty vyžadující vysokou přesnost.
Obvykle se nepoužívá pro výpočty hlubokého učení.
Podpora softwaru:
Představuje dvojitý typ na většině systémů C/C++.
Podporováno v TensorFlow (např. tf.float64) / PyTorch (např. torch.float64 nebo torch.double).
Hardwarová podpora:
Obvykle podporováno v x86 procesorech.
Většina GPU, zejména herní, včetně řady RTX, má výrazně omezený výkon FP64 (obvykle 1/32 výkonu FP32 místo 1/2).
Mezi nedávné neomezené GPU podporované FP64 patří GP100/100/102/104 v Tesle P40/P4 a Quadro GP100, GV100 v Tesle V100/Quadro GV100/Titan V a nedávno oznámený GA100 v A100 (zajímavé je, že nová architektura Ampere má třetí generaci) ve srovnání s FP64 Tensor Cores Nové zpracování FP64 kompatibilní s IEEE je nyní zahrnuto, které poskytuje 2,5x vyšší výkon než ve FP64 oproti V100.

FP32 (plná přesnost)

Tento formát byl dlouho pracovním koněm pro hluboké učení. Další formát IEEE 754, jednoručně přesný systém s plovoucí desetinnou čárkou, má:

Symbol s 1 číslicí
8místný index
23 desetinných míst
Ideálně by se v FP32 měly provádět jak trénink, tak inference, ale FP32 je dvakrát pomalejší než FP16/BF16, proto se v praxi často používají metody smíšené přesnosti, kde váhy FP32 slouží jako přesná "hlavní váha", váhy FP16/BF16 se používají pro výpočty šíření dopředu a vzad pro zlepšení rychlosti tréninku a nakonec suverénní váhy FP32 jsou aktualizovány o gradienty FP16/BF16 ve fázi aktualizace gradientů.

Během výcviku je suverénní hmotnost vždy FP32. V praxi váhy s poloviční přesností často poskytují podobnou přesnost jako FP32 při inferenci – protože přesné váhy FP32 jsou potřeba pouze při aktualizaci gradientu modelu. To znamená, že při inferenci můžeme použít váhy s poloviční přesností, takže můžeme dosáhnout stejného výsledku s pouhou polovinou paměti GPU.



Rozsah: ~1,18e-38 ... ~3,40e38 s přesností 6-9 významných desetinných čísel.

Zvyk:

Standardní typ neuronových sítí výpočetní techniky po dlouhou dobu. Váhy, aktivace a další hodnoty v neuronových sítích jsou dlouhodobě standardně nastaveny na FP32.
U mnoha vědeckých výpočtů, zejména iterativních, přesnost nestačí, což vede k hromadění chyb.
Podpora softwaru:
Představuje plovoucí typ na většině systémů C/C++.
Podporováno v TensorFlow (např. tf.float32) / PyTorch (např. torch.float32 nebo torch.float).
Hardwarová podpora:
Obvykle podporováno v x86 procesorech.
Obvykle je podporována NVIDIA/AMD GPU.

FP16 (Poloviční přesnost)

Podobně standardní formát IEEE 754, poloviční přesný formát s plovoucí desetinnou čárkou, má:

Symbol s 1 číslicí
5místný index
10 desetinných míst
Číslo FP16 má mnohem menší číselný rozsah než FP32. Proto je FP16 ohrožen přetečením (při reprezentaci velmi velkých čísel) a podtečením (při reprezentaci velmi malých čísel). Například když uděláte 10k * 10k, konečný výsledek by měl být 100M, což FP16 nemůže reprezentovat, protože maximální počet FP16 může reprezentovat 64k. Takže v neuronových sítích se dostanete k NaN (ne číslu), protože výpočty se provádějí ve vrstveném a dávkovém pořadí, takže jakmile se objeví NaN, všechny předchozí výpočty jsou zničeny. Obecně lze toto zmírnit škálováním ztrát, ale tento přístup ne vždy funguje.



Dosah: ~5,96e−8 (6,10e−5) ... 65504, s přesností 4 znakových desetinných číslic.

Zvyk:

Hluboké učení obvykle používá FP16 místo FP32, protože výpočty s nižší přesností se u neuronových sítí zdají být nepodstatné. Dodatečná přesnost nic nezmění, a zároveň je pomalejší, vyžaduje více paměti a zpomaluje komunikaci.
Lze jej použít pro trénink, obvykle s využitím tréninku s kombinovanou přesností (TensorFlow/PyTorch).
Lze jej použít pro kvantizaci po trénování k urychlení inference (TensorFlow Lite). Další formáty používané pro kvantizaci po trénování zahrnují celá čísla INT8 (8bitová celá čísla), INT4 (4bitová) a dokonce i INT1 (binární hodnoty).
Podpora softwaru:
Momentálně to není ve standardu C/C++ (ale existuje návrh na krátký float). Některé systémy C/C++ podporují __fp16 typy. Jinak lze použít se speciálními knihovnami.
Podporováno v TensorFlow (např. tf.float16) / PyTorch (např. torch.float16 nebo torch.half).
Hardwarová podpora:
CPU x86 nejsou podporovány (jako unikátní typ).
Podpora starších herních GPU je špatná (výkon 32/1 pro FP64, podrobnosti najdete v příspěvku o GPU). V současnosti je dobře podporován na moderních GPU, jako je řada NVIDIA RTX.

BFLOAT16 (Poloviční přesnost)

Další 16bitový formát, původně vyvinutý Googlem, se nazývá "Brain Floating Point Format" nebo zkráceně "bfloat16". Název pochází z Google Brain.

Původní IEEE FP16 byl navržen bez ohledu na hluboké učení a jeho dynamický rozsah byl příliš úzký. BFLOAT16 tento problém řeší a poskytuje stejný dynamický rozsah jako FP32.

Proto BFLOAT16 platí:

Symbol s 1 číslicí
8místný index
7 desetinných míst



Formát bfloat16 je zkrácen na IEEE 754 FP32, což umožňuje rychlý převod do a z IEEE 754 FP32. Při převodu do formátu bfloat16 se zachovávají exponenciální bity, zatímco pole mantisy lze zredukovat ořezáním.



Rozsah: ~1,18e-38 ... ~3,40e38 se třemi významnými desetinnými místy.
Zvyk:

Teď to vypadá, že nahrazuje FP16. Na rozdíl od FP16, který často vyžaduje speciální zpracování pomocí technik jako škálování ztrát, je BF16 téměř přímou náhradou FP32 při trénování a provozu hlubokých neuronových sítí.
Podpora softwaru:
Ne ve standardu C/C++. Lze použít se speciálními knihovnami.
Podporováno v TensorFlow (např. tf.bfloat16) / PyTorch (např. torch.bfloat16).

TF32

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

Použitím stejné 10bitové mantissy jako poloviční přesnosti (FP16) matematiky TF32 prokazuje, že má dostatek rezervy pro splnění požadavků na přesnost AI zátěží. A TF32 používá stejný 8bitový index jako FP32, takže může podporovat stejný číselný rozsah.

Technicky vzato jde o 19bitový formát. Představte si to jako rozšířený přesný BFLOAT16, například "BFLOAT19" nebo sníženou přesnost jako FP32.

TF32 má:

Symbol s 1 číslicí
8místný index
10 desetinných míst
Výhodou TF32 je, že má stejný formát jako FP32. Při výpočtu skalárního součinu pomocí TF32 je mantisa vstupního operandu zaokrouhlena z 23 na 10 bitů. Zaokrouhlovací operandy se přesně násobí a kumulují v normálním FP32.

TF32 Tensor Core běží na vstupech FP32 a generuje výsledky ve FP32 bez změn kódu. Operace bez matice nadále používají FP32. To poskytuje snadný způsob, jak urychlit vstupní/výstupní data FP32 v rámci hlubokého učení a HPC.

Rozsah: ~1,18e-38 ... ~3,40e38 s přesností 4 významných desetinných míst.
Zvyk:

Jednou z výhod TF32 je, že potřebuje podporu kompilátoru jen na nejhlubší úrovni, tedy uvnitř CUDA kompilátoru. Zbytek kódu vidí FP32 jen s menší přesností, ale se stejným dynamickým rozsahem. Používání TF32 slouží hlavně k volání knihovně, aby se zjistilo, zda funguje správně. Přítomnost TF32 umožňuje rychlé plug-iny, využívající rychlost Tensor Cores bez větší námahy.
Formáty jako FP16 a BFLOAT16 vyžadují další úpravy, protože zahrnují odlišné bitové rozložení. Použití těchto formátů však snižuje šířku pásma paměti, což umožňuje rychlejší provedení.
Pro srovnání, maximální výkon A100 je:

FP32 bez tenzorových jader: 19,5 TFLOPS
TF32 Tensor Cores: 156 TFLOPS (takže použití TF32 místo FP32 usnadňuje zvýšení rychlosti).
FP16/BF16 Tensor Core: 312 TFLOPS (proto rozumný přechod na FP16/BF16 může přinést větší rychlostní zisky, ale za vyšší náklady).
Podpora softwaru:
Ne ve standardu C/C++.
CUDA 11 podporována.
Hardwarová podpora:
GPU: NVIDIA A100 je první podporovaný model

FP8

Zavedený pomocí GPU H100, umožňuje větší násobení matic a konvoluci, ale s nižší přesností.

FP100 datové typy podporované H8 jsou ve skutečnosti dva různé datové typy, které lze použít pro různé části tréninku neuronových sítí:

E4M3 – skládá se z 1 symbolického bitu, 4 exponenciálních bitů a 3 desetinných míst. Může uložit až +/-448 a nan.
E5M2 – skládá se z 1 znaménkového bitu, 5 exponenciálních bitů a 2 desetinných míst. Může ukládat hodnoty až +/-57344, +/-inf a nan. Nevýhodou rostoucího dynamického rozsahu je, že uložené hodnoty jsou méně přesné.



Struktura datových typů s plovoucí desetinnou čárkou. Všechny zobrazené hodnoty (v FP16, BF16, FP8 E4M3 a FP8 E5M2) jsou nejvěrnější reprezentací hodnoty 0,3952.

Oba typy lze použít při trénování neuronové sítě. Obecně vyžadují aktivace vpřed a závaží vyšší přesnost, proto je nejlepší používat datový typ E4M3 při předním přihrávce. Nicméně při zpětném šíření je gradient protékající sítí obecně méně náchylný ke ztrátě přesnosti, ale vyžaduje vyšší dynamický rozsah. Proto je nejlepší je ukládat v datovém formátu E5M2. H100 TensorCore podporuje libovolnou kombinaci těchto typů jako vstup, což nám umožňuje uložit každý tenzor s jeho preferovanou přesností.

Odkaz:

Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.




Předchozí:Síť – Zařízení pod hlavní a podtrasou jsou propojena
Další:[AI] (10) LLM odhad GPU paměti VRAM s velkým modelem inference
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com