Lokales Überprüfen Ihres Codes

Abgeschlossen

Wenn Sie Code in Ihrem Machine Learning-Projekt ändern, sollten Sie die Code- und Modellqualität überprüfen.

Bei Continuous Integration erstellen und überprüfen Sie Ressourcen für Ihre Anwendung. Als Data Scientist konzentrieren Sie sich wahrscheinlich auf die Erstellung von Skripts für die Datenaufbereitung und das Modelltraining. Die Machine Learning Engineers verwenden die Skripts später in Pipelines, um diese Prozesse zu automatisieren.

Beim Überprüfen Ihrer Skripts fallen üblicherweise zwei Schritte an:

  • Linting: Prüfung auf programmgesteuerte oder stilistische Fehler in den Python- oder R-Skripts
  • Unittests: Leistungsüberprüfung der Skriptinhalte

Diagram of verification flow with local and automated testing.

Wenn Sie Ihren Code überprüfen, beugen Sie Fehlern oder Problemen bei der Modellbereitstellung vor. Sie können Ihren Code lokal überprüfen, indem Sie Linter und Unittests lokal in einer IDE wie Visual Studio Code ausführen.

Sie können Linter und Unittests auch in einem automatisierten Workflow mit Azure Pipelines oder GitHub Actions ausführen.

Sie erfahren, wie Sie Linten und Unittests in Visual Studio Code ausführen.

Linten Ihres Codes

Die Qualität Ihres Codes hängt von den Standards ab, die Sie und Ihr Team vereinbaren. Um sicherzustellen, dass die vereinbarte Qualität eingehalten wird, können Sie Linter ausführen, die überprüfen, ob der Code den Standards Ihres Teams entspricht.

Je nach verwendeter Programmiersprache gibt es mehrere Optionen für das Linten Ihres Codes. Wenn Sie beispielsweise mit Python arbeiten, können Sie entweder Flake8 oder Pylint verwenden.

Linten Ihres Codes mit Flake8

So verwenden Sie Flake8 lokal mit Visual Studio Code

  1. Installieren Sie Flake8 mit pip install flake8.
  2. Erstellen Sie eine Konfigurationsdatei .flake8, und speichern Sie die Datei in Ihrem Repository.
  3. Konfigurieren Sie Flake8 in den Einstellungen von Visual Studio Code (Ctrl+,) als Linter.
  4. Suchen Sie nach flake8.
  5. Aktivieren Sie „Python > Linten > Flake8 Enabled“ (Flake8 aktiviert).
  6. Legen Sie den Flake8-Pfad zu dem Speicherort in Ihrem Repository fest, an dem Sie Ihre .flake8-Datei gespeichert haben.

Screenshot of configuring Flake8 in Visual Studio Code.

Um anzugeben, wie die Codequalitätsstandards Ihres Teams lauten, können Sie den Flake8-Linter konfigurieren. Eine übliche Methode zum Definieren der Standards besteht darin, eine .flake8-Datei zu erstellen, die mit Ihrem Code gespeichert wird.

Die .flake8-Datei sollte mit [flake8] beginnen, gefolgt von einer der Konfigurationen, die Sie verwenden möchten.

Tipp

Eine vollständige Liste der möglichen Konfigurationsparameter finden Sie in der Flake8-Dokumentation.

Wenn Sie beispielsweise angeben möchten, dass die maximale Länge einer Zeile nicht mehr als 80 Zeichen betragen darf, fügen Sie der .flake8-Datei die folgende Zeile hinzu:

[flake8]
max-line-length = 80

Flake8 verfügt über eine vordefinierte Liste von Fehlermeldungen, die zurückgegeben werden können. Darüber hinaus können Sie Fehlercodes verwenden, die auf dem Stilhandbuch für PEP 8 basieren. Sie können beispielsweise Fehlercodes einschließen, die auf die ordnungsgemäße Verwendung von Einzügen- oder Leerzeichen verweisen.

Sie können entweder Fehlercodes auswählen (select), die Teil des Linter sind, oder aus der Standardliste der Optionen auswählen, welche Fehlercodes ignoriert (ignore) werden sollen.

Aus diesem Grund kann Ihre .flake8-Konfigurationsdatei wie im folgenden Beispiel aussehen:

[flake8]
ignore = 
    W504,
    C901,
    E41
max-line-length = 79
exclude = 
    .git,
    .cache,
per-file-ignores =
    code/__init__.py:D104
max-complexity = 10
import-order-style = pep8

Tipp

Eine Übersicht über Fehlercodes, auf die Sie verweisen können, finden Sie in der Flake8-Fehlerliste.

Wenn Sie Visual Studio Code für das Codelinten konfiguriert haben, können Sie eine beliebige Codedatei öffnen, um die Lintergebnisse zu überprüfen. Alle Warnungen oder Fehler werden unterstrichen. Sie können auf Problem anzeigen klicken, um das Problem zu überprüfen und den Fehler zu verstehen.

Screenshot of Flake 8 results in Visual Studio Code.

Linten mit Azure Pipelines oder GitHub Actions

