Deep Learning Academy · Lekcja

torch.no_grad() podczas inferencji

Pominąć śledzenie grafu, aby oszczędzać pamięć

Lekcja 4 z 413 kroki

torch.no_grad() podczas inferencji to bezpłatna lekcja Deep Learning Academy na CoddyKit. To lekcja 4 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.

Nie każde przejście potrzebuje gradientów

Gradienty są potrzebne tylko podczas trenowania. Gdy chcą Państwo jedynie uzyskać predykcje, śledzenie grafu jest zbędną pracą, dlatego PyTorch pozwala je wyłączyć. 🛑

Poznaj torch.no_grad

Umieść kod w bloku torch.no_grad(), a autograd przestanie rejestrować operacje wykonywane wewnątrz niego. Graf nie zostanie zbudowany i żadne gradienty nie będą przechowywane.

with torch.no_grad():
    preds = model(x)

Dlaczego pomijać graf

Budowanie grafu wymaga pamięci do zapamiętania każdego kroku na potrzeby przejścia wstecznego, które nigdy nie nastąpi. Podczas wnioskowania ten narzut jest całkowicie zbędny.

Szybciej i lżej

Wewnątrz no_grad przejście w przód zużywa mniej pamięci i działa nieco szybciej. W przypadku dużych modeli pozwala to używać większych partii, gdy model służy tylko do predykcji.

Wyniki są odłączone

Tensory utworzone wewnątrz bloku mają requires_grad ustawione na false. Są zwykłymi wynikami, które można bez problemu wyświetlać, zapisywać lub konwertować do NumPy.

Używaj podczas ewaluacji

Pętle walidacyjne i testowe powinny zawsze działać w ramach no_grad. Oceniają Państwo model, a nie go trenują, więc nie ma powodu śledzić gradientów.

with torch.no_grad():
    for x, y in val_loader:
        out = model(x)

Połącz z trybem eval

Podczas wnioskowania ustaw model.eval() i jednocześnie umieść wywołania w no_grad. eval zmienia działanie warstw takich jak dropout, a no_grad zatrzymuje tworzenie grafu. Rozwiązują one różne problemy.

To menedżer kontekstu

no_grad wpływa tylko na kod wewnątrz bloku with. Po jego opuszczeniu autograd automatycznie ponownie włącza śledzenie na potrzeby następnego kroku trenowania.

Forma dekoratora

Można również oznaczyć całą funkcję za pomocą @torch.no_grad(). Każda operacja na tensorze wewnątrz tej funkcji wykona się wtedy bez budowania grafu.

@torch.no_grad()
def predict(x):
    return model(x)

Odłącz pojedynczy tensor

Potrzebują Państwo uwolnić z grafu tylko jeden tensor, a nie cały blok? Wywołaj na nim .detach(), aby uzyskać kopię bez historii gradientów.

frozen = output.detach()

Bezpieczny, powszechny nawyk

Sięgaj po no_grad zawsze, gdy model się nie uczy: podczas wnioskowania, obliczania metryk lub zapisywania wyników. To drobna zmiana, która po cichu oszczędza pamięć i czas.

Szybki test

Potwierdź, kiedy używać no_grad.

Podsumowanie

Umieść wnioskowanie w torch.no_grad(), aby pominąć budowanie grafu i oszczędzić pamięć oraz czas. Zawsze łącz to z model.eval(), gdy wykonujesz predykcje zamiast trenowania. 🚀

Bezpłatny start

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 „torch.no_grad() podczas inferencji” jest bezpłatna?

Tak — pełny tekst „torch.no_grad() podczas inferencji” 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 „torch.no_grad() podczas inferencji”?

Pominąć śledzenie grafu, aby oszczędzać pamięć Ć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 4 z 4.

Ile czasu zajmuje lekcja „torch.no_grad() podczas inferencji”?

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

  1. requires_grad i graf obliczeń
  2. Wywołać backward(), aby uzyskać gradienty
  3. Odczytywanie i zerowanie .grad
  4. torch.no_grad() podczas inferencji
← Powrót do Deep Learning Academy