GPUs für Ihre Projekte · Krypto-Zahlung ohne KYC So mieten Sie
Deutsch
Konsole öffnen
Praktischer Leitfaden / KERNODECK

Ihr Notebook funktioniert. Können Sie es ohne seine Zellen erneut ausführen?

Um von einem Notebook zu einem Skript zu wechseln, starten Sie mit einem leeren Kernel, identifizieren die Eingaben und extrahieren die Berechnung in Funktionen. Geben Sie dem Programm dann explizite Argumente und ein separates Ausgabeziel. Der Erfolg zeigt sich in einem neuen Prozess mit einem erwarteten Ergebnis; die Zellen in eine Python-Datei zu exportieren genügt nicht, um den Ablauf reproduzierbar zu machen.

7 Min. Lesezeit · Leitfaden für Entwickler

1. Herausfinden, was der Kernel noch weiß

Die Notebook-Datei und der Zustand des Kernels erzählen nicht immer dieselbe Geschichte. Eine Variable kann aus einer gelöschten Zelle stammen, eine Liste mehrfach geändert worden sein, und ein Objekt, das vor der letzten Codeänderung geladen wurde, kann im Speicher bleiben. Die angezeigten Ergebnisse belegen daher nicht, dass die aktuellen Zellen diese Ergebnisse in ihrer sichtbaren Reihenfolge noch erzeugen.

Behalten Sie eine Arbeitskopie, starten Sie den Kernel neu und führen Sie dann die Zellen von Anfang bis Ende aus. Notieren Sie die erste Zelle, die fehlschlägt oder ihr Ergebnis ändert. Suchen Sie die fehlende Abhängigkeit, statt manuell eine Variable aus einer alten Sitzung wieder einzuspeisen. Der Jupyter-Kernel ist ein eigenständiger Prozess; einen Tab zu schließen ist nicht dasselbe wie eine saubere Umgebung neu aufzubauen.

Erfassen Sie auch die äußeren Effekte: Download, Paketinstallation, Verzeichniswechsel, Lesen einer bereits erzeugten Datei und Verwendung einer Umgebungsvariablen. Eine Zelle, deren Ergebnis sofort zu erscheinen scheint, kann einfach eine alte Datei wiederverwenden. Ihr künftiges Skript muss eine gewollte Eingabe von einem Rest aus einem Testlauf unterscheiden können.

2. Den Vertrag schreiben, bevor der Code verschoben wird

Wählen Sie eine einzige Aufgabe zum Extrahieren. Zum Beispiel: eine Datei mit Scores lesen, die Identifikatoren behalten, deren Score einen Schwellenwert erreicht, und das Ergebnis schreiben. Das Beispiel in diesem Leitfaden ist didaktisch, nicht ausgeführt und ohne GPU. Es dient dazu, die Abhängigkeiten einer Ausführung zu zeigen, nicht dazu, eine Messung oder ein mit Kernodeck geliefertes Werkzeug anzukündigen.

Definieren Sie Eingabe, Parameter und Ausgabe präzise genug, um die Transformation überprüfen zu können. Hier ist der Schwellenwert inklusiv: ein Score gleich 0,5 wird behalten. Die Identifikatoren müssen mit ihren Scores verknüpft bleiben, und die Eingabereihenfolge wird beibehalten. Eine vorhandene Ausgabe darf nicht versehentlich durch einen neuen Versuch ersetzt werden.

Dieser Schritt vermeidet eine mehrdeutige Migration: Wenn das Notebook Scores gleich dem Schwellenwert ausschloss, während das Skript sie behält, haben Sie die Berechnung geändert. Entscheiden Sie ausdrücklich, ob es sich um eine Korrektur oder eine Regression handelt. Behalten Sie einen Fall genau an der Grenze, nicht nur zwei weit auseinanderliegende Werte.

Scrollen Sie durch die Tabelle, um alle Spalten zu lesen.
Didaktischer Auswahlvertrag, ohne beanspruchte Ausführung.
ElementWert des BeispielsKriterium
Eingabea: 0,4 ; b: 0,8 ; c: 0,5Drei verschiedene Identifikatoren, Scores bereits zwischen 0 und 1 validiert.
ParameterSchwellenwert 0,5Vergleich größer oder gleich.
Erwartete Ausgabeb, dann cZwei Identifikatoren, ohne Duplikate oder Neuordnung.

3. Eine Funktion extrahieren, die nicht mehr von einer Zelle abhängt

