Hva handler det om FP16, FP32 i Python? Min potensielle forretningspartner og jeg bygger et Deep Learning Setup for å jobbe med tidsserier. Han kom på «FP16 og FP32» mens han fant en GPU. Det ser ut som om han snakker om Floating Point-verdier i 16 vs 32bit. (Våre datapunkter ser slik ut: «5989.12345», så jeg er ganske sikker på at 16bit ikke er nok.)
Er FP16 en spesiell teknikk som GPU-er bruker for å forbedre ytelsen, eller er det bare en fancy betegnelse for bruk av 16-biters flytverdier i stedet for 32 standard floats?
Kommentarer
- Ja, FP16 betyr 16 bits i GPU-sammenheng.
Svar
FP32 og FP16 betyr 32- bit floating point og 16-bit floating point. GPUer fokuserte opprinnelig på FP32 fordi dette er beregningene som trengs for 3D-spill. I dag har mange GPUer naturlig støtte for FP16 for å øke hastigheten på beregningen av nevrale nettverk. ( https://blog.slavv.com/titan-rtx-quality-time-with-the-top-turing-gpu-fe110232a28e ) vil du se at GPUer som støtter FP16 er nesten dobbelt så raskt å beregne FP16 enn FP32. konto at nyere kort som støtter FP16 (som NVidia 2080-serien) også er i ferd med å være ut 20% raskere for FP32 sammenlignet med forgjengeren (1080) får du en økning på 140% for å trene FP16 nevrale nettverk sammenlignet med FP32 på tidligere kort.
Men det er en advarsel. Nevrale nettverk må skrives med FP16, og det skal også ha samme nøyaktighet. FP16 har lavere nøyaktighet etter design, fordi de har mye mindre biter for å representere det samme tallet. Noen velger å bruke blandede presisjonsmodeller for å være raske og nøyaktige ( https://hackernoon.com/rtx-2080ti-vs-gtx-1080ti-fastai-mixed-precision-training-comparisons-on-cifar-100-761d8f615d7f ). Men du ser i den siste lenken at hastigheten er raskere for blandet presisjon, men ikke er 2 ganger raskere som når du bruker ren FP16. Du kan også teoretisk bruke FP32-vekter og konvertere noen av dem til FP16-vekter, men nøyaktigheten kan falle.
Så til slutt må du forstå om du kan omskrive nevralt nettverk for å bruke FP16 helt eller delvis . Hvis du ikke kan, får du ikke noen ekstra fordeler med FP16-kompatible kort.
Maksimumsverdien for FP16 er 65504 og minimumet er 5,96 × 10−8. Den beste presisjonen for 5989.12345 vil sannsynligvis være 5988.0 (spilt med biter på https://www.h-schmidt.net/FloatConverter/IEEE754.html ) Hvis denne presisjonen og størrelsen er ikke nok for deg, så kan du skalere dataene dine før du trener for å passe til FP16 og deretter trene med dobbelt hastighet. Eller bruk blandede presisjonsmodeller der du har FP32 som inndata, og reduser deretter presisjonen i senere lag.
Kommentarer
- blogginnhold med høy informasjon, thx for det 🙂
- Jeg inkluderte også en sannsynlig representasjon av nummeret ditt i FP16. Hvis du er fornøyd med svaret, ville det være bra hvis du kunne sjekke svaret som akseptert svar og også oppstemme hvis du vil.