Configurare gli ambienti per lo sviluppo e la produzione
In DevOps per ambiente si intende una raccolta di risorse. Queste risorse vengono usate per distribuire un'applicazione o, con progetti di Machine Learning, per distribuire un modello.
Usare gli ambienti per il recapito continuo
Il numero di ambienti con cui si lavora dipende dall'organizzazione. In genere, esistono almeno due ambienti: sviluppo e produzione. È anche possibile aggiungere altri ambienti tra l'uno e l'altro, ad esempio un ambiente di gestione temporanea o di pre-produzione.
Con il recapito continuo, un tipico approccio è quello di:
- Sperimentare il training del modello nell'ambiente di sviluppo.
- Spostare il modello migliore nell'ambiente di gestione temporanea o pre-produzione per distribuirlo e testarlo.
- Infine rilasciare il modello nell'ambiente di produzione per distribuirlo in modo che gli utenti finali possano utilizzarlo.
Nota
In questo modulo si fa riferimento agli ambienti come sono intesi in DevOps. Si noti che anche Azure Machine Learning usa il termine ambienti per indicare una raccolta di pacchetti Python necessari per eseguire uno script. Questi due concetti di ambienti sono indipendenti tra loro. Vedere altre informazioni sugli ambienti di Azure Machine Learning.
Organizzare gli ambienti di Azure Machine Learning
Quando si implementa MLOps e si lavora con i modelli di Machine Learning su larga scala, è consigliabile usare ambienti separati per ogni fase.
Si supponga che il team usi un ambiente di sviluppo, di pre-produzione e di produzione. Non tutti gli utenti del team devono poter accedere a tutti gli ambienti. I data scientist, ad esempio, possono lavorare solo nell'ambiente di sviluppo con dati non di produzione, mentre i tecnici di Machine Learning possono lavorare sulla distribuzione del modello nell'ambiente di pre-produzione e di produzione con i dati di produzione.
Disponendo di ambienti separati sarà più facile controllare l'accesso alle risorse. Ogni ambiente può quindi essere associato a un'area di lavoro separata di Azure Machine Learning.
In Azure si userà il controllo degli accessi in base al ruolo per concedere ai colleghi il livello di accesso appropriato al subset di risorse con cui devono lavorare.
In alternativa, è possibile usare una sola area di lavoro di Azure Machine Learning. Quando si usa una sola area di lavoro per lo sviluppo e la produzione, si avrà un footprint di Azure minore e un sovraccarico di gestione inferiore. Il controllo degli accessi in base al ruolo si applica tuttavia sia allo sviluppo che alla produzione e quindi gli utenti potrebbero avere un accesso troppo limitato oppure eccessivo alle risorse.
Suggerimento
Altre informazioni sulle procedure consigliate per organizzare le risorse di Azure Machine Learning.
Per usare ambienti diversi per ogni fase dello sviluppo del modello, è possibile specificare come destinazione un ambiente quando si esegue un flusso di lavoro o una pipeline di Azure con GitHub Actions.
Ambienti di Azure DevOps
Per usare gli ambienti in Azure DevOps, prima di tutto è necessario crearli. È quindi possibile specificare l'ambiente in cui si vuole eseguire la distribuzione all'interno di una pipeline di Azure.
- In Azure DevOps espandere il menu Pipeline.
- Seleziona Ambienti.
- Creare un nuovo ambiente.
- Assegnare un nome all'ambiente.
- Scegliere Nessuna per le risorse. Si specifica come destinazione una determinata area di lavoro di Azure Machine Learning nella pipeline stessa.
- Seleziona Crea.
Dopo aver creato gli ambienti in Azure DevOps e aver associato a ogni ambiente un'area di lavoro di Azure Machine Learning diversa, è possibile specificare l'ambiente in cui si vuole eseguire la distribuzione nel file YAML di 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'
Il valore per environment
nel file YAML è dev
, che indica che il training del modello viene eseguito nell'ambiente di sviluppo. Tramite la connessione al servizio, si specifica quale area di lavoro di Azure Machine Learning si vuole usare per il training del modello.
Suggerimento
Altre informazioni su come creare e specificare come destinazione un ambiente con Azure DevOps.
Ambienti di GitHub
Per usare gli ambienti con GitHub Actions, prima di tutto è necessario creare un ambiente. È quindi possibile usare un ambiente nel flusso di lavoro.
Per creare un ambiente all'interno del repository GitHub:
- Passare alla scheda Settings all'interno del repository.
- Seleziona Ambienti.
- Creare un nuovo ambiente.
- Immetti un nome.
- Selezionare Configura ambiente.
Per associare un ambiente a un'area di lavoro di Azure Machine Learning specifica, è possibile creare un segreto dell'ambiente per concedere solo a tale ambiente l'accesso a un'area di lavoro di Azure Machine Learning.
Per usare un ambiente in un flusso di lavoro, è possibile aggiungere l'ambiente in cui si vuole eseguire la distribuzione includendolo nel file 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
Nell'esempio il segreto AZURE_CREDENTIALS
contiene le informazioni sulla connessione all'area di lavoro di Azure Machine Learning usata per questo ambiente.
Suggerimento
Altre informazioni su come creare e usare un ambiente con GitHub Actions.