Vad handlar det om FP16, FP32 i Python? Min potentiella affärspartner och jag bygger en Deep Learning Setup för att arbeta med tidsserier. Han kom med ”FP16 och FP32” när han hittade en GPU. Det ser ut som att han pratar om Floating Point-värden i 16 vs 32bit. (Våra datapunkter ser ut så här: ”5989.12345”, så jag är ganska säker på att 16bit inte är tillräckligt.)
Är FP16 en speciell teknik som grafikprocessorer använder för att förbättra prestanda eller är det bara en snygg term för att använda 16-bitars floatvärden istället för 32 standard floats?
Kommentarer
- Ja, FP16 betyder 16 bitar i GPU-sammanhanget.
Svar
FP32 och FP16 betyder 32- bit floating point och 16-bit floating point. GPU: er fokuserade ursprungligen på FP32 eftersom det här är de beräkningar som behövs för 3D-spel. Numera har många GPU: er inbyggt stöd för FP16 för att påskynda beräkningen av neurala nätverk. ( https://blog.slavv.com/titan-rtx-quality-time-with-the-top-turing-gpu-fe110232a28e ) ser du att GPU: er som stöder FP16 är nästan dubbelt så snabba att beräkna FP16 än FP32. ta hänsyn till att nyare kort som stöder FP16 (som NVidia 2080-serien) också är abo ut 20% snabbare för FP32 jämfört med deras föregångare (1080) får du en ökning med 140% för att träna FP16 neurala nätverk jämfört med FP32 på tidigare kort.
Men det finns en försiktighet. Ditt neurala nätverk måste skrivas med FP16 och det ska också ha samma noggrannhet. FP16 har lägre noggrannhet genom design, eftersom de har mycket mindre bitar för att representera samma antal. Vissa väljer att använda modeller med blandad precision för att vara snabba och korrekta ( https://hackernoon.com/rtx-2080ti-vs-gtx-1080ti-fastai-mixed-precision-training-comparisons-on-cifar-100-761d8f615d7f ). Men du ser i den sista länken att hastigheten är snabbare för blandad precision, men är inte två gånger snabbare som när du använder ren FP16. Du kan också teoretiskt använda FP32-vikter och konvertera några av dem till FP16-vikter, men noggrannheten kan falla.
Så i slutändan måste du förstå om du skulle kunna skriva om ditt neurala nätverk för att använda FP16 helt eller delvis . Om du inte kan får du inga ytterligare förmåner från FP16-kompatibla kort.
Högsta värdet för FP16 är 65504 och lägsta är 5,96 × 10−8. Den bästa precisionen för 5989.12345 kommer sannolikt att vara 5988.0 (spelas med bitar på https://www.h-schmidt.net/FloatConverter/IEEE754.html ) Om denna precision och storlek är inte tillräckligt för dig då kan du skala dina data innan du tränar för att passa FP16 och sedan träna med dubbel hastighet. Eller använd blandade precisionsmodeller där du har FP32 som inmatning och sedan minska precisionen i senare lager.
Kommentarer
- mycket informativt blogginnehåll, thx för det 🙂
- Jag inkluderade också en sannolik representation av ditt nummer i FP16. Om du är nöjd med svaret skulle det vara bra om du kunde kontrollera svaret som det accepterade svaret och även rösta om du vill.