Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 3298|Atsakyti: 0

Dvigubas tikslumas (FP64), vieno tikslumo (P32, TF32), pusės tikslumo (FP16, BF16)

[Kopijuoti nuorodą]
Publikuota: 2025-3-10 14:22:34 | | | |
Didelių modelių mokymas ir samprotavimas dažnai apima tikslumo sąvoką, yra daugybė tipų, jie taip pat skirstomi į skirtingus formatus tuo pačiu tikslumo lygiu. Be to, praktinio naudojimo scenarijuose taip pat yra daugiatikslio ir mišraus tikslumo sąvokų.

Bendras tikslumas

Slankiojo kablelio tikslumas: dvigubas tikslumas (FP64), vieno tikslumo (FP32, TF32), pusės tikslumo (FP16, BF16), 8 bitų tikslumas (FP8), 4 bitų tikslumas (FP4, NF4)
Kiekybinio nustatymo tikslumas: INT8, INT4 (taip pat INT3/INT5/INT6)

Slankiojo kablelio skaičius susideda iš trijų dalių: ženklo, eksponentinio ir mantijos bitų. Kuo didesnis eksponentinis bitas, tuo didesnis skaičių diapazonas, kurį galima pavaizduoti. Kuo didesnis mantijos skaitmuo, tuo didesnis skaičiaus tikslumas.



Lentelėje tai apibendrinama taip

Formatassimbolio bitasEksponentinis antgalisdešimtainė dalisIš viso skaitmenų
FP641115264
BP32182332
TF32181019
BF1618716
BP16151016
FP8 E4M31438
FP8 E5M21528
4BP1214


FP32: 32 bitų slankiojo kablelio skaičius, 4 baitai duomenims
TF32: 19 bitų slankiojo kablelio skaičius, kiekvienas duomenys yra 2 baitai
FP16: 16 bitų slankiojo kablelio skaičius, 2 baitai duomenims
BF16: 16 bitų slankiojo kablelio skaičius, kiekvienas duomenys yra 2 baitai
Int8: 8 bitų sveikasis skaičius, kiekvienas duomenys sudaro 1 baitą
Int4: 4 bitų sveikieji skaičiai, kiekvienas duomenys yra 0,5 baito

Kodėl tiek daug tikslumo

Dėl kainos ir tikslumo. Visi žinome, kad didelis tikslumas yra tikrai tikslesnis, tačiau jis taip pat atneš didesnes skaičiavimo ir saugojimo išlaidas. Mažesnis tikslumas sumažina skaičiavimo tikslumą, bet gali pagerinti skaičiavimo efektyvumą ir našumą. Taigi skirtingų tikslumų įvairovė leidžia pasirinkti tinkamiausią skirtingose situacijose.
Dvigubas tikslumas yra tikslesnis nei vieno tikslumo išraiška, tačiau jis užima dvigubai daugiau vietos ir užima daugiau laiko apskaičiuoti.

Kodėl reikia kiekybiškai įvertinti didelius modelius?

1. Sumažinkite atminties naudojimą
Dideliuose modeliuose paprastai naudojami 32 bitų slankiojo kablelio skaičiai (FP32) arba 16 bitų slankiojo kablelio skaičiai (FP16) svoriams ir aktyvinimo reikšmėms parodyti. Kvantizuojant šias didelio tikslumo reikšmes galima paversti mažesnio tikslumo vaizdais (pvz., 8 bitų sveikaisiais skaičiais, INT8), žymiai sumažinant modelio saugojimo vietą. Tai svarbu diegiant ribotų išteklių įrenginiuose, tokiuose kaip mobilieji įrenginiai, įterptosios sistemos ir kt.

2. Pagreitinkite samprotavimo greitį
Kvantiniai modeliai gali efektyviau veikti aparatinėje įrangoje. Daugelis šiuolaikinės aparatinės įrangos (pvz., GPU, TPU, NPU ir kt.) turi specializuotą mažo tikslumo skaičiavimo optimizavimo palaikymą, leidžiantį greičiau atlikti kvantavimo operacijas. Be to, mažo tikslumo skaičiavimai dažnai apima mažiau bitų operacijų, todėl sumažėja skaičiavimo sudėtingumas ir taip pagreitėja išvados.

