GitHub Actions 사용하여 모델 배포, 승격 및 롤백

Completed

팁

자세한 내용은 텍스트 및 이미지 탭을 참조하세요.

모델을 등록하고 프로덕션 승격을 GitHub 환경으로 보호하면 모든 사용자를 테스트되지 않은 버전에 노출하지 않고도 예측을 제공할 준비가 된 것입니다.

엔드포인트 및 배포 만들기

관리형 온라인 엔드포인트는 Proseware의 예약 시스템과 같은 클라이언트 애플리케이션이 예측을 가져오기 위해 호출하는 안정적인 HTTPS 주소를 제공합니다. 엔드포인트 자체는 모델을 실행하지 않습니다. 하나 이상의 배포, 각각 컴퓨팅 구성과 특정 등록된 모델 버전을 페어링하고, MLflow 모델의 경우 자동 생성된 환경 및 채점 스크립트에서 실제 서비스를 수행합니다. 엔드포인트 URL을 안정적으로 유지하면서 그 아래에 배포를 바꾸면 노쇼 모델이 다시 학습되고 다시 배포되더라도 일정 시스템을 변경할 필요가 없습니다.

새 버전을 안전하게 승격

엔드포인트는 한 번에 둘 이상의 배포를 호스트할 수 있으며 각 배포가 수신하는 들어오는 트래픽의 비율을 제어합니다. 이 설정을 사용하면 프로덕션 소프트웨어 변경을 롤아웃하는 것과 동일한 방식으로 새 모델 버전을 롤아웃할 수 있습니다. 즉, 현재 버전과 함께 0% 트래픽과 함께 새 버전을 배포하고, 예상대로 작동하는지 확인한 다음, 트래픽을 점진적으로 전환합니다. 일반적으로 청록색 배포라고 하는 접근 방식입니다. 새 버전이 성능이 저조하면 엔드포인트를 중단하는 대신 이전 배포로 트래픽을 다시 이동합니다.

팁

온라인 엔드포인트에 대한 안전한 롤아웃에 대해 자세히 알아봅니다.

트래픽을 이동하기 전에 테스트

새 배포가 라이브 트래픽을 수신하기 전에 해당 배포에 직접 요청을 보내고 해당 응답을 예상과 비교합니다. 새 배포가 이러한 점검을 통과한 후에만 트래픽 할당을 늘립니다. 배포가 준비 상태에 도달하는 데 몇 분 정도 걸릴 수 있으므로 자동화된 테스트는 요청을 보내기 전에 배포가 프로비전이 완료될 때까지 기다려야 합니다.

GitHub Actions 사용하여 파이프라인 자동화

재학습된 모든 모델에 대해 수동으로 등록, 배포 및 테스트를 반복해도 크기가 조정되지 않으므로 Proseware 팀은 GitHub Actions 및 Azure Machine Learning CLI(v2)를 사용하여 파이프라인을 자동화합니다. Azure 워크플로를 인증하는 현재 권장되는 방법은 OIDC(OpenID Connect) 페더레이션 자격 증명으로, 클라이언트 비밀을 리포지토리 비밀로 저장하는 대신 GitHub Actions 수명이 짧은 액세스 토큰을 요청할 수 있도록 합니다. Microsoft Entra 애플리케이션에서 사용자의 리포지토리와 브랜치로 범위가 한정된 페더레이션 자격 증명을 구성한 다음, 워크플로에서 azure/login 액션을 사용해 이를 참조합니다.

permissions:
  id-token: write
  contents: read

env:
  RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
  WORKSPACE_NAME: ${{ vars.AZURE_WORKSPACE_NAME }}
  ENDPOINT_NAME: ${{ vars.AZURE_ENDPOINT_NAME }}

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Sign in to Azure
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - name: Register and deploy the model
        run: |
          az extension add -n ml -y
          az ml model create \
            --file model.yml \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME
          az ml online-deployment create \
            --name green \
            --endpoint-name $ENDPOINT_NAME \
            --file green-deployment.yml \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME
      - name: Test the new deployment
        run: |
          az ml online-endpoint invoke \
            --name $ENDPOINT_NAME \
            --deployment-name green \
            --request-file sample-request.json \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME
      - name: Send limited traffic to the new deployment
        run: |
          az ml online-endpoint update \
            --name $ENDPOINT_NAME \
            --traffic "blue=90 green=10" \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME

워크플로의 permissions 블록은 작업에 Azure에서 토큰을 요청하는 데 필요한 id-token 권한을 부여합니다. 이 단계에서는 azure/login 인증된 Azure CLI 세션에 대한 토큰을 교환합니다. 직접 테스트가 성공하면 워크플로는 10개의% 트래픽을 새 green 배포로 보냅니다. 프로덕션 동작이 승인 기준을 충족한 후에만 수준을 더 올리세요.

이전 모델로 롤백

새 모델이 관찰 기간을 완료할 때까지 이전 blue 배포를 사용할 수 있도록 유지합니다. 승격 후 오류 또는 허용되지 않는 예측이 발생하면 모든 트래픽을 blue(으)로 다시 라우팅하세요:

az ml online-endpoint update \
  --name $ENDPOINT_NAME \
  --traffic "blue=100 green=0" \
  --resource-group $RESOURCE_GROUP \
  --workspace-name $WORKSPACE_NAME

트래픽을 변경하면 엔드포인트 URL이 유지되고 엔드포인트를 삭제하고 다시 만드는 것보다 더 빠른 복구가 제공됩니다. 트래픽이 이전 모델로 돌아간 후, 사용자를 해당 green 배포에 노출하지 않은 채 그 배포를 조사합니다. 새 모델이 필요한 관찰 기간에 대한 수용 조건을 충족한 후에만 이전 배포를 삭제합니다.

팁

OpenID Connect를 사용하여 GitHub Actions Azure 연결하는 방법에 대해 자세히 알아봅니다.