Waar gaat het allemaal over FP16, FP32 in Python? Mijn potentiële zakenpartner en ik bouwen een Deep Learning-setup voor het werken met tijdreeksen. Hij bedacht “FP16 en FP32” tijdens het zoeken naar een GPU. Het lijkt erop dat hij het heeft over Floating Point-waarden in 16 vs 32bit. (Onze datapunten zien er als volgt uit: “5989.12345”, dus ik “ben er vrij zeker van dat 16bit niet genoeg is.)
Is FP16 een speciale techniek die GPUs gebruiken om de prestaties te verbeteren of is het gewoon een mooie term voor het gebruik van 16-bit float-waarden in plaats van 32 standaard floats?
Reacties
- Ja, FP16 betekent 16 bits in de context van GPU.
Answer
FP32 en FP16 betekenen 32- bit floating point en 16-bit floating point. GPUs waren oorspronkelijk gericht op FP32 omdat dit de berekeningen zijn die nodig zijn voor 3D-games. Tegenwoordig hebben veel GPUs native ondersteuning van FP16 om de berekening van neurale netwerken te versnellen. Als je kijkt naar enkele benchmarks ( https://blog.slavv.com/titan-rtx-quality-time-with-the-top-turing-gpu-fe110232a28e ) zul je zien dat GPUs die FP16 ondersteunen bijna twee keer zo snel FP16 berekenen als FP32. houd er rekening mee dat nieuwere kaarten die FP16 ondersteunen (zoals NVidia 2080-serie) ook abo zijn ut 20% sneller voor FP32 vergeleken met hun voorganger (1080) krijg je een toename van 140% om FP16 neurale netwerken te trainen in vergelijking met FP32 op eerdere kaarten.
Maar er is een voorbehoud. Uw neurale netwerk moet worden geschreven met FP16 en het moet ook dezelfde nauwkeurigheid hebben. FP16 hebben een lagere nauwkeurigheid door hun ontwerp, omdat ze veel minder bits hebben om hetzelfde nummer te vertegenwoordigen. Sommigen kiezen ervoor om modellen met gemengde precisie te gebruiken om snel en nauwkeurig te zijn ( https://hackernoon.com/rtx-2080ti-vs-gtx-1080ti-fastai-mixed-precision-training-comparisons-on-cifar-100-761d8f615d7f ). Maar je ziet in de laatste link dat de snelheid hoger is voor gemengde precisie, maar niet 2 keer zo snel als wanneer je pure FP16 gebruikt. Je zou theoretisch ook FP32-gewichten kunnen gebruiken en sommige ervan omzetten in FP16-gewichten, maar de nauwkeurigheid kan afnemen.
Dus uiteindelijk moet je weten of je je neurale netwerk zou kunnen herschrijven om FP16 volledig of gedeeltelijk te gebruiken . Als u dat niet kunt, krijgt u geen extra voordelen van FP16-compatibele kaarten.
De maximale waarde voor FP16 is 65504 en het minimum is 5,96 × 10−8. De beste precisie voor 5989.12345 is waarschijnlijk 5988.0 (gespeeld met bits op https://www.h-schmidt.net/FloatConverter/IEEE754.html ) Als deze precisie en grootte is niet genoeg voor u, dan zou u uw gegevens vóór de training kunnen schalen om in FP16 te passen en vervolgens met dubbele snelheid trainen. Of gebruik gemengde precisiemodellen waarbij u FP32 als invoer hebt en verminder vervolgens de precisie in latere lagen.
Opmerkingen
- zeer informatieve bloginhoud, dank daarvoor 🙂
- Ik heb ook een waarschijnlijke weergave van uw nummer in FP16 toegevoegd. Als u tevreden bent met het antwoord, zou het goed zijn als u het antwoord als het geaccepteerde antwoord kunt controleren en desgewenst ook kunt stemmen.