3. Sumažinkite energijos suvartojimą
Kvantinis modelis ne tik sumažina skaičiavimo išteklių poreikį, bet ir sumažina energijos suvartojimą. Tai ypač svarbu baterijomis maitinamiems įrenginiams, tokiems kaip išmanieji telefonai, daiktų interneto įrenginiai ir kt., kur mažos energijos sąnaudos reiškia ilgesnį baterijos veikimo laiką.

4. Lengva įdiegti krašto įrenginius
Daugelis didelių modelių iš pradžių buvo apmokyti ir įdiegti debesyje, tačiau tobulėjant krašto kompiuterijai, vis daugiau taikymo scenarijų reikalauja modelių diegimo krašto įrenginiuose. Esant ribotai skaičiavimo galiai ir saugojimo ištekliams krašto įrenginiuose, kvantavimas gali padėti šiems modeliams efektyviau veikti krašto įrenginiuose.

5. Sumažinkite pralaidumo reikalavimus
Paskirstytos išvados ar modelio atnaujinimo procese kvantavimas gali sumažinti modelio perkėlimui reikalingą pralaidumą. Tai naudinga aplinkoms, kuriose tinklo pralaidumas yra ribotas, pvz., daiktų interneto įrenginiams atokiose vietovėse.

6. Išlaikykite modelio našumą
Nors kvantizacija sukelia tam tikrą tikslumo praradimą, pradinį modelio veikimą galima iš esmės išsaugoti taikant atitinkamus kvantavimo metodus (pvz., mišraus tikslumo kvantizavimą, kvantavimą po treniruotės, kiekybinį suvokimo mokymą ir kt.). Todėl praktiniame pritaikyme kiekybinis įvertinimas gali pasiekti gerą našumo ir efektyvumo pusiausvyrą.

Atminties nuoroda

rūšisKiekvienas milijardas parametrų turi užimti atmintį
plūdė324G
FP16/BF162G
int81G
int40,5 g


FP64 (dvigubas tikslumas)

64 bitų slankusis kablelis, paprastai dvigubo tikslumo dvejetainis slankiojo kablelio formatas, apibrėžtas IEEE 754, turi:

1 skaitmens simbolis
11 skaitmenų rodyklė
52 skaitmenys po kablelio



Diapazonas: ~2.23e-308 ... ~1.80e308 su visu 15-17 dešimtainiu tikslumu.

Naudojimo:

Šis formatas naudojamas moksliniams skaičiavimams, kuriems reikalingas didelis tikslumas.
Paprastai jis nenaudojamas gilaus mokymosi skaičiavimams.
Programinės įrangos palaikymas:
Daugumoje C/C++ sistemų atstovauja dvigubą tipą.
Palaikoma "TensorFlow" (pvz., tf.float64) / "PyTorch" (pvz., torch.float64 arba torch.double).
Techninės įrangos palaikymas:
Paprastai palaikoma x86 procesoriuose.
Daugumos GPU, ypač žaidimų GPU, įskaitant RTX seriją, FP64 našumas yra labai ribotas (paprastai 1/32 FP32 našumo, o ne 1/2).
Naujausi neriboti FP64 palaikomi GPU yra GP100/100/102/104 Tesla P40/P4 ir Quadro GP100, GV100 Tesla V100/Quadro GV100/Titan V ir neseniai paskelbtas GA100 A100 (įdomu tai, kad naujoji Ampere architektūra turi trečią kartą), palyginti su FP64 palaikančiais Tensor branduoliais Dabar įtrauktas naujas IEEE suderinamas FP64 apdorojimas, kuris užtikrina 2,5 karto didesnį FP64 našumą nei V100.

FP32 (visiškas tikslumas)