Sie können den Linter auch automatisch mit Azure Pipelines oder GitHub Actions ausführen. Der von der jeweiligen Plattform bereitgestellte Agent führt den Linter aus, wenn Sie wie folgt vorgehen:

  1. Sie erstellen eine Konfigurationsdatei .flake8 und speichern die Datei in Ihrem Repository.
  2. Sie definieren die Continuous-Integration-Pipeline oder den Workflow in YAML.
  3. Installieren Sie Flake8 als Task oder Schritt mit python -m pip install flake8.
  4. Führen Sie den flake8-Befehl als Task oder Schritt aus, um Linten für Ihren Code auszuführen.

Komponententests

Während beim Linten überprüft wird, wie Sie Code geschrieben haben, überprüfen Unittests, wie Ihr Code funktioniert. Einheiten (engl.: units) beziehen sich auf den Code, den Sie schreiben. Unittests werden daher auch als Codetests bezeichnet.

Eine bewährte Methode besagt, dass Ihr Code hauptsächlich aus Funktionen bestehen sollte, unabhängig davon, ob Sie Funktionen zum Aufbereiten von Daten erstellt haben oder ein Modell trainieren möchten. Sie können Unittests beispielsweise für Folgendes verwenden:

  • Überprüfen der Richtigkeit von Spaltennamen
  • Überprüfen der Vorhersageebene des Modells für neue Datasets
  • Überprüfen der Verteilung der Vorhersageebenen

Wenn Sie mit Python arbeiten, können Sie Ihren Code mit Pytest und Numpy (verwendet das Pytest-Framework) testen. Wenn Sie weitere Informationen zum Arbeiten mit Pytest suchen, sollten Sie sich über das Schreiben von Tests mit Pytest informieren.

Tipp

Eine ausführlichere exemplarische Vorgehensweise finden Sie im Artikel Python-Tests in Visual Studio Code.

Angenommen, Sie haben ein Trainingsskript train.py erstellt, das die folgende Funktion enthält:

# Train the model, return the model
def train_model(data, ridge_args):
    reg_model = Ridge(**ridge_args)
    reg_model.fit(data["train"]["X"], data["train"]["y"])
    return reg_model

Nehmen wir zudem an, dass Sie das Trainingsskript im Verzeichnis src/model/train.py in Ihrem Repository gespeichert haben. Um die train_model-Funktion zu testen, müssen Sie die Funktion aus src.model.train importieren.

Sie erstellen die test_train.py-Datei im Ordner tests. numpy ist eine Möglichkeit, Python-Code zu testen. Numpy bietet mehrere assert-Funktionen zum Vergleichen von Arrays, Zeichenfolgen, Objekten oder Elementen.

Tipp

Machen Sie sich mit den Testrichtlinien für Numpy-Tests und die Numpy-Testunterstützung vertraut.

Um beispielsweise die train_model-Funktion zu testen, können Sie ein kleines Trainingsdataset verwenden und mit assert überprüfen, ob die Vorhersagen ungefähr Ihren vordefinierten Leistungsmetriken entsprechen.

import numpy as np
from src.model.train import train_model

def test_train_model():
    X_train = np.array([1, 2, 3, 4, 5, 6]).reshape(-1, 1)
    y_train = np.array([10, 9, 8, 8, 6, 5])
    data = {"train": {"X": X_train, "y": y_train}}

    reg_model = train_model(data, {"alpha": 1.2})

    preds = reg_model.predict([[1], [2]])
    np.testing.assert_almost_equal(preds, [9.93939393939394, 9.03030303030303])

So testen Sie Ihren Code in Visual Studio Code über die Benutzeroberfläche

  1. Installieren Sie alle erforderlichen Bibliotheken, um das Trainingsskript auszuführen.
  2. Vergewissern Sie sich, dass pytest in Visual Studio Code installiert und aktiviert ist.
  3. Installieren Sie die Python-Erweiterung für Visual Studio Code.
  4. Wählen Sie das train.py-Skript aus, das Sie verwenden möchten.
  5. Klicken Sie im linken Menü auf die Registerkarte Test.
  6. Konfigurieren Sie Python-Tests, indem Sie pytest auswählen und das Testverzeichnis auf Ihren tests/-Ordner festlegen.
  7. Führen Sie alle Tests aus, indem Sie auf die Wiedergabeschaltfläche klicken und die Ergebnisse überprüfen.

Screenshot of successful unit test results in Visual Studio Code.

So führen Sie den Test in einer Azure DevOps-Pipeline oder GitHub Actions-Aktion aus

  1. Vergewissern Sie sich, dass alle für die Ausführung des Trainingsskripts erforderlichen Bibliotheken installiert sind. Verwenden Sie idealerweise eine requirements.txt-Datei, in der alle Bibliotheken mit pip install -r requirements.txt aufgeführt werden.
  2. Installieren von pytest mit pip install pytest
  3. Führen Sie die Tests mit pytest tests/ aus.

Die Ergebnisse der Tests werden in der Ausgabe der Pipeline oder des Workflows angezeigt, die bzw. den Sie ausführen.

Hinweis

Wenn während des Lintens oder der Unittests ein Fehler zurückgegeben wird, kann die CI-Pipeline fehlschlagen. Daher empfiehlt es sich, Ihren Code zunächst lokal zu überprüfen, bevor Sie die CI-Pipeline auslösen.