개발 및 프로덕션 환경 설정

완료됨

DevOps 내에서 환경은 리소스 컬렉션을 나타냅니다. 이러한 리소스는 모델을 배포하기 위해 애플리케이션 또는 기계 학습 프로젝트와 함께 배포하는 데 사용됩니다.

지속적인 업데이트를 위해 환경 사용

작업하는 환경의 개수는 조직에 따라 달라집니다. 일반적으로 개발 또는 개발프로덕션 또는 프로덕션이라는 두 가지 이상의 환경이 있습니다. 또한 준비 또는 사전 프로덕션(사전 프로덕션)과 같은 환경을 사이에 추가할 수 있습니다.

지속적인 업데이트를 사용하는 일반적인 방법은 다음과 같습니다.

  1. 개발 환경에서 모델 학습을 실험합니다.
  2. 최상의 모델을 준비 또는 사전 프로덕션 환경으로 이동하여 모델을 배포하고 테스트합니다.
  3. 마지막으로 최종 사용자가 모델을 사용할 수 있도록 모델을 프로덕션 환경에 릴리스하여 모델을 배포합니다.

참고

이 모듈에서는 환경의 DevOps 해석을 참조합니다. 또한 Azure Machine Learning은 용어 환경을 사용하여 스크립트를 실행하는 데 필요한 Python 패키지 컬렉션을 설명합니다. 이러한 두 가지 환경 개념은 서로 독립적입니다. Azure Machine Learning 환경에 대해 자세히 알아봅니다.

Azure Machine Learning 환경 구성

MLOps를 구현하고 대규모 기계 학습 모델을 사용하는 경우 여러 단계에 대해 별도의 환경으로 작업하는 것이 가장 좋습니다.

팀의 이미징은 개발, 사전 프로덕션 및 프로덕션 환경을 사용합니다. 팀의 모든 사용자가 모든 환경에 액세스할 수 있는 것은 아닙니다. 데이터 과학자는 비프로덕션 데이터를 사용하여 개발 환경 내에서만 작업할 수 있으며, 기계 학습 엔지니어는 프로덕션 데이터를 사용하여 사전 프로덕션 및 프로덕션 환경에서 모델을 배포하는 작업을 수행합니다.

별도의 환경을 사용하면 리소스에 대한 액세스를 더 쉽게 제어할 수 있습니다. 그런 다음 각 환경을 별도의 Azure Machine Learning 작업 영역에 연결할 수 있습니다.

여러 환경 설정의 다이어그램

Azure 내에서 RBAC(역할 기반 액세스 제어)를 사용하여 동료에게 작업해야 하는 리소스의 하위 집합에 대한 적절한 수준의 액세스를 제공합니다.

또는 하나의 Azure Machine Learning 작업 영역만 사용할 수 있습니다. 개발 및 프로덕션에 하나의 작업 영역을 사용하는 경우 Azure 공간이 줄어들고 관리 오버헤드가 줄어듭니다. 그러나 RBAC는 개발 및 프로덕션 모두에 적용되며, 이는 리소스에 대한 액세스 권한이 너무 적거나 너무 많은 사용자에게 제공된다는 것을 의미할 수 있습니다.

모델 개발의 여러 단계에 대한 환경을 사용하려면 Azure Pipeline을 실행할 때 환경을 대상으로 지정하거나 GitHub Actions로 워크플로를 대상으로 지정할 수 있습니다.

Azure DevOps 환경

Azure DevOps 환경에서 작업하려면 먼저 환경을 만들어야 합니다. 그런 다음, Azure Pipeline 내에서 배포할 환경을 지정할 수 있습니다.

  1. Azure DevOps 내에서 파이프라인 메뉴를 확장합니다.
  2. 환경을 선택합니다.
  3. 새 환경을 만듭니다.
  4. 환경에 이름을 지정합니다.
  5. 리소스에 대해 없음 을 선택합니다. 파이프라인 자체에서 특정 Azure Machine Learning 작업 영역을 대상으로 지정합니다.
  6. 만들기를 선택합니다.

Azure DevOps에서 새 환경 만들기의 스크린샷

Azure DevOps 환경을 만들고 각 환경과 서로 다른 Azure Machine Learning 작업 영역을 연결한 후에는 Azure Pipelines YAML 파일에 배포할 환경을 지정할 수 있습니다.

trigger: 
- main

stages:
- stage: deployDev
  displayName: 'Deploy to development environment'
  jobs:
    - deployment: publishPipeline
      displayName: 'Model Training'
      pool:
        vmImage: 'Ubuntu-18.04'
      environment: dev
      strategy:
       runOnce:
         deploy:
          steps:
          - template: aml-steps.yml
            parameters:
              serviceconnectionname: 'spn-aml-workspace-dev'

YAML 파일의 environment 값은 dev이며, 이는 모델이 개발 환경에서 학습되었음을 나타냅니다. 서비스 연결을 통해 모델 학습에 사용할 Azure Machine Learning 작업 영역을 지정합니다.

GitHub 환경

GitHub Actions 환경을 사용하려면 먼저 환경을 만들어야 합니다. 그런 다음 워크플로에서 환경을 사용할 수 있습니다.

GitHub 리포지토리(리포지토리) 내에서 환경을 만들려면 다음을 수행합니다.

  1. 리포지토리 내의 설정 탭으로 이동합니다.
  2. 환경을 선택합니다.
  3. 새 환경을 만듭니다.
  4. 이름을 입력합니다.
  5. 환경 구성을 선택합니다.

GitHub에서 새 환경 만들기의 스크린샷

환경을 특정 Azure Machine Learning 작업 영역과 연결하려면 환경 비밀을 만들어 해당 환경만 Azure Machine Learning 작업 영역에 액세스할 수 있도록 할 수 있습니다.

워크플로에서 환경을 사용하려면 YAML 파일에 포함시켜 배포할 환경을 추가할 수 있습니다.

name: Train model

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    environment:
        name: dev 
    steps:
    - name: check out repo
      uses: actions/checkout@v2
    - name: install az ml extension
      run: az extension add -n ml -y
    - name: azure login
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}
    - name: set current directory
      run: cd src
    - name: run pipeline
      run: az ml job create --file src/aml_service/pipeline-job.yml --resource-group dev-ml-rg --workspace-name dev-ml-ws

이 예제에서 AZURE_CREDENTIALS 비밀은 이 환경에 사용되는 Azure Machine Learning 작업 영역에 대한 연결 정보를 포함합니다.