Weryfikowanie kodu lokalnie
Za każdym razem, gdy zmienisz dowolny kod w projekcie uczenia maszynowego, chcesz zweryfikować kod i jakość modelu.
Podczas ciągłej integracji tworzysz i weryfikujesz zasoby dla aplikacji. Jako analityk danych prawdopodobnie skupisz się na tworzeniu skryptów używanych do przygotowywania danych i trenowania modelu. Inżynier uczenia maszynowego używa skryptów w dalszej części potoków do automatyzacji tych procesów.
Aby zweryfikować skrypty, istnieją dwa typowe zadania:
- Linting: sprawdź błędy programowe lub stylistyczne w skryptach języka Python lub R.
- Testowanie jednostkowe: sprawdź wydajność zawartości skryptów.
Weryfikując kod, zapobiegasz usterce lub problemom podczas wdrażania modelu. Kod można zweryfikować lokalnie, uruchamiając narzędzia linters i testy jednostkowe lokalnie w środowisku IDE, na przykład Visual Studio Code.
Można również uruchamiać linters i testy jednostkowe w zautomatyzowanym przepływie pracy za pomocą usługi Azure Pipelines lub GitHub Actions.
Dowiesz się, jak uruchamiać testy lintingu i testów jednostkowych w programie Visual Studio Code.
Lint your code (Lint your code)
Jakość kodu zależy od standardów, na które zgadza się Twój zespół. Aby upewnić się, że uzgodniona jakość jest zgodna, można uruchamiać linters, które będą sprawdzać, czy kod jest zgodny ze standardami zespołu.
W zależności od używanego języka kodu istnieje kilka opcji lint kodu. Jeśli na przykład pracujesz z językiem Python, możesz użyć platformy Flake8 lub Pylint.
Używanie platformy Flake8 do lint kodu
Aby używać platformy Flake8 lokalnie z programem Visual Studio Code:
- Zainstaluj platformę Flake8 za pomocą polecenia
pip install flake8
. - Utwórz plik
.flake8
konfiguracji i zapisz plik w repozytorium. - Skonfiguruj program Visual Studio Code, aby używać platformy Flake8 jako narzędzia linter, przechodząc do ustawień (
Ctrl+,
). - Wyszukaj ciąg
flake8
. - Włącz platformę Linting > Flake8 języka Python>.
- Ustaw ścieżkę Flake8 na lokalizację w repozytorium, w którym został zapisany
.flake8
plik.
Aby określić standardy zespołu dotyczące jakości kodu, można skonfigurować linter Flake8. Typową metodą definiowania standardów jest utworzenie pliku przechowywanego .flake8
przy użyciu kodu.
Plik .flake8
powinien zaczynać się od [flake8]
, a następnie dowolnego z konfiguracji, których chcesz użyć.
Napiwek
Pełną listę możliwych parametrów konfiguracji można znaleźć w dokumentacji platformy Flake8.
Jeśli na przykład chcesz określić, że maksymalna długość dowolnego wiersza nie może przekraczać 80 znaków, dodaj następujący wiersz do .flake8
pliku:
[flake8]
max-line-length = 80
Platforma Flake8 ma wstępnie zdefiniowaną listę błędów, które może zwrócić. Ponadto można używać kodów błędów opartych na przewodniku stylu PEP 8. Można na przykład uwzględnić kody błędów odwołujące się do odpowiedniego użycia wcięcia lub białych spacji.
Możesz wybrać (select
) zestaw kodów błędów, które będą częścią linteru, lub wybrać kody błędów do zignorowania (ignore
) z domyślnej listy opcji.
W związku .flake8
z tym plik konfiguracji może wyglądać podobnie do następującego przykładu:
[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
Napiwek
Aby zapoznać się z omówieniem kodów błędów, które można znaleźć, zapoznaj się z listą błędów flake8
Po skonfigurowaniu programu Visual Studio Code pod kątem lint kodu możesz otworzyć dowolny plik kodu, aby przejrzeć wyniki lint. Wszelkie ostrzeżenia lub błędy zostaną podkreślone. Możesz wybrać pozycję Wyświetl problem , aby sprawdzić problem, aby zrozumieć błąd.
Lint with Azure Pipelines or GitHub Actions
Możesz również automatycznie uruchamiać linter za pomocą usługi Azure Pipelines lub GitHub Actions. Agent dostarczony przez jedną platformę uruchomi linter podczas wykonywania następujących czynności:
- Utwórz plik
.flake8
konfiguracji i zapisz plik w repozytorium. - Zdefiniuj potok ciągłej integracji lub przepływ pracy w języku YAML.
- Jako zadanie lub krok zainstaluj platformę Flake8 za pomocą polecenia
python -m pip install flake8
. - Jako zadanie lub krok uruchom
flake8
polecenie , aby utworzyć lint kodu.
Testy jednostkowe
Gdzie linting sprawdza, jak napisał kod, testy jednostkowe sprawdzają, jak działa kod. Jednostki odwołują się do tworzonego kodu. W związku z tym testowanie jednostkowe jest również nazywane testowaniem kodu.
Najlepszym rozwiązaniem jest istnienie kodu głównie poza funkcjami. Niezależnie od tego, czy utworzono funkcje do przygotowywania danych, czy trenowania modelu. Możesz na przykład zastosować testowanie jednostkowe:
- Sprawdź, czy nazwy kolumn mają rację.
- Sprawdź poziom przewidywania modelu dla nowych zestawów danych.
- Sprawdź rozkład poziomów przewidywania.
Podczas pracy z językiem Python możesz przetestować kod przy użyciu narzędzi Pytest i Numpy (które używają struktury Pytest). Aby dowiedzieć się więcej na temat pracy z narzędziem Pytest, dowiedz się, jak pisać testy za pomocą narzędzia Pytest.
Napiwek
Zapoznaj się z bardziej szczegółowym przewodnikiem testowania języka Python w programie Visual Studio Code.
Załóżmy, że utworzono skrypt train.py
trenowania, który zawiera następującą funkcję:
# 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
Załóżmy, że skrypt trenowania został zapisany w katalogu src/model/train.py
w repozytorium. Aby przetestować train_model
funkcję, należy zaimportować funkcję z src.model.train
pliku .
Plik zostanie test_train.py
utworzony w folderze tests
. Jednym ze sposobów testowania kodu w języku Python jest użycie polecenia numpy
. Narzędzie Numpy oferuje kilka assert
funkcji do porównywania tablic, ciągów, obiektów lub elementów.
Napiwek
Dowiedz się więcej na temat wytycznych dotyczących testowania podczas korzystania z testowania Numpy i obsługi testów numpy.
Na przykład aby przetestować train_model
funkcję, możesz użyć małego zestawu danych trenowania i użyć assert
go do sprawdzenia, czy przewidywania są prawie równe wstępnie zdefiniowanym metryce wydajności.
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])
Aby przetestować kod w programie Visual Studio Code przy użyciu interfejsu użytkownika:
- Zainstaluj wszystkie niezbędne biblioteki, aby uruchomić skrypt szkoleniowy.
- Upewnij się, że
pytest
jest zainstalowana i włączona w programie Visual Studio Code. - Zainstaluj rozszerzenie języka Python dla programu Visual Studio Code.
train.py
Wybierz skrypt, który chcesz przetestować.- Wybierz kartę Testowanie z menu po lewej stronie.
- Skonfiguruj testowanie języka Python, wybierając pozycję pytest i ustawiając katalog testowy na folder
tests/
. - Uruchom wszystkie testy, wybierając przycisk odtwarzania i przeglądając wyniki.
Aby uruchomić test w potoku usługi Azure DevOps lub akcji usługi GitHub:
- Upewnij się, że wszystkie niezbędne biblioteki są zainstalowane w celu uruchomienia skryptu szkoleniowego. Najlepiej używać
requirements.txt
listy wszystkich bibliotek zpip install -r requirements.txt
- Instalowanie
pytest
za pomocą poleceniapip install pytest
- Uruchamianie testów za pomocą polecenia
pytest tests/
Wyniki testów zostaną wyświetlone w danych wyjściowych uruchomionego potoku lub przepływu pracy.
Uwaga
Jeśli podczas lintingu lub testowania jednostkowego zostanie zwrócony błąd, potok ciągłej integracji może zakończyć się niepowodzeniem. Dlatego lepiej jest najpierw zweryfikować kod lokalnie przed wyzwoleniem potoku ciągłej integracji.