Einrichten von Umgebungen für Entwicklung und Produktion

Abgeschlossen

Bei DevOps bezieht sich eine Umgebung auf eine Sammlung von Ressourcen. Diese Ressourcen werden zur Bereitstellung einer Anwendung oder bei Machine Learning-Projekten zur Bereitstellung eines Modells verwendet.

Verwenden von Umgebungen für Continuous Delivery

Mit wie vielen Umgebungen Sie arbeiten, hängt von Ihrer Organisation ab. In der Regel gibt es mindestens zwei Umgebungen: Entwicklungsumgebung oder Dev und Produktionsumgebung oder Prod. Außerdem können Sie dazwischen Umgebungen wie Staging oder Vorproduktion (Pre-Prod) einrichten.

Ein typischer Ansatz für Continuous Delivery umfasst Folgendes:

  1. Experimentieren Sie mit dem Trainieren von Modellen in der Entwicklungsumgebung.
  2. Verschieben Sie das beste Modell in die Umgebung Staging oder Vorproduktion, um das Modell bereitzustellen und zu testen.
  3. Schließlich geben Sie das Modell für die Produktionsumgebungfrei, um es bereitzustellen, sodass die Endbenutzer es verwenden können.

Hinweis

In diesem Modul beziehen wir uns auf die DevOps-Interpretation von Umgebungen. Beachten Sie, dass Azure Machine Learning auch den Begriff „Umgebungen“ verwendet, um eine Sammlung von Python-Paketen zu beschreiben, die zum Ausführen eines Skripts benötigt werden. Diese beiden Konzepte von Umgebungen sind unabhängig voneinander. Erfahren Sie mehr über Azure Machine Learning-Umgebungen.

Organisieren von Azure Machine Learning-Umgebungen

Wenn Sie MLOps implementieren und im großen Stil mit Machine Learning-Modellen arbeiten, ist es eine bewährte Methode, mit getrennten Umgebungen für verschiedene Stages zu arbeiten.

Stellen Sie sich vor, Ihr Team verwendet eine Entwicklungs-, Vorproduktions- und Produktionsumgebung. Nicht jeder in Ihrem Team sollte Zugriff auf alle Umgebungen haben. Wissenschaftliche Fachkräfte für Daten dürfen nur in der Entwicklungsumgebung mit Nicht-Produktionsdaten arbeiten, während Techniker für maschinelles Lernen an der Bereitstellung des Modells in der Vorproduktions- und Produktionsumgebung mit Produktionsdaten arbeiten.

Durch getrennte Umgebungen lässt sich der Zugriff auf Ressourcen leichter kontrollieren. Jede Umgebung kann dann einem separaten Azure Machine Learning-Arbeitsbereich zugeordnet werden.

Diagramm mit mehreren eingerichteten Umgebungen

Innerhalb von Azure verwenden Sie die rollenbasierte Zugriffssteuerung (RBAC), um Ihren Kollegen den richtigen Zugriff auf die Teilmenge der Ressourcen zu gewähren, mit denen sie arbeiten müssen.

Alternativ können Sie auch nur einen einzelnen Azure Machine Learning-Arbeitsbereich verwenden. Wenn Sie einen Arbeitsbereich für Entwicklung und Produktion verwenden, haben Sie einen geringeren Azure-Speicherbedarf und weniger Verwaltungsaufwand. RBAC gilt jedoch sowohl für die Entwicklungs- als auch für die Produktionsumgebung, was bedeuten kann, dass Sie den Betroffenen zu wenig oder zu viel Zugriff auf Ressourcen gewähren.

Für die Arbeit mit Umgebungen für verschiedene Stages der Modellentwicklung können Sie eine Umgebung anvisieren, wenn Sie eine Azure-Pipeline oder einen Workflow mit GitHub Actions ausführen.

Azure DevOps-Umgebungen

Für die Arbeit mit Umgebungen in Azure DevOps müssen Sie zunächst Umgebungen erstellen. Dann können Sie angeben, für welche Umgebung Sie innerhalb einer Azure-Pipeline bereitstellen möchten.

  1. Erweitern Sie in Azure DevOps das Menü Pipelines.
  2. Wählen Sie Umgebungen aus.
  3. Erstellen Sie eine neue Umgebung.
  4. Geben Sie Ihrer Umgebung einen Namen.
  5. Wählen Sie Keine für Ressourcen aus. Sie zielen auf einen bestimmten Azure Machine Learning-Arbeitsbereich in der Pipeline selbst ab.
  6. Klicken Sie auf Erstellen.

Screenshot: Erstellen einer neuen Umgebung in Azure DevOps

Nachdem Sie die Umgebungen in Azure DevOps erstellt und verschiedene Azure Machine Learning-Arbeitsbereiche den einzelnen Umgebungen zugeordnet haben, können Sie in der YAML-Datei von Azure Pipelines angeben, in welcher Umgebung Sie die Bereitstellung vornehmen möchten:

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'

Der Wert für environment in der YAML-Datei lautet dev, was bedeutet, dass das Modell in der Entwicklungsumgebung trainiert wurde. Über die Dienstverbindung geben Sie an, welchen Azure Machine Learning-Arbeitsbereich Sie für das Modelltraining verwenden möchten.

GitHub-Umgebungen

Damit Sie Umgebungen mit GitHub Actions verwenden können, müssen Sie zunächst eine Umgebung erstellen. Anschließend können Sie eine Umgebung in Ihrem Workflow verwenden.

So erstellen Sie eine Umgebung in Ihrem GitHub-Repository (Repo):

  1. Wechseln Sie in Ihrem Repository zur Registerkarte Einstellungen.
  2. Wählen Sie Umgebungen aus.
  3. Erstellen Sie eine neue Umgebung.
  4. Geben Sie einen Namen ein.
  5. Wählen Sie Configure environment (Umgebung konfigurieren) aus.

Screenshot: Erstellen einer neuen Umgebung in GitHub

Um eine Umgebung einem bestimmten Azure Machine Learning-Arbeitsbereich zu zuzuordnen, können Sie ein Umgebungsgeheimnis erstellen, um nur dieser Umgebung Zugriff auf einen Azure Machine Learning-Arbeitsbereich zu erteilen.

Zur Verwendung einer Umgebung in einem Workflow können Sie die Umgebung, in der Sie die Bereitstellung vornehmen möchten, in die YAML-Datei einbeziehen:

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

In dem Beispiel enthält das AZURE_CREDENTIALS-Geheimnis die Verbindungsinformationen zum Azure Machine Learning-Arbeitsbereich, der für diese Umgebung verwendet wird.