Trennen Sie die Transformation von den Lese- und Schreibvorgängen. Eine Berechnungsfunktion erhält ihre Daten und ihren Schwellenwert und gibt dann die ausgewählten Identifikatoren zurück. Sie greift nicht auf eine globale Variable namens seuil zu, öffnet nicht implizit eine Datei und verändert nicht die Eingabeliste. So können Notebook und Skript genau dieselbe Berechnung aufrufen.

Im Auszug gelten die Daten als bereits gemäß dem vorherigen Vertrag validiert. Die Funktion ist also kein vollständiger Dateivalidator. Diese Grenze ist gewollt: Prüfen Sie die Formate am Programmeingang und halten Sie dann die Transformation leicht verständlich. Das Hinzufügen eines Parameters darf nicht erfordern, die Zelle wiederzufinden, die einen Wert geändert hatte.

Das Notebook kann Ihr Erkundungswerkzeug bleiben. Lassen Sie es diese Funktion importieren, statt eine zweite Kopie zu pflegen. Starten Sie nach einer Änderung des Moduls mit einem frischen Kernel neu, um die beiden Wege zu vergleichen; eine bereits importierte alte Funktion darf die Überprüfung nicht verfälschen.

Didaktische Funktion — in Ihr eigenes Modul einzufügen, hier nicht ausgeführt
def retenir_identifiants(records, seuil):
    return [
        record["id"]
        for record in records
        if record["score"] >= seuil
    ]


if __name__ == "__main__":
    records = [
        {"id": "a", "score": 0.4},
        {"id": "b", "score": 0.8},
        {"id": "c", "score": 0.5},
    ]
    attendu = ["b", "c"]
    obtenu = retenir_identifiants(records, 0.5)
    if obtenu != attendu:
        raise SystemExit("Sélection inattendue")

4. Parameter zu einer sichtbaren Eingabe machen

Der Einstiegspunkt des Skripts verarbeitet die Argumente, validiert die Auswahl und ruft die Funktionen auf. Das Standardmodul argparse beschreibt die Optionen und erzeugt eine Hilfe; es kennt Ihre Geschäftsregeln nicht. Eine syntaktisch akzeptierte Fließkommazahl kann trotzdem außerhalb des zulässigen Intervalls liegen. Der Schwellenwert in diesem Beispiel erfordert daher eine zusätzliche Prüfung.

Legen Sie fest, wie Pfade aufgelöst werden: relativ zum Verzeichnis, aus dem der Befehl gestartet wird, oder zu einem explizit gewählten Projektordner. Verwenden Sie keinen versteckten Verzeichniswechsel mitten in der Berechnung. Der folgende Block zeigt nur die Argumentanalyse; das Lesen der Daten und das Schreiben müssen noch im Leserprogramm angeschlossen werden.

Halten Sie Geheimnisse aus diesen Argumenten heraus. Die teilbaren Parameter beschreiben das Experiment; Zugriffe auf ein Repository oder einen Speicher laufen über einen anderen Kanal. Ein Befehl, der für eine Kollegin nützlich ist, muss kopiert werden können, ohne zugleich ein Token mitzukopieren.

Didaktische Argumentanalyse — nicht ausgeführter Auszug
import argparse
from pathlib import Path


def lire_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument("--input", required=True, type=Path)
    parser.add_argument("--output", required=True, type=Path)
    parser.add_argument("--seuil", required=True, type=float)
    args = parser.parse_args()
    if not 0 <= args.seuil <= 1:
        parser.error("Le seuil doit être compris entre 0 et 1.")
    return args

5. Dem Skript ein Ende und überprüfbare Ausgaben geben

Legen Sie die Orchestrierung in eine Funktion main und lösen Sie sie unter der Bedingung if __name__ == "__main__" aus. So kann das Modul vom Notebook importiert werden, ohne die Verarbeitung sofort zu starten. Die Imports definieren die Werkzeuge; der Haupteinstieg entscheidet, wann gelesen, berechnet und geschrieben wird.

Weisen Sie jedem Lauf einen eigenen Ordner zu. Speichern Sie die tatsächlich verwendeten, nicht sensiblen Parameter und die Identität der Eingabe, und schreiben Sie dann die Ergebnisse. Prüfen Sie für unsere Auswahl die Anzahl der Identifikatoren, ihre Zugehörigkeit zur Eingabe und die Schwellenwertregel. Eine wohlgeformte JSON-Datei kann die falschen Identifikatoren enthalten; ihr bloßes Vorhandensein genügt nicht.

