torch.no_grad() podczas inferencji
Pominąć śledzenie grafu, aby oszczędzać pamięć
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
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. 🚀
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
- requires_grad i graf obliczeń
- Wywołać backward(), aby uzyskać gradienty
- Odczytywanie i zerowanie .grad
- torch.no_grad() podczas inferencji