로컬에서 코드 확인

완료됨

기계 학습 프로젝트에서 코드를 변경할 때마다 코드 및 모델 품질을 확인하려고 합니다.

연속 통합 중에 애플리케이션에 대한 자산을 만들고 확인합니다. 데이터 과학자는 데이터 준비 및 모델 학습에 사용되는 스크립트를 만드는 데 집중할 것입니다. 기계 학습 엔지니어는 파이프라인의 뒷부분에서 스크립트를 사용하여 이러한 프로세스를 자동화합니다.

스크립트를 확인하기 위해 다음과 같은 두 가지 일반적인 작업이 있습니다.

  • 린팅: Python 또는 R 스크립트에 있는 프로그래밍 또는 스타일 오류를 확인합니다.
  • 단위 테스트: 스크립트 콘텐츠의 성능을 확인합니다.

로컬 테스트 및 자동 테스트를 사용한 확인 흐름의 다이어그램

코드를 확인하여 모델을 배포할 때 버그 또는 문제를 방지할 수 있습니다. Visual Studio Code와 같은 IDE에서 Linter 및 단위 테스트를 로컬로 실행하여 코드를 로컬로 확인할 수 있습니다.

Azure Pipelines 또는 GitHub Actions를 사용하여 자동화된 워크플로에서 Linter 및 단위 테스트를 실행할 수도 있습니다.

Visual Studio Code에서 린팅 및 단위 테스트를 실행하는 방법을 알아봅니다.

코드 린팅

코드의 품질은 사용자와 팀이 동의하는 표준에 따라 달라집니다. 합의된 품질이 충족되는지 확인하기 위해 코드가 팀의 표준을 준수하는지 여부를 확인하는 Linter를 실행할 수 있습니다.

사용하는 코드 언어에 따라 코드를 린팅할 수 있는 몇 가지 옵션이 있습니다. 예를 들어 Python을 사용하는 경우 Flake8 또는 Pylint를 사용할 수 있습니다.

Flake8을 사용하여 코드 린트 지정

Visual Studio Code에서 Flake8을 로컬로 사용하려면 다음을 수행합니다.

  1. pip install flake8을 사용하여 Flake8을 설치합니다.
  2. .flake8 구성 파일을 만들고 리포지토리에 파일을 저장합니다.
  3. 설정(Ctrl+,)으로 이동하여 Flake8을 Linter로 사용하도록 Visual Studio Code를 구성합니다.
  4. flake8를 검색합니다.
  5. Python > 린팅 > Flake8을 사용하도록 설정합니다.
  6. Flake8 경로를 .flake8 파일을 저장한 리포지토리의 위치로 설정합니다.

Visual Studio Code에서 Flake8을 구성하는 스크린샷

코드 품질에 대한 팀의 표준을 지정하려면 Flake8 Linter를 구성할 수 있습니다. 표준을 정의하는 일반적인 방법은 코드와 함께 저장된 .flake8 파일을 만드는 것입니다.

.flake8 파일은 먼저 [flake8]을 시작하고 이어서 사용하려는 구성을 시작해야 합니다.

가능한 구성 매개 변수의 전체 목록은 Flake8 설명서에서 찾을 수 있습니다.

예를 들어 모든 줄의 최대 길이가 80자를 초과할 수 없도록 지정하려면 다음 줄을 .flake8 파일에 추가합니다.

[flake8]
max-line-length = 80

Flake8에는 반환할 수 있는 미리 정의된 오류 목록이 있습니다. 또한 PEP 8 스타일 가이드를 기반으로 하는 오류 코드를 사용할 수 있습니다. 예를 들어 들여쓰기 또는 공백의 적절한 사용을 참조하는 오류 코드를 포함할 수 있습니다.

