Obliczenia mieszanej precyzji z autocast i GradScaler
Wykorzystywać obliczenia o zmniejszonej precyzji dla dużego przyspieszenia
Obliczenia mieszanej precyzji z autocast i GradScaler to bezpłatna lekcja Deep Learning Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Deep Learning Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Deep Learning Academy zawiera 4 lekcji w sumie.
Co oznacza mieszana precyzja
Domyślnie PyTorch wykonuje obliczenia na liczbach zmiennoprzecinkowych 32-bitowych. Mieszana precyzja wykonuje wiele operacji zamiast tego na liczbach 16-bitowych, co jest szybsze i zużywa znacznie mniej pamięci.
Dlaczego niższa precyzja jest szybsza
Nowoczesne GPU mają specjalne rdzenie tensorowe dostosowane do obliczeń 16-bitowych. Podanie im danych o niższej precyzji może przyspieszyć trenowanie dwu- lub trzykrotnie, przy niewielkiej utracie dokładności.
Wada obliczeń 16-bitowych
Niższa precyzja ma niewielki zakres, więc bardzo małe wartości gradientów mogą zostać zaokrąglone do zera. To niezauważalne niedomiarowe zaokrąglenie zatrzymuje uczenie, jeśli nic się z tym nie zrobi.
Poznajemy autocast
Wystarczy umieścić przebieg w przód w autocast, a PyTorch automatycznie dobierze bezpieczną precyzję dla każdej operacji. Nie trzeba ręcznie konwertować tensorów.
with torch.autocast(device_type='cuda'):
out = model(x)Co obejmuje autocast
W autocast należy umieścić tylko przebieg w przód i funkcję straty. Wywołanie wstecznej propagacji pozostaje poza tym blokiem, gdzie PyTorch sam obsługuje precyzję.
with torch.autocast(device_type='cuda'):
out = model(x)
loss = loss_fn(out, y)Poznajemy GradScaler
GradScaler zapobiega przepełnieniu przez pomnożenie wartości funkcji straty przez duży współczynnik przed wykonaniem wstecznej propagacji, dzięki czemu małe gradienty pozostają wystarczająco duże, aby przetrwać w formacie 16-bitowym.
scaler = torch.cuda.amp.GradScaler()Skalowanie funkcji straty
Zamiast loss.backward() wywołaj scaler.scale(loss).backward(). Skaler najpierw zwiększa wartość funkcji straty, dzięki czemu wynikowe gradienty nie zanikają.
scaler.scale(loss).backward()Wykonanie kroku za pomocą skalera
Uruchom optymalizator za pomocą scaler.step, który po cichu skaluje gradienty z powrotem do normalnego rozmiaru przed zastosowaniem aktualizacji.
scaler.step(optimizer)Aktualizacja współczynnika skalowania
Kończ każdy krok wywołaniem scaler.update(). Zwiększa ono skalę, gdy wszystko działa stabilnie, i zmniejsza ją, jeśli wykryje przepełnienie.
scaler.update()Pełny krok AMP
Razem te wywołania tworzą przejrzystą iterację AMP: wyzerowanie gradientów, przebieg naprzód z autocast, wsteczna propagacja ze skalowaniem, krok skalera, a następnie aktualizacja.
optimizer.zero_grad()
with torch.autocast(device_type='cuda'):
loss = loss_fn(model(x), y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()Kiedy warto go użyć
Obliczenia w mieszanej precyzji dają świetne rezultaty na nowszym procesorze GPU NVIDIA przy dużych batchach. Na zwykłym procesorze CPU korzyści są niewielkie, więc warto używać ich podczas rzeczywistego trenowania.
Szybkie sprawdzenie
Włączono autocast, ale małe gradienty nadal zanikają. Jakie narzędzie rozwiąże ten problem?
Podsumowanie
Umieść przebieg naprzód w autocast, aby uzyskać szybkie obliczenia 16-bitowe, a następnie użyj GradScaler do skalowania, wykonywania kroków i aktualizacji, dzięki czemu małe gradienty przetrwają. ⚡
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Obliczenia mieszanej precyzji z autocast i GradScaler” jest bezpłatna?
Tak — pełny tekst „Obliczenia mieszanej precyzji z autocast i GradScaler” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Deep Learning Academy, przejdź na CoddyKit PRO. Kurs Deep Learning Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Obliczenia mieszanej precyzji z autocast i GradScaler”?
Wykorzystywać obliczenia o zmniejszonej precyzji dla dużego przyspieszenia Ćwiczysz Deep Learning Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Deep Learning Academy?
Nie wymagamy żadnego doświadczenia. Deep Learning Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Obliczenia mieszanej precyzji z autocast i GradScaler”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Deep Learning Academy?
Tak. Każda lekcja Deep Learning Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Obliczenia mieszanej precyzji z autocast i GradScaler
- Akumulacja gradientów dla dużych batchy
- Profilowanie wąskiego gardła
- Zmniejszyć zużycie pamięci GPU