Šis formatas jau seniai yra gilaus mokymosi darbinis arkliukas. Kitas IEEE 754 formatas, vieno tikslumo slankusis kablelis:

1 skaitmens simbolis
8 skaitmenų rodyklė
23 skaitmenys po kablelio
Idealiu atveju tiek treniruotės, tiek išvados turėtų būti atliekamos FP32, tačiau FP32 yra dvigubai lėtesnis nei FP16/BF16, todėl praktikoje dažnai naudojami mišraus tikslumo metodai, kai FP32 svoriai naudojami kaip tikslus "pagrindinis svoris", FP16/BF16 svoriai naudojami sklidimo pirmyn ir atgal skaičiavimams, siekiant pagerinti treniruočių greitį, ir galiausiai FP32 suverenūs svoriai atnaujinami FP16/BF16 gradientais gradiento atnaujinimo fazėje.

Treniruočių metu suverenus svoris visada yra FP32. Praktiškai pusės tikslumo svoriai dažnai užtikrina panašų tikslumą kaip FP32, kai daroma išvada, nes tikslūs FP32 svoriai reikalingi tik atnaujinus modelio gradientą. Tai reiškia, kad darydami išvadas galime naudoti pusiau tikslumo svorius, todėl tą patį rezultatą galime gauti tik su puse GPU atminties.



Diapazonas: ~1.18e-38 ... ~3.40e38 su 6-9 reikšmingų dešimtainių tikslumu.

Naudojimo:

Standartinis neuroninių tinklų skaičiavimo tipas ilgą laiką. Svoriai, aktyvacijos ir kitos reikšmės neuroniniuose tinkluose jau seniai yra numatytosios FP32.
Daugeliui mokslinių skaičiavimų, ypač kartotinių, tikslumo nepakanka, todėl kaupiasi klaidos.
Programinės įrangos palaikymas:
Nurodo plūdės tipą daugumoje C/C++ sistemų.
Palaikoma "TensorFlow" (pvz., tf.float32) / "PyTorch" (pvz., torch.float32 arba torch.float).
Techninės įrangos palaikymas:
Paprastai palaikoma x86 procesoriuose.
Paprastai palaiko NVIDIA / AMD GPU.

FP16 (pusės tikslumas)

Panašiai IEEE 754 standartinis formatas, pusiau tikslumo slankiojo kablelio formatas:

1 skaitmens simbolis
5 skaitmenų indeksas
10 skaitmenų po kablelio
FP16 numerio skaitinis diapazonas yra daug mažesnis nei FP32. Todėl BP16 gresia perpildymas (kai naudojamas labai dideliems skaičiams pavaizduoti) ir per mažas (kai naudojamas labai mažiems skaičiams pavaizduoti). Pavyzdžiui, kai darote 10k * 10k, galutinis rezultatas turėtų būti 100M, kurio FP16 negali atspindėti, nes maksimalus FP16 skaičius yra 64k. Taigi neuroninių tinklų skaičiavimuose gausite NaN (ne skaičių), nes skaičiavimai atliekami sluoksniuota ir paketine tvarka, todėl pasirodžius NaN, visi ankstesni skaičiavimai sunaikinami. Apskritai tai galima sušvelninti nuostolių masteliu, tačiau šis metodas ne visada veikia.



Diapazonas: ~5.96e−8 (6.10e−5) ... 65504, 4 reikšmingų skaitmenų po kablelio tikslumu.

Naudojimo:

