Перевірка коду локально

Завершено

Щоразу, коли ви змінюєте будь-який код у проекті машинного навчання, потрібно перевірити якість коду та моделі.

Під час безперервної інтеграції ви створюєте та перевіряєте активи для своєї програми. Як вчений, імовірно, ви зосередитеся на створенні сценаріїв, які використовуються для підготовки даних і навчання моделі. Інженер машинного навчання використовує сценарії пізніше в трубопроводах, щоб автоматизувати ці процеси.

Щоб перевірити сценарії, можна виконати два типових завдання:

  • Linting: перевірте наявність програмних або стилістичних помилок у сценаріях Python або R.
  • перевірки одиниці: перевірте продуктивність вмісту сценаріїв.

схему потоку перевірки за допомогою локального та автоматизованого тестування.

Перевіряючи код, ви запобігаєте виникненню помилок або проблем під час розгортання моделі. Ви можете перевірити код локально, запустивши лінтери та блок-тести локально в IDE, наприклад Visual Studio Code.

Ви також можете запустити лінтери та блок-тести в автоматизованому робочому циклі за допомогою Azure Pipelines або GitHub Actions.

Ви дізнаєтеся, як запустити лінгові та блок-тести в коді Visual Studio.

Зв'язати код

Якість коду залежить від стандартів, які ви та ваша команда приймаєте. Щоб забезпечити дотримання узгодженої якості, можна запускати лінтери, які перевірятимуть відповідність коду стандартам команди.

Залежно від мови коду, який ви використовуєте, існує кілька способів зв'язування коду. Наприклад, якщо ви працюєте з Python, можна скористатися Flake8 або Pylint.

Використання Функції "Флейк8" для зв'яза коду

Щоб використовувати Флейк8 локально з кодом Visual Studio:

  1. Інсталюйте Флейк8 за допомогою pip install flake8.
  2. Створіть файл конфігурації .flake8 та збережіть файл у репозиці.
  3. Налаштуйте код Visual Studio, щоб використовувати Флейк8 як лінтер, перейшовши до настройок (Ctrl+,).
  4. Знайдіть flake8.
  5. Увімкнути python > Linting > Flake8 Enabled.
  6. Установіть шлях Флейк8 до розташування в репозиці, де збережено файл .flake8.

screenshot of configuring Flake8 in Visual Studio Code.

Щоб указати стандарти вашої команди для якості коду, можна настроїти лінтер Flake8. Загальний спосіб визначити стандарти – створити файл .flake8, який зберігається разом із кодом.

Файл .flake8 має починатися з [flake8], а потім будь-якої з потрібних конфігурацій.

Кінчик

Повний список можливих параметрів конфігурації можна знайти в документації Flake8.

Наприклад, якщо потрібно вказати, що максимальна довжина будь-якого рядка не може перевищувати 80 символів, до файлу .flake8 додасться такий рядок:

[flake8]
max-line-length = 80

Флейк8 має попередньо визначений список помилок, які він може повернути. Крім того, ви можете використовувати коди помилок на основі посібника зі стилю PEP 8. Наприклад, можна додати коди помилок, які стосуються правильного використання відступів або пробілів.

Ви можете вибрати (select) набір кодів помилок, які будуть частиною лінтера, або вибрати коди помилок, які слід ігнорувати (ignore) у стандартному списку параметрів.

Тому файл конфігурації .flake8 може мати такий вигляд:

[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

Кінчик

Огляд кодів помилок, які можна переглянути, див. в списку помилок Flake8

Якщо ви налаштували код Visual Studio наворотити код, ви можете відкрити будь-який кодовий файл, щоб переглянути результати ворсу. Усі попередження або помилки буде підкреслено. Ви можете вибрати Переглянути проблему, щоб перевірити проблему, щоб зрозуміти помилку.

знімок екрана: Флейк 8 містить результати в коді Visual Studio.

Lint за допомогою Azure Pipelines або GitHub Actions

Ви також можете автоматично запустити лінтер за допомогою Azure Pipelines або GitHub Actions. Агент, наданий будь-якою платформою, буде запускати лінтер, коли ви:

  1. Створіть файл конфігурації .flake8 та збережіть файл у репозиці.
  2. Визначте безперервний інтеграційний канал або робочий цикл у YAML.
  3. Щоб виконати завдання або крок, інсталюйте програму Flake8 за допомогою python -m pip install flake8.
  4. Для виконання завдання або кроку виконайте команду flake8, щоб створити зв'flake8 код.

Перевірка одиниці

Де лінгтування перевіряє, як ви написали код, блок перевіряє, як працює ваш код. Одиниці – це код, який ви створюєте. Таким чином, тестування одиниць також відоме як перевірка коду.

Якнайкраще ваш код має існувати в основному поза функціями. Незалежно від того, чи створено функції для підготовки даних або навчання моделі. Ви можете застосувати перевірку одиниць вимірювання до, наприклад:

  • Переконайтеся, що імена стовпців правильні.
  • Перевірте рівень прогнозу моделі на нових наборах даних.
  • Перевірте розподіл рівнів прогнозування.

Під час роботи з Python можна використовувати Pytest та Numpy (яка використовує інфраструктуру Pytest) для перевірки коду. Щоб дізнатися більше про роботу з Pytest, дізнайтеся, як писати тести за допомогоюPytest.

Кінчик

Перегляньте докладніші покрокові інструкції з тестування Python у Visual Studio Code.

Уявіть, що ви створили train.pyнавчального сценарію , який містить таку функцію:

# 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

Припустімо, що ви зберегли сценарій навчання в каталозі src/model/train.py в репозиці. Щоб перевірити функцію train_model, потрібно імпортувати функцію з src.model.train.

Файл test_train.py створюється в папці tests. Один зі способів перевірити код Python – використовувати numpy. Numpy пропонує кілька функцій assert для порівняння масивів, рядків, об'єктів або елементів.

Кінчик

Дізнайтеся більше про рекомендації з тестування під час використаннятестування Numpy та підтримки тестів Numpy.

Наприклад, щоб перевірити функцію train_model, можна скористатися невеликим набором навчальних даних і скористатися assert, щоб перевірити, чи прогнозування майже рівні попередньо визначеним показникам продуктивності.

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])

Щоб перевірити код у коді Visual Studio за допомогою інтерфейсу користувача, виконайте такі дії:

  1. Інсталюйте всі необхідні бібліотеки, щоб запустити навчальний сценарій.
  2. Переконайтеся, що pytest інстальовано та ввімкнуто в коді Visual Studio.
  3. Інсталюйте розширення Python для коду Visual Studio.
  4. Виберіть сценарій train.py, який потрібно перевірити.
  5. У меню ліворуч виберіть вкладку Тестування.
  6. Налаштуйте тестування Python, вибравши pytest і настроївши тестовий каталог у папку tests/.
  7. Щоб виконати всі перевірки, натисніть кнопку відтворення та перегляньте результати.

screenshot of successful unit test results in Visual Studio Code.

Щоб виконати перевірку в azure DevOps Pipeline або GitHub:

  1. Переконайтеся, що для запуску навчального сценарію інстальовано всі необхідні бібліотеки. В ідеалі використовуйте requirements.txt зі списком усіх бібліотек із pip install -r requirements.txt
  2. Інсталяція pytest за допомогою pip install pytest
  3. Запуск тестів за допомогою pytest tests/

Результати тестів відображатимуться у виводі запущеного каналу або робочого циклу.

Примітка

Якщо під час перевірки ворсу або одиниці, повертається помилка, може виникнути помилка каналу CI. Тому краще спочатку перевірити код локально, перш ніж ініціювати канал CI.