1. Rozróżnij cztery stany, które ekran miesza
Otwarte połączenie dowodzi tylko tego, że wciąż możesz komunikować się z maszyną. Widoczny terminal może obsługiwać shell, którego obliczenia już się zakończyły. Odwrotnie, utrata połączenia nie pozwala wnioskować, że proces się zatrzymał. Zacznij więc od nadania nazwy uruchomieniu i miejscu, w którym znajdziesz jego ślady.
Śledź osobno istnienie procesu, jego postęp biznesowy i akceptację wyniku. Liczba wierszy w dzienniku nie jest licznikiem udanych danych: program może powtarzać to samo ostrzeżenie. Częściowy wynik może być czytelny, a jednocześnie niekompletny.
Ta metoda zakłada, że otrzymałeś i zweryfikowałeś niezbędne środki dostępu. Nie obiecuje ani konkretnego protokołu dostępu, ani automatycznego przechowywania plików. Dostępne narzędzia i miejsca docelowe należy sprawdzić w środowisku, które faktycznie otrzymałeś.
Przewiń tabelę, aby zobaczyć wszystkie kolumny.| Obserwacja | Co wskazuje | Czego nie dowodzi |
|---|---|---|
| Aktywne połączenie | Kanał odpowiada. | Obliczenia postępują. |
| Proces obecny | Uruchomienie wciąż istnieje. | Przetwarza właściwe elementy. |
| Zatwierdzony licznik rośnie | Zaplanowane jednostki są zakończone. | Cały korpus jest zakończony. |
| Kod powrotu równy zero | Program zgłasza normalne zakończenie. | Wynik spełnia twoją umowę. |
| Wyniki skontrolowane i odzyskane | Wybrane kryteria zostały zweryfikowane. | Jakość wykraczająca poza te kryteria. |
2. Przygotuj rozpoznawalne uruchomienie, zanim je odłączysz
Sprawdź dane, efektywną konfigurację i krótki pierwszy przebieg aplikacji. Diagnostyka GPU odpowiada na inne pytanie: czy backend potrafi wykonać obliczenia? Nie potwierdza pełnego wczytania korpusu ani logiki twojego programu. Wykonaj te sprawdzenia przed uruchomieniem na długi czas.
Wybierz identyfikator uruchomienia i nowy folder. Zachowaj polecenie bez sekretów, wersję kodu, tożsamość danych wejściowych i oczekiwany wynik. Zaplanuj, gdzie zapisywać dzienniki i skąd odzyskiwać pliki. Dwa uruchomienia nie mogą jednocześnie zapisywać w tym samym folderze.
W przypadku pracy podzielonej na niezależne partycje zdecyduj, kiedy partycja staje się zakończona: obliczenia ukończone, plik zamknięty, zawartość skontrolowana i stan zapisany. Plik w trakcie zapisu nie może mieć tego samego znaczenia co zaakceptowany wynik. Sprawdź również faktycznie dostępną przestrzeń przed startem.
3. Utrzymuj terminal możliwy do odnalezienia, gdy kontekst na to pozwala
Jeśli środowisko udostępnia powłokę Unix i tmux, ten multiplekser pozwala odłączyć terminal i odnaleźć go po ponownym połączeniu. Chroni ten przebieg przed utratą klienta połączenia; nie jest to mechanizm wznowienia po restarcie maszyny ani zniszczeniu procesu.
Poniższe polecenia mają charakter poglądowy i nie są wykonywane. Zakładają Bash, tmux oraz własny program traitement.py z pokazanymi opcjami; ten plik nie jest dostarczonym zasobem. Najpierw sprawdź jego krótkie polecenie i użyj odrębnej nazwy sesji, aby nie pomylić dwóch obliczeń.
Utwórz sesję, a następnie uruchom w niej drugi blok. Utworzenie katalogu nie powiedzie się, jeśli już istnieje, co zapobiega cichego ponownego użycia jego dzienników. Kod powrotu jest zachowywany, jeśli powłoka dotrze do etapu zapisu; nagłe zatrzymanie może uniemożliwić utworzenie tego pliku. Brak kodu nie jest więc domyślnym sukcesem.
Przy domyślnych skrótach odłącz się za pomocą Ctrl-b, a następnie d. Po ponownym połączeniu wylistuj sesje, a potem podłącz właściwą. Powłoka może pozostać widoczna, mimo że program zakończył działanie: sprawdź dziennik i zapisany kod. Nie uruchamiaj od razu drugiej kopii tylko dlatego, że zniknął Twój stary terminal.
tmux new -s campagne-amkdir -p runs
mkdir runs/campagne-a && (
code_retour=0
python -u traitement.py --config config.toml --output runs/campagne-a \
> runs/campagne-a/execution.log 2>&1 || code_retour=$?
printf '%s\n' "$code_retour" > runs/campagne-a/exit-code.txt
exit "$code_retour"
)tmux ls
tmux attach -t campagne-a4. Licz zaakceptowaną pracę, a nie tylko aktywność
Opcja Pythona -u usuwa buforowanie jego wyjścia standardowego i błędów. Pomaga zobaczyć wysyłane komunikaty, ale nie tworzy zdarzeń postępu w aplikacji. Biblioteka lub cichy etap może nadal wymagać własnej obserwacji.
Zdefiniuj zrozumiałe fazy: odczyt, przygotowanie, obliczenia, zapis, weryfikacja. Dodaj licznik o stałej jednostce oraz sumę, gdy jest znana. Jeśli liczysz zaakceptowane partycje, nie przechodź na licznik odczytanych wierszy w środku dziennika bez zmiany jego nazwy.
Poniższy przykład poglądowy dotyczy ośmiu partycji po pięćset elementów, czyli czterech tysięcy elementów. W przedstawionej chwili zaakceptowanych jest tylko pięć partycji. Szósta jest częściowa i nie powinna zawyżać sumy. Liczby pokazują regułę zliczania; nie opisują żadnego wykonania Kernodeck.
Przewiń tabelę, aby zobaczyć wszystkie kolumny.| Partycje | Stan | Elementy policzone jako zaakceptowane | Decyzja |
|---|---|---|---|
| 1 do 5 | Zweryfikowane | 2 500 | Zachować ich tożsamości i wyniki. |
| 6 | Zapis częściowy | 0 | Nie ogłaszać tej partycji zakończonej. |
| 7 i 8 | Do przetworzenia | 0 | Pozostać na liście zadań. |
| Całość | Niekompletna | 2 500 z 4 000 | Nie akceptować końcowego katalogu. |
5. Zbadaj ciszę lub przerwanie bez tworzenia duplikatu
Gdy żaden licznik się nie porusza, ustal ostatnią znaną fazę i jej ostatnią ukończoną jednostkę. Sprawdź, czy proces istnieje, czy pojawił się komunikat błędu i czy miejsce docelowe pozostaje użyteczne. Wolne uruchamianie modelu i zablokowana pętla mogą dawać ten sam nieruchomy ekran; kontekst decyduje o następnej kontroli.
Przygotuj w swojej aplikacji dobrowolne zatrzymanie: żądanie zatrzymania, zakończenie bezpiecznej jednostki, zapis stanu, a potem wyjście. Sygnały i przerwania zależą od systemu. Python nie może przechwycić SIGKILL, a procedura obsługi w Pythonie może czekać na zakończenie długiego wywołania natywnego, zanim się wykona. Zapis przy zatrzymaniu nie zastępuje więc okresowych kopii zapasowych.
Po utracie połączenia najpierw odnajdź istniejącą sesję i wykonanie. Po potwierdzonym zatrzymaniu ustal, co jest kompletne, a co częściowe. W przypadku treningu wznowienie wymaga szczegółowych stanów modelu i optymalizacji; dedykowany przewodnik weryfikuje ten przypadek w nowym procesie.
6. Wznów tylko to, na co pozwala umowa
W naszym przykładzie wznowienie według partycji zakłada, że każda partycja jest niezależna, a dane wejściowe, kod i konfiguracja pozostają identyczne. Może zachować pięć zatwierdzonych wyników i w pełni przeliczyć szósty, zanim przejdzie do dwóch kolejnych. Jeśli te założenia nie są spełnione, takie skrócenie nie jest uzasadnione.
Nie dodawaj po prostu nowych wierszy do pliku częściowego. Ryzykujesz utworzenie duplikatów albo wymieszanie dwóch konfiguracji. Użyj oczekiwanych identyfikatorów, aby rozróżnić stan kompletny, niekompletny i brakujący. Zachowaj poprzedni stan jako element wyjaśnienia, z osobnym miejscem docelowym dla nowej próby.
Sprawdź swoją strategię na kontrolowanym przerwaniu, zanim zaczniesz na niej polegać przy dużym przetwarzaniu. Kryterium jest równoważność użytecznych wyników zgodnie z Twoim kontraktem, a nie identyczność komunikatów o postępie. Trenowanie, obliczenia z efektami zewnętrznymi i przetwarzanie rozproszone wymagają innych gwarancji niż ten przykład niezależnych partycji.
7. Zaakceptuj i odbierz wynik, zanim zakończysz pracę
Zacznij od kodu powrotu, a następnie porównaj wyniki z manifestem wejściowym. W naszym przykładzie oczekuj ośmiu partycji i czterech tysięcy przewidzianych identyfikatorów, bez braków i duplikatów. Sprawdź format, wymiary i istotne wartości; odczytanie pliku nie dowodzi, że zawiera właściwy wynik.
Odbierz zatwierdzone wyniki, autoryzowaną konfigurację, wersje i raport kontrolny. Porównaj rozmiary, a w razie potrzeby sumy kontrolne między źródłem a kopią. Identyczna suma kontrolna pomaga zweryfikować transfer bajtów; nie dowodzi ani jakości modelu, ani legalnego pochodzenia pliku.
Na koniec otwórz wynik z miejsca jego przechowywania, za pomocą narzędzia, które go wykorzysta. Zaplanuj ten krok przed końcem dostępu do mocy obliczeniowej. Praca jest zakończona, gdy sprawdzony wynik jest możliwy do odebrania i zinterpretowania, a nie gdy ostatni procent osiągnął sto.