Lokales Überprüfen Ihres Codes
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
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
- Installieren Sie Flake8 mit
pip install flake8
. - Erstellen Sie eine Konfigurationsdatei
.flake8
, und speichern Sie die Datei in Ihrem Repository. - Konfigurieren Sie Flake8 in den Einstellungen von Visual Studio Code (
Ctrl+,
) als Linter. - Suchen Sie nach
flake8
. - Aktivieren Sie „Python > Linten > Flake8 Enabled“ (Flake8 aktiviert).
- Legen Sie den Flake8-Pfad zu dem Speicherort in Ihrem Repository fest, an dem Sie Ihre
.flake8
-Datei gespeichert haben.
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.
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:
- Sie erstellen eine Konfigurationsdatei
.flake8
und speichern die Datei in Ihrem Repository. - Sie definieren die Continuous-Integration-Pipeline oder den Workflow in YAML.
- Installieren Sie Flake8 als Task oder Schritt mit
python -m pip install flake8
. - 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
- Installieren Sie alle erforderlichen Bibliotheken, um das Trainingsskript auszuführen.
- Vergewissern Sie sich, dass
pytest
in Visual Studio Code installiert und aktiviert ist. - Installieren Sie die Python-Erweiterung für Visual Studio Code.
- Wählen Sie das
train.py
-Skript aus, das Sie verwenden möchten. - Klicken Sie im linken Menü auf die Registerkarte Test.
- Konfigurieren Sie Python-Tests, indem Sie pytest auswählen und das Testverzeichnis auf Ihren
tests/
-Ordner festlegen. - Führen Sie alle Tests aus, indem Sie auf die Wiedergabeschaltfläche klicken und die Ergebnisse überprüfen.
So führen Sie den Test in einer Azure DevOps-Pipeline oder GitHub Actions-Aktion aus
- 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 mitpip install -r requirements.txt
aufgeführt werden. - Installieren von
pytest
mitpip install pytest
- 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.