Linter의 일부가 될 오류 코드 집합을 선택(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 Code를 구성한 경우 모든 코드 파일을 열어 린트 결과를 검토할 수 있습니다. 모든 경고 또는 오류에는 밑줄이 표시됩니다. 문제 보기를 선택하여 문제를 검사하고 오류를 이해할 수 있습니다.

Visual Studio Code의 Flake8 결과 스크린샷

Azure Pipelines 또는 GitHub Actions를 사용하여 린트

Azure Pipelines 또는 GitHub Actions를 사용하여 Linter를 자동으로 실행할 수도 있습니다. 두 플랫폼에서 제공하는 에이전트는 다음과 같은 경우 Linter를 실행합니다.

  1. .flake8 구성 파일을 만들고 리포지토리에 파일을 저장합니다.
  2. YAML에서 연속 통합 파이프라인 또는 워크플로를 정의합니다.
  3. 작업 또는 단계로 python -m pip install flake8을 사용하여 Flake8을 설치합니다.
  4. 작업 또는 단계로 flake8 명령을 실행하여 코드를 린팅합니다.

단위 테스트

린팅에서 코드를 작성한 방법을 확인하는 경우 단위 테스트는 코드의 작동 방식을 확인합니다. 단위는 사용자가 만든 코드를 참조합니다. 따라서 단위 테스트를 코드 테스트라고도 합니다.

가장 좋은 방법은 코드가 대부분 함수 외부에 있어야 합니다. 데이터를 준비하거나 모델을 학습하는 함수를 만들었는지 여부입니다. 단위 테스트를 적용할 수 있습니다. 예를 들면 다음과 같습니다.

  • 열 이름이 올바른지 확인합니다.
  • 새 데이터 세트에 대한 모델의 예측 수준을 확인합니다.
  • 예측 수준의 분포를 확인합니다.

Python으로 작업하는 경우 PytestNumpy(Pytest 프레임워크 사용)를 사용하여 코드를 테스트할 수 있습니다. Pytest 작업에 대해 자세히 알아보려면 Pytest를 사용하여 테스트를 작성하는 방법을 알아봅니다.

Visual Studio Code에서 Python 테스트에 대한 자세한 연습을 검토합니다.

다음 함수를 포함하는 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에서 함수를 가져와야 합니다.

tests 폴더에 test_train.py 파일을 만듭니다. Python 코드를 테스트하는 한 가지 방법은 numpy를 사용하는 것입니다. Numpy는 배열, 문자열, 개체 또는 항목을 비교하는 여러 assert 함수를 제공합니다.

예를 들어 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])

UI를 사용하여 Visual Studio Code에서 코드를 테스트하려면 다음을 수행합니다.

  1. 학습 스크립트를 실행하는 데 필요한 모든 라이브러리를 설치합니다.
  2. pytest가 Visual Studio Code 내에 설치되고 사용하도록 설정되어 있는지 확인합니다.
  3. Visual Studio Code용 Python 확장을 설치합니다.
  4. 테스트할 train.py 스크립트를 선택합니다.
  5. 왼쪽 메뉴에서 테스트 탭을 선택합니다.
  6. pytest를 선택하고 테스트 디렉터리를 tests/ 폴더로 설정하여 Python 테스트를 구성합니다.
  7. 재생 단추를 선택하여 모든 테스트를 실행하고 결과를 검토합니다.

Visual Studio Code에서의 성공적인 단위 테스트 결과 스크린샷

Azure DevOps 파이프라인 또는 GitHub 작업에서 테스트를 실행하려면 다음을 수행합니다.

  1. 학습 스크립트를 실행하는 데 필요한 모든 라이브러리가 설치되어 있는지 확인합니다. pip install -r requirements.txt와 함께 모든 라이브러리를 나열하는 requirements.txt를 사용하는 것이 가장 좋습니다.
  2. pip install pytest를 사용하여 pytest 설치
  3. pytest tests/를 사용하여 테스트 실행

테스트 결과는 실행하는 파이프라인 또는 워크플로의 출력에 표시됩니다.

참고

린팅 또는 단위 테스트 중에 오류가 반환되면 CI 파이프라인이 실패할 수 있습니다. 따라서 CI 파이프라인을 트리거하기 전에 먼저 코드를 로컬로 확인하는 것이 좋습니다.