기계 학습용 DevOps

완료됨

DevOps 및 MLOps

DevOps는 DevOps란?에서 도노반 브라운에 의해 최종 사용자에게 지속적인 가치 전달을 가능하게 하는 사람, 프로세스 및 제품의 통합으로 설명됩니다.

기계 학습 모델을 사용할 때 사용하는 방법을 이해하려면 몇 가지 필수 DevOps 원칙을 추가로 살펴보겠습니다.

DevOps는 강력하고 재현 가능한 애플리케이션을 만드는 개발자를 안내하는 도구와 사례의 조합입니다. DevOps 원칙을 사용하는 목표는 최종 사용자에게 신속하게 가치를 제공하는 것입니다.

데이터 변환 파이프라인 또는 실시간 애플리케이션에 기계 학습 모델을 통합하여 더 쉽게 가치를 제공하려는 경우 DevOps 원칙을 구현하면 도움이 됩니다. DevOps에 대해 알아보면 작업을 구성하고 자동화하는 데 도움이 됩니다.

최종 사용자에게 가치를 제공하기 위해 강력하고 재현 가능한 모델을 만들고, 배포하고, 모니터링하는 것은 기계 학습 작업 (MLOps)의 목표입니다.

세 가지 프로세스의 MLOps 개요

기계 학습 작업(MLOps)에 대해 이야기할 때마다 결합하려는 세 가지 프로세스가 있습니다.

  • ML 에는 데이터 과학자가 담당하는 모든 기계 학습 워크로드가 포함됩니다. 데이터 과학자는 다음을 수행합니다.

    • EDA(예비 데이터 분석)
    • 기능 엔지니어링
    • 모델 학습 및 튜닝
  • DEV 는 다음을 포함하는 소프트웨어 개발을 나타냅니다.

    1. 계획: 모델의 요구 사항 및 성능 메트릭을 정의합니다.
    2. 만들기: 모델 학습 및 채점 스크립트를 만듭니다.
    3. 확인: 코드 및 모델 품질을 확인합니다.
    4. 패키지: 솔루션을 준비하여 배포를 준비합니다.
  • OPS 는 작업을 참조하며 다음을 포함합니다.

    1. 릴리스: 프로덕션에 모델을 배포합니다.
    2. 구성: IaC(Infrastructure as Code)를 사용하여 인프라 구성을 표준화합니다.
    3. 모니터링: 메트릭을 추적하고 모델 및 인프라가 예상대로 수행되는지 확인합니다.

MLOps에 필수적인 몇 가지 DevOps 원칙을 살펴보겠습니다.

DevOps 원칙

DevOps의 핵심 원칙 중 하나는 자동화입니다. 작업을 자동화하여 새 모델을 프로덕션에 더 빠르게 배포하려고 합니다. 자동화를 통해 환경에서 안정적이고 일관된 재현 가능한 모델도 만들 수 있습니다.

특히 시간이 지남에 따라 정기적으로 모델을 개선하려는 경우 자동화를 통해 필요한 모든 작업을 신속하게 수행하여 프로덕션 환경에서 모델이 항상 최상의 성능을 발휘하도록 할 수 있습니다.

자동화를 달성하기 위한 주요 개념은 지속적인 통합지속적인 업데이트를 의미하는 CI/CD입니다.

연속 통합

연속 통합은 만들기확인 작업을 다룹니다. 목표는 코드를 만들고 자동화된 테스트를 통해 코드와 모델의 품질을 확인하는 것입니다.

MLOps를 사용하면 연속 통합에 다음이 포함될 수 있습니다.

  • Jupyter Notebook의 예비 코드를 Python 또는 R 스크립트로 리팩터링합니다.
  • Python 또는 R 스크립트에서 프로그래밍 또는 스타일 오류를 확인하는 Linting입니다. 예를 들어 스크립트의 줄에 80자 미만이 포함되어 있는지 확인합니다.
  • 스크립트 콘텐츠의 성능을 확인하기 위한 단위 테스트입니다. 예를 들어 모델이 테스트 데이터 세트에 대한 정확한 예측을 생성하는지 확인합니다.

Linting 및 단위 테스트를 수행하려면 Azure DevOpsAzure Pipelines 또는 GitHub Actions와 같은 자동화 도구를 사용할 수 있습니다.

지속적 배포

