Pipeline di Azure Machine Learning

Completato

In qualità di data scientist, si lavorerà principalmente con Azure Machine Learning per eseguire il training dei modelli e gestirli. Dopo la sperimentazione, è necessario convertire il lavoro in codice Python di produzione per consentire l'automazione con Azure (DevOps) Pipelines o GitHub Actions.

Eseguire un esperimento in Azure Machine Learning.

Azure Machine Learning fornisce un set di funzionalità che consentono di organizzare il lavoro. Con Azure Machine Learning è ad esempio possibile:

  • Registrare set di dati per riutilizzare facilmente i dati archiviati in un data lake.
  • Eseguire il training di un modello su istanze o cluster di calcolo remoti, a seconda dei requisiti.
  • Tenere traccia di tutti gli script eseguiti con esperimenti per confrontare facilmente il lavoro.
  • Registrare i modelli sottoposti a training e distribuire un modello per l'utilizzo in batch o in tempo reale.

La maggior parte del lavoro come data scientist consisterà in attività di sperimentazione: test di configurazioni diverse per eseguire il training di un modello e revisione di metriche delle prestazioni per decidere quale modello distribuire nell'ambiente di produzione.

Supponendo di eseguire l'esperimento in un notebook Jupyter (file .ipynb), sarà necessario convertire l'esperimento nel codice Python di produzione eseguendo queste operazioni:

  • Rimozione di tutto il codice non essenziale.
  • Refactoring del codice in funzioni.
  • Combinazione di funzioni correlate in script Python (file .py).
  • Creazione di unit test per ogni script Python.
  • Creare una pipeline per raggruppare gli script in un flusso di lavoro che può essere automatizzato.

Quando il codice è pronto per l'ambiente di produzione, è possibile automatizzare l'esecuzione degli script con le pipeline di Azure Machine Learning.

Creare pipeline di Azure Machine Learning

Il concetto di pipeline è implementato in vari strumenti e offre spesso la possibilità di raggruppare le attività in un determinato ordine. Il vantaggio principale di una pipeline è dato dalla possibilità di pianificarla o attivarla per l'esecuzione.

Una pipeline di Azure Machine Learning viene creata all'interno dell'area di lavoro di Azure Machine Learning. Per creare una pipeline, è possibile definire i passaggi tramite script Python.

Facoltativamente, è possibile creare una pipeline con i componenti di Azure Machine Learning. Quando si crea un componente, lo script viene archiviato con metadati, come l'ambiente necessario nell'area di lavoro di Azure Machine Learning. I componenti possono essere condivisi e usati da chiunque si trovi all'interno della stessa area di lavoro, consentendo così agli altri utenti di creare rapidamente nuove pipeline, in base al proprio lavoro.

Per creare una pipeline utilizzabile per l'automazione, è consigliabile definire un processo di pipeline in YAML che sia attivabile tramite un comando dell'interfaccia della riga di comando (v2).

Nel file YAML che definisce la pipeline devono essere specificate le informazioni seguenti:

  • Che cosa eseguire: i passaggi definiti come script o componenti Python.
  • Come eseguirlo: gli input o gli output previsti per i passaggi.
  • Dove eseguirlo: la risorsa di calcolo necessaria per eseguire il codice (in genere un cluster di calcolo di Azure Machine Learning).

Ad esempio, una pipeline che accetta dati non elaborati come input, li trasforma ed esegue il training di un modello può essere definita in un file pipeline-job.yml:

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: nyc-taxi-pipeline-example
experiment_name: nyc-taxi-pipeline-example
jobs:

  transform-job:
    type: command
      raw_data: 
          type: uri_folder 
          path: ./data
    outputs:
      transformed_data:
        mode: rw_mount
    code: src/transform
    environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest
    compute: azureml:cpu-cluster
    command: >-
      python transform.py 
      --raw_data ${{inputs.raw_data}} 
      --transformed_data ${{outputs.transformed_data}}
  
  train-job:
    type: command
    inputs:
      training_data: ${{parent.jobs.transform-job.outputs.transformed_data}}
    outputs:
      model_output: 
        mode: rw_mount
      test_data: 
        mode: rw_mount
    code: src/train
    environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest
    compute: azureml:cpu-cluster
    command: >-
      python train.py 
      --training_data ${{inputs.training_data}} 
      --test_data ${{outputs.test_data}} 
      --model_output ${{outputs.model_output}}

Per eseguire la pipeline all'interno di Azure Machine Learning, usare il comando dell'interfaccia della riga di comando seguente:

az ml job create --file pipeline-job.yml

Al termine dell'esecuzione, è possibile esaminare la pipeline e i passaggi eseguiti nell'area di lavoro di Azure Machine Learning.

Quando si convertono i carichi di lavoro di Machine Learning in script Python e si raggruppano le attività all'interno di una pipeline, il modello è pronto per la produzione. La definizione della pipeline in un file YAML consente di automatizzare il training e la ripetizione del training attivando l'esecuzione della pipeline con l'interfaccia della riga di comando (v2). È possibile eseguire un comando dell'interfaccia della riga di comando, che fa riferimento al file YAML della pipeline, da Azure (DevOps) Pipelines o GitHub Actions.