1. Vier Zustände unterscheiden, die der Bildschirm vermischt
Eine offene Verbindung beweist nur, dass Sie noch mit der Maschine kommunizieren können. Ein sichtbares Terminal kann eine Shell beherbergen, deren Berechnung bereits abgeschlossen ist. Umgekehrt lässt ein Verbindungsverlust nicht den Schluss zu, dass der Prozess beendet wurde. Beginnen Sie daher damit, der Ausführung und dem Ort, an dem ihre Spuren zu finden sind, einen Namen zu geben.
Verfolgen Sie getrennt die Existenz des Prozesses, seinen fachlichen Fortschritt und die Akzeptanz des Ergebnisses. Die Anzahl der Zeilen in einem Protokoll ist kein Zähler erfolgreich verarbeiteter Daten: Ein Programm kann dieselbe Warnung wiederholen. Eine partielle Ausgabe kann lesbar und dennoch unvollständig sein.
Diese Methode setzt voraus, dass Sie die erforderlichen Zugangsmittel erhalten und geprüft haben. Sie verspricht weder ein bestimmtes Zugangsprotokoll noch eine automatische Aufbewahrung der Dateien. Die verfügbaren Werkzeuge und Ziele müssen in der tatsächlich bereitgestellten Umgebung überprüft werden.
Scrollen Sie durch die Tabelle, um alle Spalten zu lesen.| Beobachtung | Was sie anzeigt | Was sie nicht belegt |
|---|---|---|
| Aktive Verbindung | Der Kanal antwortet. | Die Berechnung schreitet voran. |
| Prozess vorhanden | Eine Ausführung existiert noch. | Sie verarbeitet die richtigen Elemente. |
| Zähler bestätigt steigend | Geplante Einheiten sind abgeschlossen. | Das gesamte Korpus ist abgeschlossen. |
| Rückgabecode gleich null | Das Programm meldet eine normale Beendigung. | Das Ergebnis entspricht Ihrem Vertrag. |
| Kontrollierte und abgerufene Ausgaben | Die gewählten Kriterien wurden überprüft. | Eine Qualität jenseits dieser Kriterien. |
2. Vor dem Abkoppeln einen identifizierbaren Lauf vorbereiten
Kontrollieren Sie die Daten, die effektive Konfiguration und einen ersten kurzen Durchlauf der Anwendung. Die GPU-Diagnose beantwortet eine andere Frage: Kann das Backend eine Berechnung ausführen? Sie validiert weder das vollständige Laden des Korpus noch die Logik Ihres Programms. Führen Sie diese Prüfungen durch, bevor Sie eine lange Laufzeit starten.
Wählen Sie eine Ausführungs-ID und einen neuen Ordner. Bewahren Sie den Befehl ohne Geheimnisse, die Codeversion, die Identität der Eingaben und das erwartete Ergebnis auf. Planen Sie, wohin die Protokolle geschrieben und wo die Dateien abgerufen werden. Zwei Starts dürfen nicht gleichzeitig in denselben Ordner schreiben.
Bei einer in unabhängige Partitionen aufgeteilten Arbeit entscheiden Sie, wann eine Partition als abgeschlossen gilt: Berechnung beendet, Datei geschlossen, Inhalt geprüft und Zustand gespeichert. Eine Datei, die gerade geschrieben wird, darf nicht dieselbe Bedeutung haben wie ein akzeptiertes Ergebnis. Prüfen Sie außerdem den tatsächlich nutzbaren Speicherplatz vor dem Start.
3. Ein auffindbares Terminal behalten, wenn der Kontext es erlaubt
Wenn die Umgebung eine Unix-Shell und tmux bereitstellt, ermöglicht dieser Multiplexer, ein Terminal abzutrennen und es nach einer erneuten Verbindung wiederzufinden. Er schützt diesen Ablauf gegen den Verlust des Verbindungsclients; er ist kein Mechanismus zur Wiederherstellung nach einem Neustart der Maschine oder der Zerstörung des Prozesses.
Die folgenden Befehle sind didaktisch und werden nicht ausgeführt. Sie setzen Bash, tmux und Ihr eigenes Programm traitement.py mit den gezeigten Optionen voraus; diese Datei ist keine bereitgestellte Ressource. Prüfen Sie zunächst den kurzen Befehl und verwenden Sie einen eigenen Sitzungsnamen, um zwei Berechnungen nicht zu verwechseln.
Erstellen Sie die Sitzung und starten Sie dann den zweiten Block darin. Das Anlegen des Ordners schlägt fehl, wenn er bereits existiert, wodurch vermieden wird, seine Protokolle stillschweigend wiederzuverwenden. Der Rückgabecode bleibt erhalten, wenn die Shell den Schreibschritt erreicht; ein abruptes Ende kann die Erstellung dieser Datei verhindern. Das Fehlen eines Codes ist also kein impliziter Erfolg.
Mit den Standard-Tastenkürzeln trennen Sie mit Ctrl-b und dann d ab. Nach der erneuten Verbindung listen Sie die Sitzungen auf und hängen Sie die richtige wieder an. Die Shell kann noch sichtbar bleiben, obwohl das Programm beendet ist: Prüfen Sie das Protokoll und den gespeicherten Code. Starten Sie nicht sofort eine zweite Kopie, nur weil Ihr altes Terminal verschwunden ist.
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. Akzeptierte Arbeit zählen, nicht nur Aktivität
Die Python-Option -u hebt die Pufferung ihrer Standardausgabe und Fehlerausgabe auf. Sie hilft, ausgegebene Meldungen zu sehen, erzeugt aber keine Fortschrittsereignisse in der Anwendung. Eine Bibliothek oder ein stiller Schritt kann weiterhin eine eigene Beobachtung erfordern.
Definieren Sie verständliche Phasen: Lesen, Vorbereitung, Berechnung, Schreiben, Überprüfung. Fügen Sie einen Zähler mit stabiler Einheit sowie eine Gesamtsumme hinzu, wenn sie bekannt ist. Wenn Sie akzeptierte Partitionen zählen, wechseln Sie nicht mitten im Protokoll zu einem Zähler gelesener Zeilen, ohne dessen Namen zu ändern.
Das folgende didaktische Beispiel betrifft acht Partitionen mit fünfhundert Elementen, also viertausend Elemente. Im dargestellten Moment sind nur fünf Partitionen akzeptiert. Die sechste ist teilweise fertig und darf die Gesamtsumme nicht aufblähen. Die Zahlen zeigen eine Zählregel; sie beschreiben keine Kernodeck-Ausführung.
Scrollen Sie durch die Tabelle, um alle Spalten zu lesen.| Partitionen | Status | Als akzeptiert gezählte Elemente | Entscheidung |
|---|---|---|---|
| 1 bis 5 | Überprüft | 2 500 | Ihre Identitäten und Ergebnisse beibehalten. |
| 6 | Teilweise geschrieben | 0 | Diese Partition nicht als abgeschlossen melden. |
| 7 und 8 | Zu bearbeiten | 0 | In der Arbeitsliste bleiben. |
| Gesamt | Unvollständig | 2.500 von 4.000 | Den endgültigen Ordner nicht akzeptieren. |
5. Ein Schweigen oder eine Unterbrechung untersuchen, ohne ein Duplikat zu erzeugen
Wenn sich kein Zähler bewegt, identifizieren Sie die letzte bekannte Phase und ihre letzte abgeschlossene Einheit. Prüfen Sie, ob der Prozess existiert, ob eine Fehlermeldung aufgetreten ist und ob das Ziel weiterhin nutzbar ist. Ein langsamer Start des Modells und eine blockierte Schleife können denselben reglosen Bildschirm erzeugen; der Kontext entscheidet über die nächste Kontrolle.
Bereiten Sie das freiwillige Beenden in Ihrer Anwendung vor: Aufforderung zum Beenden, Abschluss einer sicheren Einheit, Speichern des Zustands, dann Beenden. Signale und Unterbrechungen hängen vom System ab. Python kann SIGKILL nicht abfangen, und ein Python-Handler kann auf das Ende eines langen nativen Aufrufs warten, bevor er ausgeführt wird. Eine Sicherung beim Beenden ersetzt daher keine regelmäßigen Sicherungen.
Nach einem Verbindungsverlust finden Sie zuerst die bestehende Sitzung und Ausführung wieder. Nach einem bestätigten Beenden bestimmen Sie, was vollständig und was teilweise fertig ist. Bei einem Training erfordert die Wiederaufnahme die detaillierten Zustände des Modells und der Optimierung; der spezielle Leitfaden prüft diesen Fall in einem neuen Prozess.
6. Nur das wiederaufnehmen, was der Vertrag erlaubt
In unserem Beispiel setzt die Wiederaufnahme pro Partition voraus, dass jede Partition unabhängig ist und dass Eingabe, Code und Konfiguration identisch bleiben. Sie kann die fünf validierten Ergebnisse behalten und das sechste vollständig neu berechnen, bevor sie mit den beiden folgenden fortfährt. Wenn diese Annahmen nicht zutreffen, ist diese Abkürzung nicht gerechtfertigt.
Fügen Sie die neuen Zeilen nicht einfach an die partielle Datei an. Sie riskieren, Duplikate zu erzeugen oder zwei Konfigurationen zu vermischen. Verwenden Sie die erwarteten Identifikatoren, um vollständig, unvollständig und fehlend zu unterscheiden. Bewahren Sie den alten Zustand als erklärendes Element auf, mit einem separaten Ziel für den neuen Versuch.
Prüfen Sie Ihre Strategie an einer kontrollierten Unterbrechung, bevor Sie sich für eine große Verarbeitung darauf verlassen. Das Kriterium ist die Gleichwertigkeit der nutzbaren Ausgaben gemäß Ihrem Vertrag, nicht die Identität der Fortschrittsmeldungen. Trainingsläufe, Berechnungen mit externen Effekten und verteilte Verarbeitung erfordern andere Garantien als dieses Beispiel unabhängiger Partitionen.
7. Das Ergebnis annehmen und abrufen, bevor die Arbeit abgeschlossen wird
Beginnen Sie mit dem Rückgabecode und gleichen Sie dann die Ausgaben mit dem Eingabemanifest ab. Für unser Beispiel warten Sie auf die acht Partitionen und die viertausend vorgesehenen Identifikatoren, ohne Lücken oder Duplikate. Prüfen Sie Format, Dimensionen und relevante Werte; das Lesen einer Datei beweist nicht, dass sie das richtige Ergebnis enthält.
Rufen Sie die angenommenen Ausgaben, die genehmigte Konfiguration, die Versionen und den Prüfbericht ab. Vergleichen Sie die Größen und, falls nötig, die Prüfsummen zwischen Quelle und Kopie. Eine identische Prüfsumme hilft, die Übertragung der Bytes zu überprüfen; sie belegt weder die Qualität des Modells noch die legitime Herkunft der Datei.
Öffnen Sie schließlich ein Ergebnis von seinem Aufbewahrungsziel aus, mit dem Werkzeug, das es verwenden wird. Planen Sie diesen Schritt vor dem Ende Ihres Zugriffs auf die Rechenleistung ein. Die Arbeit ist abgeschlossen, wenn das geprüfte Ergebnis abrufbar und interpretierbar ist, nicht wenn der letzte Prozentwert hundert erreicht hat.