Creare componenti
I componenti consentono di creare script riutilizzabili che possono essere facilmente condivisi tra gli utenti nella stessa area di lavoro di Azure Machine Learning. È anche possibile usare i componenti per creare una pipeline di Azure Machine Learning.
Usa un componente
Esistono due motivi principali per cui si usano i componenti:
- Per creare una pipeline.
- Per condividere codice pronto per l'uso.
Creare componenti quando si prepara il codice sperimentale per i flussi di lavoro di produzione ripetibili.
All'interno di Azure Machine Learning, è possibile creare un componente per archiviare codice nel linguaggio preferito all'interno dell'area di lavoro. In teoria, si progetta un componente per eseguire un'azione specifica pertinente per il flusso di lavoro di Machine Learning.
Ad esempio, un componente può contenere uno script di Python che normalizza i dati, esegue il training di un modello di Machine Learning o lo valuta.
I componenti possono essere facilmente condivisi con altri utenti di Azure Machine Learning, che possono riutilizzarli nelle loro pipeline di Azure Machine Learning.
Crea un componente
Un componente è costituito da tre parti:
- Metadati: includono il nome del componente, la versione e così via.
- Interfaccia: include i parametri di input previsti (ad esempio un set di dati o un iperparametro) e l'output previsto (ad esempio metriche e artefatti).
- Comando, codice e ambiente: specificano come eseguire il codice.
Per creare un componente, sono necessari due file:
- Uno script che contiene il flusso di lavoro da eseguire.
- Un file YAML per definire i metadati, l'interfaccia e il comando, codice e ambiente del componente.
È possibile creare il file YAML oppure utilizzare la funzione command_component() come decoratore per creare il file YAML.
Suggerimento
Questa unità è incentrata sulla definizione di un componente in YAML. In alternativa, informazioni su come creare componenti usando command_component().
Ad esempio, è possibile avere uno script prep.py di Python che prepara i dati rimuovendo i valori mancanti e normalizzando i dati:
# import libraries
import argparse
import pandas as pd
import numpy as np
from pathlib import Path
from sklearn.preprocessing import MinMaxScaler
# setup arg parser
parser = argparse.ArgumentParser()
# add arguments
parser.add_argument("--input_data", dest='input_data',
type=str)
parser.add_argument("--output_data", dest='output_data',
type=str)
# parse args
args = parser.parse_args()
# read the data
df = pd.read_csv(args.input_data)
# remove missing values
df = df.dropna()
# normalize the data
scaler = MinMaxScaler()
num_cols = ['feature1','feature2','feature3','feature4']
df[num_cols] = scaler.fit_transform(df[num_cols])
# save the data as a csv
output_df = df.to_csv(
(Path(args.output_data) / "prepped-data.csv"),
index = False
)
Per creare un componente per lo prep.py script, definire un file YAML denominato prep.yml:
$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
name: prep_data
display_name: Prepare training data
version: 1
type: command
inputs:
input_data:
type: uri_file
outputs:
output_data:
type: uri_file
code: ./src
environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest
command: >-
python prep.py
--input_data ${{inputs.input_data}}
--output_data ${{outputs.output_data}}
Si noti che il file YAML fa riferimento allo script prep.py archiviato nella cartella src. È possibile caricare il componente con il codice seguente:
from azure.ai.ml import load_component
parent_dir = ""
loaded_component_prep = load_component(source=parent_dir + "./prep.yml")
Dopo aver caricato il componente, è possibile usarlo in una pipeline o registrarlo.
Registrare un componente
Per usare un componente locale in una pipeline, tenere insieme lo script e la definizione YAML. Per rendere il componente accessibile ad altri utenti dell'area di lavoro, registrarlo nell'area di lavoro Azure Machine Learning.
È possibile registrare un componente con il codice seguente:
prep = ml_client.components.create_or_update(loaded_component_prep)