Gilusis mokymasis paprastai naudoja FP16, o ne FP32, nes mažesnio tikslumo skaičiavimai neuroniniams tinklams neatrodo svarbūs. Papildomas tikslumas nieko nedaro, o tuo pačiu yra lėtesnis, reikalaujantis daugiau atminties ir sulėtinantis bendravimą.
Gali būti naudojamas treniruotėms, dažniausiai naudojant mišraus tikslumo treniruotes (TensorFlow/PyTorch).
Gali būti naudojamas kvantavimui po treniruotės, siekiant pagreitinti išvadą (TensorFlow Lite). Kiti kvantavimui po treniruotės naudojami formatai yra sveikieji skaičiai INT8 (8 bitų sveikieji skaičiai), INT4 (4 bitų) ir net INT1 (dvejetainės reikšmės).
Programinės įrangos palaikymas:
Šiuo metu nėra C/C++ standarte (bet yra trumpas plūduriuojantis pasiūlymas). Kai kurios C/C++ sistemos palaiko __fp16 tipus. Priešingu atveju jis gali būti naudojamas su specialiomis bibliotekomis.
Palaikoma TensorFlow (pvz., tf.float16) / PyTorch (pvz., torch.float16 arba torch.half).
Techninės įrangos palaikymas:
x86 procesoriai nepalaikomi (kaip unikalus tipas).
Senesnių žaidimų GPU palaikymas yra prastas (32/1 FP64 našumas, daugiau informacijos rasite įraše apie GPU). Šiuo metu jis gerai palaikomas šiuolaikiniuose GPU, tokiuose kaip NVIDIA RTX serija.

BFLOAT16 (pusiau tikslus)

Kitas 16 bitų formatas, kurį iš pradžių sukūrė "Google", vadinamas "Brain Floating Point Format" arba trumpai "bfloat16". Pavadinimas kilęs iš "Google Brain".

Originalus IEEE FP16 buvo sukurtas neatsižvelgiant į gilaus mokymosi programas, o jo dinaminis diapazonas buvo per siauras. BFLOAT16 išsprendžia šią problemą, suteikdama tokį patį dinaminį diapazoną kaip ir FP32.

Todėl BFLOAT16 turi:

1 skaitmens simbolis
8 skaitmenų rodyklė
7 skaitmenys po kablelio



bfloat16 formatas sutrumpintas iki IEEE 754 FP32, leidžiantis greitai konvertuoti į IEEE 754 FP32 ir iš jo. Konvertuojant į bfloat16 formatą, eksponentiniai bitai išsaugomi, o mantijos laukus galima sumažinti sutrumpinant.



Diapazonas: ~1.18e-38 ... ~3.40e38 su 3 reikšmingais skaitmenimis po kablelio.
Naudojimo:

Dabar atrodo, kad jis pakeičia FP16. Skirtingai nuo FP16, kuriam dažnai reikia specialaus apdorojimo naudojant tokius metodus kaip nuostolių mastelio keitimas, BF16 yra beveik tiesioginis FP32 pakaitalas treniruojant ir paleidžiant giliuosius neuroninius tinklus.
Programinės įrangos palaikymas:
Ne C / C ++ standartas. Galima naudoti su specialiomis bibliotekomis.
Palaikoma "TensorFlow" (pvz., tf.bfloat16) / "PyTorch" (pvz., torch.bfloat16).

TF32

"TensorFloat-32" arba TF32 yra naujas matematinis režimas NVIDIA A100 GPU.

Naudojant tas pačias 10 bitų mantisas kaip ir pusiau tikslumo (FP16) matematiką, TF32 įrodo, kad turi pakankamai erdvės, kad atitiktų dirbtinio intelekto darbo krūvio tikslumo reikalavimus. O TF32 naudoja tą patį 8 bitų indeksą kaip ir FP32, todėl gali palaikyti tą patį skaitinį diapazoną.

Techniškai tai yra 19 bitų formatas. Pagalvokite apie tai kaip išplėstinio tikslumo BFLOAT16, pvz., "BFLOAT19" arba sumažintą tikslumą, pvz., FP32.

Taigi, TF32 turi:

1 skaitmens simbolis
8 skaitmenų rodyklė
10 skaitmenų po kablelio
TF32 privalumas yra tas, kad jo formatas yra toks pat kaip FP32. Skaičiuojant vidinę sandaugą su TF32, įvesties operando mantisa suapvalinama nuo 23 iki 10 bitų. Apvalinimo operandai tiksliai padauginami ir kaupiami įprastoje FP32.

