Skapa komponenter

Slutförd

Med komponenter kan du skapa återanvändbara skript som enkelt kan delas mellan användare på samma Azure Machine Learning-arbetsyta. Du kan också använda komponenter för att skapa en Azure Machine Learning-pipeline.

Använda en komponent

Det finns två huvudsakliga orsaker till att du använder komponenter:

  • Att bygga en pipeline.
  • Att dela kod som är färdig att använda.

Skapa komponenter när du förbereder experimentell kod för repeterbara produktionsarbetsflöden.

I Azure Machine Learning kan du skapa en komponent för att lagra kod (på önskat språk) på arbetsytan. Vi rekommenderar att du utformar en komponent för att utföra en specifik åtgärd som är relevant för ditt maskininlärningsarbetsflöde.

En komponent kan till exempel bestå av ett Python-skript som normaliserar dina data, tränar en maskininlärningsmodell eller utvärderar en modell.

Komponenter kan enkelt delas till andra Azure Machine Learning-användare som kan återanvända komponenter i sina egna Azure Machine Learning-pipelines.

Skärmbild av tillgängliga komponenter på Azure Machine Learning-arbetsytan.

Skapa en komponent

En komponent består av tre delar:

  • Metadata: Innehåller komponentens namn, version osv.
  • Gränssnitt: Innehåller de förväntade indataparametrarna (till exempel en datamängd eller hyperparameter) och förväntade utdata (till exempel mått och artefakter).
  • Kommando, kod och miljö: Anger hur koden ska köras.

För att skapa en komponent behöver du två filer:

  • Ett skript som innehåller det arbetsflöde som du vill köra.
  • En YAML-fil för att definiera komponentens metadata, gränssnitt och kommando, kod och miljö.

Du kan skapa YAML-filen eller använda command_component() funktionen som dekoratör för att skapa YAML-filen.

Tips

Den här lektionen fokuserar på att definiera en komponent i YAML. Du kan också lära dig hur du skapar komponenter med hjälp av command_component().

Du kan till exempel ha ett Python-skript prep.py som förbereder data genom att ta bort saknade värden och normalisera data:

# 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
)

Om du vill skapa en komponent för skriptet prep.py definierar du en YAML-fil med namnet 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}}

Observera att YAML-filen refererar till skriptet prep.py , som lagras i src mappen. Du kan läsa in komponenten med följande kod:

from azure.ai.ml import load_component
parent_dir = ""

loaded_component_prep = load_component(source=parent_dir + "./prep.yml")

När du har läst in komponenten kan du använda den i en pipeline eller registrera komponenten.

Registrera en komponent

Om du vill använda en lokal komponent i en pipeline håller du ihop skriptet och YAML-definitionen. Om du vill göra komponenten tillgänglig för andra arbetsyteanvändare registrerar du den på Azure Machine Learning arbetsytan.

Du kan registrera en komponent med följande kod:

prep = ml_client.components.create_or_update(loaded_component_prep)