Sehen Sie ein explizites Scheitern vor, wenn die Eingabedatei fehlt oder das Ziel nicht nutzbar ist. Vermeiden Sie es, diese Probleme durch eine leere Liste zu ersetzen: Diese könnte als gültige Auswahl interpretiert werden. Das Programm muss unterscheiden zwischen kein Ergebnis erfüllt den Schwellenwert und kein Ergebnis, weil das Lesen fehlgeschlagen ist.

6. In zwei frischen Ausführungen vergleichen

Verwenden Sie zunächst die drei didaktischen Zeilen. Bei Schwellenwert 0,5 erwarten Sie b und c; bei 0,9 erwarten Sie eine leere Liste; bei 0,4 erwarten Sie die drei Identifikatoren. Diese Antworten ergeben sich aus dem Vertrag und werden hier nicht als ausgeführte Ergebnisse präsentiert. Sie helfen, einen umgekehrten Vergleichsoperator oder eine falsche Reihenfolge zu erkennen.

Führen Sie anschließend Ihr neu gestartetes Notebook und Ihr Skript in einem frischen Prozess mit derselben Eingabe aus. Vergleichen Sie die relevanten Werte, nicht die Screenshots oder die in den Dateien vermerkten Uhrzeiten. Fügen Sie ein zweites repräsentatives Datenset und eine ungültige Eingabe hinzu. Dokumentieren Sie die erwarteten Unterschiede, etwa eine nüchternere Darstellung der Ausgaben.

Eine nbconvert-Konvertierung kann das erste Verschieben der Zellen beschleunigen, doch ihre Magic-Befehle können weiterhin von Jupyter abhängen. Entfernen oder ersetzen Sie notebook-spezifische Anweisungen, unnötige Ausgaben und improvisierte Installationen. Der Export ist ein Ausgangspunkt; der Vergleich aus einem frischen Zustand entscheidet, ob die Migration abgeschlossen ist.

7. Auf die GPU wechseln, ohne versteckten Zustand wieder einzuführen

Sobald der CPU-Ablauf verstanden ist, verbinden Sie das Laden des Modells und das Backend mit derselben expliziten Struktur. Behalten Sie Versionen, Präzision, Eingabe und Ziel bei. Der Wechsel auf die GPU behebt weder eine inkonsistente Zellenreihenfolge noch eine Datei, die aus einem früheren Versuch stammt. Prüfen Sie separat, dass PyTorch tatsächlich auf dem gewählten Gerät rechnen kann.

Wenn zwei Läufe unterschiedliche Werte liefern, unterscheiden Sie vergessenen Zustand, eine Zufallsquelle und die numerischen Grenzen der Berechnung. Ein Seed ist kein universelles Versprechen von Identität zwischen Versionen und Hardware. Verwenden Sie für das unterbrochene Training das spezielle Verfahren für Checkpoints: Dieser Leitfaden wandelt den Einstiegspunkt um, ohne die Zustände von Optimierer oder Generatoren wiederherzustellen.

Das nützliche Ergebnis ist ein Programm, das Sie mit einem einzigen Befehl beschreiben können, samt seiner Voraussetzungen und einer Ergebniskontrolle. Das Notebook bleibt frei zum Erkunden und Visualisieren; es trägt nicht mehr allein die Erinnerung daran, wie die Berechnung gestartet werden muss.

Ihre Fragen

Sollte man Notebooks aufgeben, um ein Projekt reproduzierbar zu machen?

Nein. Behalten Sie das Notebook zum Erkunden und Präsentieren, aber verlagern Sie die wiederverwendete Berechnung in Funktionen oder Module, die auch vom Skript aufgerufen werden. Die Überprüfung muss von einem frischen Kernel und mit expliziten Eingaben ausgehen.

Reicht es, ein Notebook als .py zu exportieren?

Nein. Der Export verschiebt den sichtbaren Code; er behebt weder die Reihenfolge der Abhängigkeiten noch die Effekte bereits ausgeführter Zellen. Magische Befehle können weiterhin Jupyter erfordern. Prüfen Sie das Skript in einem neuen Prozess.

Muss ich byte-identische Dateien erhalten?

Nur wenn dieses Kriterium für Ihr Format relevant ist. Vergleichen Sie zuerst die erwarteten Identifikatoren, Werte und Geschäftsregeln. Datumsangaben oder Metadaten können abweichen, ohne die Berechnung zu verändern; numerische Toleranzen müssen explizit sein.