TF32 Tensor Core veikia FP32 įvestimis ir generuoja rezultatus FP32 be kodo pakeitimų. Ne matricos operacijoms ir toliau naudojama BP32. Tai suteikia paprastą būdą pagreitinti FP32 įvesties / išvesties duomenis gilaus mokymosi sistemose ir HPC.

Diapazonas: ~1.18e-38 ... ~3.40e38 su 4 reikšmingų skaitmenų po kablelio tikslumu.
Naudojimo:

Vienas iš puikių dalykų apie TF32 yra tai, kad jam reikia tik kompiliatoriaus palaikymo giliausiame lygyje, ty CUDA kompiliatoriaus viduje. Likusi kodo dalis tiesiog mato FP32 su mažesniu tikslumu, bet tuo pačiu dinaminiu diapazonu. TF32 naudojimas daugiausia skirtas skambinti į biblioteką, kad parodytumėte, ar ji veikia tinkamai. TF32 buvimas leidžia greitai prijungti, be didelio darbo išnaudojant "Tensor" branduolių greitį.
Tokius formatus kaip FP16 ir BFLOAT16 reikia labiau patobulinti, nes jie apima skirtingus bitų išdėstymus. Tačiau naudojant šiuos formatus sumažėja atminties pralaidumas, todėl galima greičiau vykdyti.
Palyginimui, didžiausias A100 našumas yra:

FP32 be tenzorinių branduolių: 19,5 TFLOPS
TF32 Tensor branduoliai: 156 TFLOPS (taigi naudojant TF32 vietoj FP32 lengva padidinti greitį).
FP16 / BF16 tenzoriniai branduoliai: 312 TFLOPS (todėl protingas perėjimas prie FP16 / BF16 gali padidinti greitį, tačiau už didesnę kainą).
Programinės įrangos palaikymas:
Ne C / C ++ standartas.
CUDA 11 palaikomas.
Techninės įrangos palaikymas:
GPU: NVIDIA A100 yra pirmasis palaikomas modelis

8BP

Pristatytas H100 GPU, jis leidžia didesnį matricos dauginimą ir konvoliuciją, tačiau mažesniu tikslumu.

FP100 duomenų tipai, kuriuos palaiko H8, iš tikrųjų yra 2 skirtingi duomenų tipai, kurie gali būti naudojami skirtingoms neuroninių tinklų mokymo dalims:

E4M3 - susideda iš 1 simbolinio bito, 4 eksponentinių bitų ir 3 skaitmenų po kablelio. Jame galima laikyti iki +/-448 ir nan.
E5M2 - susideda iš 1 ženklo bito, 5 eksponentinių bitų ir 2 skaitmenų po kablelio. Jis gali saugoti reikšmes iki +/-57344, +/-inf ir nan. Didėjančio dinaminio diapazono kompromisas yra tas, kad saugomos reikšmės yra mažiau tikslios.



Slankiojo kablelio duomenų tipų struktūra. Visos rodomos reikšmės (FP16, BF16, FP8 E4M3 ir FP8 E5M2) yra artimiausias reikšmės 0,3952 atvaizdas.

Abu tipai gali būti naudojami treniruojant neuroninį tinklą. Apskritai, aktyvinimas į priekį ir svoriai reikalauja didesnio tikslumo, todėl pravažiavimo į priekį metu geriausia naudoti E4M3 duomenų tipą. Tačiau atgalinio sklidimo metu tinklu tekantis gradientas paprastai yra mažiau jautrus tikslumo praradimui, tačiau reikalauja didesnio dinaminio diapazono. Todėl geriausia juos saugoti naudojant E5M2 duomenų formatą. H100 TensorCore palaiko bet kokį šių tipų derinį kaip įvestį, todėl galime saugoti kiekvieną tenzorių pageidaujamu tikslumu.

Nuoroda:

Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.




Ankstesnis:Tinklas – pagrindinio maršruto ir antrinio maršruto įrenginiai yra tarpusavyje sujungti
Kitą:[AI] (10) LLM didelio modelio išvados GPU atminties VRAM įvertinimas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com