0Pricing
Learn AI with Python · Lekcja

Trenowanie z mieszaną precyzją za pomocą AMP

torch.cuda.amp.autocast(), GradScaler, FP16 a BF16, oszczędność pamięci, wzrost szybkości.

Trenowanie z mieszaną precyzją za pomocą AMP to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 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 Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Czym jest mixed precision

Trenowanie w trybie mixed precision wykonuje większość operacji na 16-bitowych liczbach zmiennoprzecinkowych (FP16) zamiast 32-bitowych (FP32). FP16 zajmuje o połowę mniej pamięci i działa szybciej na współczesnych rdzeniach tensorowych GPU, podczas gdy kilka wrażliwych operacji pozostaje w FP32 dla zachowania stabilności.

Korzyści

Mixed precision zapewnia:

  • około 2 razy mniejsze zużycie pamięci, co umożliwia używanie większych batchy lub modeli
  • Szybsze mnożenie macierzy na rdzeniach tensorowych
  • Brak lub niewielki spadek końcowej dokładności modelu, jeśli rozwiązanie zostanie poprawnie zastosowane

Problem underflow w FP16

FP16 ma wąski zakres wartości. Małe wartości gradientów mogą ulec underflow i stać się zerem, niepostrzeżenie zatrzymując uczenie. To główne wyzwanie, które musi rozwiązać mixed precision, i powód, dla którego nie można po prostu przekonwertować wszystkiego do FP16.

torch.cuda.amp

PyTorch Automatic Mixed Precision (AMP) obsługuje te szczegóły za pomocą dwóch narzędzi: autocast dobiera precyzję dla poszczególnych operacji, a GradScaler zapobiega underflow gradientów.

import torch
from torch.cuda.amp import autocast, GradScaler

Kontekst autocast

Przebieg w przód należy umieścić w autocast(). W jego obrębie PyTorch automatycznie uruchamia każdą operację z użyciem najbezpieczniejszej precyzji: mnożenie macierzy w FP16, a redukcje, takie jak softmax i obliczanie funkcji straty, w FP32.

with autocast():
    output = model(x)
    loss = criterion(output, y)

Wprowadzenie GradScaler

GradScaler przeciwdziała underflow, mnożąc funkcję straty przez duży współczynnik skalowania przed propagacją wsteczną. Przesuwa to małe gradienty do zakresu reprezentowalnego w FP16; współczynnik jest usuwany przed krokiem optymalizatora.

scaler = GradScaler()

Skalowanie funkcji straty

scaler.scale(loss).backward() skaluje funkcję straty w górę, a następnie uruchamia propagację wsteczną. Wynikowe gradienty również są przeskalowane, dzięki czemu małe wartości nie zanikają.

scaler.scale(loss).backward()

scaler.step

scaler.step(optimizer) najpierw przywraca gradientom ich rzeczywistą skalę, a następnie wywołuje optimizer.step(), ale tylko wtedy, gdy nie pojawiły się wartości inf ani NaN. Jeśli gradienty uległy przepełnieniu, krok zostaje pominięty.

scaler.step(optimizer)

scaler.update

scaler.update() dostosowuje współczynnik skalowania na następną iterację: zwiększa go, gdy kroki kończą się powodzeniem, i zmniejsza po wystąpieniu przepełnienia. To adaptacyjne skalowanie automatycznie zapewnia stabilność trenowania.

scaler.update()

Pełna pętla AMP

Po połączeniu wszystkich elementów otrzymują Państwo kompletny krok trenowania w trybie mixed precision.

scaler = GradScaler()
for x, y in loader:
    x, y = x.cuda(), y.cuda()
    optimizer.zero_grad()
    with autocast():
        out = model(x)
        loss = criterion(out, y)
    scaler.scale(loss).backward()
    scaler.step(optimizer)
    scaler.update()

Praktyczne wskazówki

Warto pamiętać o następujących zasadach:

  • Wywołują Państwo backward() tylko dla przeskalowanej funkcji straty
  • autocast obejmuje wyłącznie przebieg w przód, a nie propagację wsteczną ani krok optymalizatora
  • AMP najlepiej sprawdza się na GPU z rdzeniami tensorowymi; na starszym sprzęcie korzyści są mniejsze

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę o AMP.

Podsumowanie

Poznali Państwo trenowanie w trybie mixed precision z użyciem AMP:

  • autocast() dobiera FP16 lub FP32 dla każdej operacji podczas przebiegu w przód
  • GradScaler skaluje funkcję straty, aby zapobiec underflow gradientów
  • Cykl obejmuje scaler.scale(loss).backward(), scaler.step(optimizer) oraz scaler.update()
  • Rezultat: około 2 razy mniejsze zużycie pamięci i szybsze trenowanie

Często zadawane pytania

Czy lekcja „Trenowanie z mieszaną precyzją za pomocą AMP” jest bezpłatna?

Tak — pełny tekst „Trenowanie z mieszaną precyzją za pomocą AMP” 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 Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Co nauczysz się w „Trenowanie z mieszaną precyzją za pomocą AMP”?

torch.cuda.amp.autocast(), GradScaler, FP16 a BF16, oszczędność pamięci, wzrost szybkości. Ćwiczysz Learn AI with Python 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ąć Learn AI with Python?

Nie wymagamy żadnego doświadczenia. Learn AI with Python 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 3 z 4.

Ile czasu zajmuje lekcja „Trenowanie z mieszaną precyzją za pomocą AMP”?

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 Learn AI with Python?

Tak. Każda lekcja Learn AI with Python 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

  1. Trenowanie na wielu GPU za pomocą DataParallel
  2. DistributedDataParallel (DDP)
  3. Trenowanie z mieszaną precyzją za pomocą AMP
  4. Wydajne trenowanie za pomocą Hugging Face Accelerate
← Powrót do Learn AI with Python