모델을 학습하는 데 사용되는 Python 또는 R 스크립트의 코드 품질을 확인한 후에는 모델을 프로덕션으로 가져오려고 합니다. 지속적인 업데이트 에는 모델을 프로덕션에 배포하는 데 필요한 단계가 포함되며, 가능한 한 자동화하는 것이 좋습니다.

프로덕션 환경에 모델을 배포하려면 먼저 모델을 패키지하고 사전 프로덕션 환경에 배포하려고 합니다. 사전 프로덕션 환경에서 모델을 준비하면 모든 것이 예상대로 작동하는지 확인할 수 있습니다.

준비 단계에 모델을 배포하는 데 성공하고 오류 없이 모델을 프로덕션 환경에 배포하도록 승인할 수 있습니다.

Python 또는 R 스크립트를 공동 작업하여 모델을 학습시키고 각 환경에 모델을 배포하는 데 필요한 코드를 사용하려면 소스 제어를 사용합니다.

소스 제어

소스 제어 (또는 버전 제어)는 Git 기반 리포지토리를 사용하여 가장 일반적으로 수행됩니다. 리포지토리는 소프트웨어 프로젝트에 관련된 모든 파일을 저장할 수 있는 위치를 나타냅니다.

기계 학습 프로젝트를 사용하면 각 프로젝트에 대한 리포지토리가 있을 수 있습니다. 리포지토리에는 Jupyter Notebook, 학습 스크립트, 채점 스크립트 및 파이프라인 정의가 포함됩니다.

비고

바람직하게는 리포지토리에 학습 데이터를 저장 하지 않는 것이 좋습니다. 대신 학습 데이터는 데이터베이스 또는 데이터 레이크에 저장되고 Azure Machine Learning은 데이터 저장소를 사용하여 데이터 원본에서 직접 데이터를 검색 합니다.

Git 기반 리포지토리는 Azure DevOps의 Azure Repos 또는 GitHub 리포지토리를 사용하여 사용할 수 있습니다.

리포지토리에서 모든 관련 코드를 호스팅하여 코드에 대해 쉽게 공동 작업하고 팀 구성원이 변경한 내용을 추적할 수 있습니다. 각 멤버는 자체 버전의 코드에서 작업할 수 있습니다. 이전 변경 내용을 모두 볼 수 있으며, 변경 내용이 주 리포지토리에 커밋되기 전에 검토할 수 있습니다.

프로젝트의 어느 부분에서 작업할지 결정하려면 민첩한 계획을 사용하는 것이 좋습니다.

Agile 계획

모델을 프로덕션에 신속하게 배포하려는 경우 민첩한 계획이 기계 학습 프로젝트에 적합합니다.

Agile 계획은 작업을 스프린트로 격리하는 것을 의미합니다. 스프린트는 프로젝트 목표의 일부를 달성하려는 짧은 기간입니다.

목표는 코드를 신속하게 개선하기 위해 스프린트를 계획하는 것입니다. 데이터 및 모델 탐색에 사용되는 코드인지 또는 프로덕션에 모델을 배포하는 데 사용되는 코드인지 여부입니다.

기계 학습 모델 학습은 끝이 없는 프로세스일 수 있습니다. 예를 들어 데이터 과학자는 데이터 드리프트로 인해 모델의 성능을 개선해야 할 수 있습니다. 또는 새 비즈니스 요구 사항에 맞게 모델을 조정해야 합니다.

모델 학습에 너무 많은 시간을 소비하지 않도록 민첩한 계획은 프로젝트의 범위를 지정하고 단기 결과에 동의하여 모든 사람을 정렬하는 데 도움이 될 수 있습니다.

작업을 계획하려면 Azure DevOps의 Azure Boards 또는 GitHub 문제와 같은 도구를 사용할 수 있습니다.

IaC(Infrastructure as Code)

기계 학습 프로젝트에 DevOps 원칙을 적용하면 강력한 재현 가능한 솔루션을 만들려고 합니다. 즉, 사용자가 수행하거나 만드는 모든 작업을 반복하고 자동화할 수 있어야 합니다.

모델을 학습하고 배포하는 데 필요한 인프라를 반복하고 자동화하기 위해 팀은 IaC(Infrastructure as Code)를 사용합니다. Azure에서 모델을 학습하고 배포하는 경우 IaC는 코드의 프로세스에 필요한 모든 Azure 리소스를 정의하고 코드가 리포지토리에 저장됨을 의미합니다.

팁 (조언)

DevOps 변환 과정에서 Microsoft Learn 모듈을 탐색하여 DevOps에 대해 더 잘 알아봅니다.