Configurer des environnements pour le développement et la production

Effectué

Dans DevOps, un environnement fait référence à une collection de ressources. Ces ressources sont utilisées pour déployer une application ou avec des projets de Machine Learning pour déployer un modèle.

Utiliser des environnements pour la livraison continue

Le nombre d’environnements que vous utilisez dépend de votre organisation. En règle générale, il existe au moins deux environnements : développement ou dev et production ou prod. De plus, vous pouvez ajouter des environnements entre eux comme un environnement de intermédiaire ou de pré-production (pré-prod).

Avec la livraison continue, une approche classique consiste à :

  1. Expérimenter avec un modèle de formation dans l’environnement de développement.
  2. Déplacer le meilleur modèle vers l’environnement intermédiaire ou pré-prod pour déployer et tester le modèle.
  3. Enfin, libérer le modèle dans l’environnement de production pour déployer le modèle afin que les utilisateurs finaux puissent le consommer.

Notes

Dans ce module, nous faisons référence à l’interprétation DevOps des environnements. Notez qu’Azure Machine Learning utilise également le terme « environnements » pour décrire une collection de packages Python nécessaires à l’exécution d’un script. Ces deux concepts d’environnements sont indépendants l’un de l’autre. En savoir plus sur les environnements Azure Machine Learning.

Organiser des environnements Azure Machine Learning

Lorsque vous implémentez MLOps et que vous utilisez des modèles Machine Learning à grande échelle, il est recommandé d’utiliser des environnements séparés pour différentes phases.

Imaginez que votre équipe utilise un environnement de développement, de pré-production et de production. Tous les membres de votre équipe ne doivent pas avoir accès à tous les environnements. Les scientifiques des données peuvent uniquement travailler dans l’environnement de développement avec des données hors production, tandis que les ingénieurs Machine Learning travaillent sur le déploiement du modèle dans les environnements de pré-production et de production avec des données de production.

La présence d’environnements séparés facilite le contrôle de l’accès aux ressources. Chaque environnement peut ensuite être associé à un espace de travail Azure Machine Learning distinct.

Diagramme montrant plusieurs environnements configurés.

Dans Azure, vous allez utiliser le contrôle d’accès en fonction du rôle (RBAC) pour accorder aux collègues le niveau d’accès approprié au sous-ensemble des ressources dont ils ont besoin pour travailler.

Vous pouvez également utiliser un seul espace de travail Azure Machine Learning. Lorsque vous utilisez un espace de travail pour le développement et la production, vous disposez d’une plus petite empreinte Azure et d’une surcharge de gestion moindre. Toutefois, RBAC s’applique à la fois au développement et à la production, ce qui peut signifier que vous accordez aux personnes trop peu ou trop d’accès aux ressources.

Pour utiliser des environnements pour différentes phases du développement d’un modèle, vous pouvez cibler un environnement lors de l’exécution d’un pipeline Azure ou d’un workflow avec GitHub Actions.

Environnements Azure DevOps

Pour utiliser des environnements dans Azure DevOps, vous devez d’abord créer des environnements. Vous pouvez ensuite spécifier l’environnement à déployer dans un pipeline Azure.

  1. Dans Azure DevOps, développez le menu Pipelines.
  2. Sélectionnez Environnements.
  3. Créez un nouvel environnement.
  4. Donnez un nom à votre environnement.
  5. Choisissez Aucun pour les ressources. Vous ciblez un espace de travail Azure Machine Learning spécifique dans le pipeline lui-même.
  6. Sélectionnez Create (Créer).

Capture d’écran montrant la création d’un environnement dans Azure DevOps.

Après avoir créé les environnements dans Azure DevOps et disposer d’espaces de travail Azure Machine Learning différents associés à chaque environnement, vous pouvez spécifier l’environnement à déployer dans le fichier YAML Azure Pipelines :

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'

La valeur de environment dans le fichier YAML est dev, indiquant que le modèle est entraîné dans l’environnement de développement. Par le biais de la connexion de service, vous spécifiez l’espace de travail Azure Machine Learning que vous souhaitez utiliser pour l’entraînement du modèle.

Environnements GitHub

Pour utiliser des environnements avec GitHub Actions, vous devez d’abord créer un environnement. Ensuite, vous pouvez utiliser un environnement dans votre workflow.

Pour créer un environnement au sein de votre dépôt GitHub :

  1. Accédez à l’onglet Paramètres dans votre dépôt.
  2. Sélectionnez Environnements.
  3. Créez un nouvel environnement.
  4. Entrez un nom.
  5. Sélectionnez Configurer l’environnement.

Capture d’écran montrant la création d’un environnement dans GitHub.

Pour associer un environnement à un espace de travail Azure Machine Learning spécifique, vous pouvez créer un secret d’environnement pour accorder à cet environnement l’accès à un espace de travail Azure Machine Learning uniquement.

Pour utiliser un environnement dans un workflow, vous pouvez ajouter l’environnement sur lequel vous souhaitez déployer en l’incluant dans le fichier 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

Dans l’exemple, le secret AZURE_CREDENTIALS contient les informations de connexion à l’espace de travail Azure Machine Learning utilisé pour cet environnement.