Místní ověření kódu
Pokaždé, když změníte jakýkoli kód v projektu strojového učení, chcete ověřit kvalitu kódu a modelu.
Během kontinuální integrace vytvoříte a ověříte prostředky pro vaši aplikaci. Jako datový vědec se pravděpodobně zaměříte na vytváření skriptů používaných k přípravě dat a trénování modelu. Technik strojového učení používá skripty později v kanálech k automatizaci těchto procesů.
K ověření skriptů existují dvě běžné úlohy:
- Lintování: Zkontrolujte programové nebo stylistické chyby ve skriptech Pythonu nebo R.
- Testování jednotek: Zkontrolujte výkon obsahu skriptů.
Ověřením kódu zabráníte chybám nebo problémům při nasazení modelu. Kód můžete ověřit místně spuštěním linterů a testů jednotek místně v integrovaném vývojovém prostředí, jako je Visual Studio Code.
Pomocí Azure Pipelines nebo GitHub Actions můžete také spouštět lintery a testy jednotek v automatizovaném pracovním postupu.
Naučíte se spouštět testy lintování a jednotek v editoru Visual Studio Code.
Lint váš kód
Kvalita kódu závisí na standardech, na které vy a váš tým souhlasíte. Pokud chcete zajistit splnění schválené kvality, můžete spustit lintery, které zkontrolují, jestli kód odpovídá standardům týmu.
V závislosti na jazyce kódu, který používáte, existuje několik možností, jak kód lintovat. Pokud například pracujete s Pythonem, můžete použít Flake8 nebo Pylint.
Použití Flake8 k lint vašemu kódu
Místní použití Flake8 se sadou Visual Studio Code:
- Nainstalujte Flake8 s
pip install flake8
. - Vytvořte konfigurační soubor
.flake8
a uložte ho do úložiště. - Nakonfigurujte Visual Studio Code tak, aby jako linter používal Flake8 tak, že přejdete do nastavení (
Ctrl+,
). - Vyhledejte
flake8
. - Povolte Python > Linting > Flake8 Enabled.
- Nastavte cestu Flake8 k umístění v úložišti, kam jste soubor uložili
.flake8
.
Pokud chcete určit, jaké jsou standardy vašeho týmu pro kvalitu kódu, můžete nakonfigurovat linter Flake8. Běžnou metodou definování standardů je vytvoření .flake8
souboru, který je uložený s vaším kódem.
Soubor .flake8
by měl začínat [flake8]
, následovaný některou z konfigurací, které chcete použít.
Tip
Úplný seznam možných parametrů konfigurace najdete v dokumentaci k Flake8.
Pokud například chcete zadat, že maximální délka libovolného řádku nesmí být delší než 80 znaků, přidáte do .flake8
souboru následující řádek:
[flake8]
max-line-length = 80
Flake8 má předdefinovaný seznam chyb, které může vrátit. Kromě toho můžete použít kódy chyb, které jsou založené na průvodci stylem PEP 8. Můžete například zahrnout kódy chyb, které odkazují na správné použití odsazení nebo prázdných znaků.
Můžete vybrat saduselect
kódů chyb, které budou součástí linteru, nebo vybrat kódy chyb, které se mají ignorovat (ignore
) z výchozího seznamu možností.
V důsledku toho může konfigurační .flake8
soubor vypadat jako v následujícím příkladu:
[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
Tip
Přehled kódů chyb, na které se můžete podívat, najdete v seznamu chyb Flake8.
Když jste nakonfigurovali Visual Studio Code tak, aby lintoval váš kód, můžete otevřít libovolný soubor kódu a zkontrolovat výsledky lintu. Všechna upozornění nebo chyby budou podtržené. Výběrem možnosti Zobrazit problém můžete problém zkontrolovat, abyste pochopili chybu.
Lint s Azure Pipelines nebo GitHub Actions
Linter můžete také spustit automaticky pomocí Azure Pipelines nebo GitHub Actions. Agent poskytovaný některou platformou spustí linter, když:
- Vytvořte konfigurační soubor
.flake8
a uložte ho do úložiště. - Definujte kanál nebo pracovní postup kontinuální integrace v YAML.
- Jako úkol nebo krok nainstalujte Flake8 s
python -m pip install flake8
. - Jako úkol nebo krok spusťte
flake8
příkaz pro lintování kódu.
Testy jednotky
Kde linting ověřuje, jak jste kód napsali, testy jednotek kontrolují, jak váš kód funguje. Jednotky odkazují na kód, který vytvoříte. Testování částí se proto označuje také jako testování kódu.
Osvědčeným postupem je, že váš kód by měl existovat převážně mimo funkce. Ať už jste vytvořili funkce pro přípravu dat, nebo pro trénování modelu. Testování jednotek můžete použít například na:
- Zkontrolujte, jestli jsou názvy sloupců správné.
- Zkontrolujte úroveň predikce modelu u nových datových sad.
- Zkontrolujte rozdělení úrovní predikce.
Při práci s Pythonem můžete k otestování kódu použít Pytest a Numpy (který používá architekturu Pytest). Další informace o práci s Pytestem najdete v tématu Psaní testů pomocí Pytestu.
Tip
Projděte si podrobnější návod k testování Pythonu v editoru Visual Studio Code.
Představte si, že jste vytvořili trénovací skript train.py
, který obsahuje následující funkci:
# 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
Předpokládejme, že jste v adresáři v úložišti src/model/train.py
uložili trénovací skript. Chcete-li funkci otestovat train_model
, je nutné importovat funkci z src.model.train
.
Soubor vytvoříte test_train.py
ve tests
složce. Jedním ze způsobů, jak otestovat kód Pythonu, je použít numpy
. Numpy nabízí několik assert
funkcí pro porovnání polí, řetězců, objektů nebo položek.
Tip
Přečtěte si další informace o pokynech k testování při použití testování Numpy a podpoře testů Numpy.
Například k otestování train_model
funkce můžete použít malou trénovací datovou sadu a ověřit assert
, jestli jsou předpovědi téměř stejné jako předdefinované metriky výkonu.
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])
Testování kódu v editoru Visual Studio Code pomocí uživatelského rozhraní:
- Nainstalujte všechny potřebné knihovny ke spuštění trénovacího skriptu.
- Ujistěte se
pytest
, že je v editoru Visual Studio Code nainstalovaný a povolený. - Nainstalujte rozšíření Pythonu pro Visual Studio Code.
-
train.py
Vyberte skript, který chcete otestovat. - V nabídce vlevo vyberte kartu Testování.
- Nakonfigurujte testování Pythonu tak , že vyberete pytest a nastavíte testovací adresář do složky
tests/
. - Spusťte všechny testy tak, že vyberete tlačítko přehrát a zkontrolujete výsledky.
Spuštění testu v kanálu Azure DevOps nebo v akci GitHubu:
- Ujistěte se, že jsou nainstalované všechny potřebné knihovny pro spuštění trénovacího skriptu. V ideálním případě použijte
requirements.txt
výpis všech knihoven spip install -r requirements.txt
- Instalace
pytest
pomocípip install pytest
- Spuštění testů pomocí
pytest tests/
Výsledky testů se zobrazí ve výstupu kanálu nebo pracovního postupu, který spustíte.
Poznámka:
Pokud se při lintování nebo testování jednotek vrátí chyba, kanál CI může selhat. Před aktivací kanálu CI je proto lepší nejprve ověřit kód místně.