Geautomatiseerde ML gebruiken in een Azure Machine Learning-pijplijn in Python
VAN TOEPASSING OP: Python SDK azureml v1
Met de geautomatiseerde ML-functionaliteit van Azure Machine Learning kunt u krachtige modellen ontdekken zonder dat u elke mogelijke benadering opnieuw hoeft te implementeren. In combinatie met Azure Machine Learning-pijplijnen kunt u implementeerbare werkstromen maken waarmee u snel het algoritme kunt detecteren dat het beste werkt voor uw gegevens. In dit artikel leest u hoe u efficiënt een stap voor gegevensvoorbereiding kunt toevoegen aan een geautomatiseerde ML-stap. Geautomatiseerde ML kan snel het algoritme ontdekken dat het beste werkt voor uw gegevens, terwijl u onderweg bent naar MLOps en de levenscyclus van modellen operationeel wilt maken met pijplijnen.
Vereisten
Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint. Probeer vandaag nog de gratis of betaalde versie van Azure Machine Learning.
Een Azure Machine Learning-werkruimte. Zie Werkruimtebronnen maken.
Bekendheid met de geautomatiseerde machine learning- en machine learning-pijplijnen van Azure en de SDK.
Bekijk de centrale klassen van geautomatiseerde ML
Geautomatiseerde ML in een pijplijn wordt vertegenwoordigd door een AutoMLStep
object. De AutoMLStep
klasse is een subklasse van PipelineStep
. Een grafiek met PipelineStep
objecten definieert een Pipeline
.
Er zijn verschillende subklassen van PipelineStep
. Naast het AutoMLStep
artikel wordt in dit artikel een PythonScriptStep
voor gegevensvoorbereiding en een andere voor het registreren van het model weergegeven.
De voorkeursmethode voor het in eerste instantie verplaatsen van gegevens naar een ML-pijplijn is met Dataset
objecten. Als u gegevens tussen stappen wilt verplaatsen en gegevensuitvoer van uitvoeringen wilt opslaan, is de voorkeurswijze met OutputFileDatasetConfig
en OutputTabularDatasetConfig
objecten. Als u wilt gebruiken, AutoMLStep
moet het PipelineData
object worden omgezet in een PipelineOutputTabularDataset
object. Zie Invoer- en uitvoergegevens van ML-pijplijnen voor meer informatie.
De AutoMLStep
is geconfigureerd via een AutoMLConfig
object.
AutoMLConfig
is een flexibele klasse, zoals beschreven in Geautomatiseerde ML-experimenten configureren in Python.
Een Pipeline
uitvoering in een Experiment
. De pijplijn Run
heeft voor elke stap een onderliggend element StepRun
. De uitvoer van de geautomatiseerde ML StepRun
zijn de metrische trainingsgegevens en het best presterende model.
Om dingen concreet te maken, maakt dit artikel een eenvoudige pijplijn voor een classificatietaak. De taak voorspelt het overleven van De Titanic, maar we bespreken de gegevens of taken niet, behalve in het doorgeven.
Aan de slag
Eerste gegevensset ophalen
Vaak begint een ML-werkstroom met bestaande basislijngegevens. Dit is een goed scenario voor een geregistreerde gegevensset. Gegevenssets zijn zichtbaar in de werkruimte, bieden ondersteuning voor versiebeheer en kunnen interactief worden verkend. Er zijn veel manieren om een gegevensset te maken en te vullen, zoals beschreven in Azure Machine Learning-gegevenssets maken. Omdat we de Python SDK gebruiken om onze pijplijn te maken, gebruikt u de SDK om basislijngegevens te downloaden en te registreren met de naam 'titanic_ds'.
from azureml.core import Workspace, Dataset
ws = Workspace.from_config()
if not 'titanic_ds' in ws.datasets.keys() :
# create a TabularDataset from Titanic training data
web_paths = ['https://dprepdata.blob.core.windows.net/demo/Titanic.csv',
'https://dprepdata.blob.core.windows.net/demo/Titanic2.csv']
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_paths)
titanic_ds.register(workspace = ws,
name = 'titanic_ds',
description = 'Titanic baseline data',
create_new_version = True)
titanic_ds = Dataset.get_by_name(ws, 'titanic_ds')
De code meldt zich eerst aan bij de Azure Machine Learning-werkruimte die is gedefinieerd in config.json (zie Een werkruimteconfiguratiebestand maken voor een uitleg. Als er nog geen geregistreerde gegevensset 'titanic_ds'
is, wordt er een gemaakt. De code downloadt CSV-gegevens van het web, gebruikt ze om een TabularDataset
instantie te maken en registreert vervolgens de gegevensset bij de werkruimte. Ten slotte wijst de functie Dataset.get_by_name()
de Dataset
toe aan titanic_ds
.
Uw opslag- en rekendoel configureren
Aanvullende resources die de pijplijn nodig heeft, zijn opslag en over het algemeen Rekenresources van Azure Machine Learning.
from azureml.core import Datastore
from azureml.core.compute import AmlCompute, ComputeTarget
datastore = ws.get_default_datastore()
compute_name = 'cpu-cluster'
if not compute_name in ws.compute_targets :
print('creating a new compute target...')
provisioning_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
min_nodes=0,
max_nodes=1)
compute_target = ComputeTarget.create(ws, compute_name, provisioning_config)
compute_target.wait_for_completion(
show_output=True, min_node_count=None, timeout_in_minutes=20)
# Show the result
print(compute_target.get_status().serialize())
compute_target = ws.compute_targets[compute_name]
De tussenliggende gegevens tussen de gegevensvoorbereiding en de geautomatiseerde ML-stap kunnen worden opgeslagen in het standaardgegevensarchief van de werkruimte, dus we hoeven niet meer te doen dan het Workspace
object aanroepenget_default_datastore()
.
Daarna controleert de code of het Azure Machine Learning-rekendoel 'cpu-cluster'
al bestaat. Zo niet, dan geven we aan dat we een klein REKENdoel op basis van CPU willen. Als u van plan bent om de deep learning-functies van geautomatiseerde ML te gebruiken (bijvoorbeeld tekst met DNN-ondersteuning) moet u een berekening met sterke GPU-ondersteuning kiezen, zoals beschreven in de grootten van de met GPU geoptimaliseerde virtuele machines.
De codeblokken totdat het doel is ingericht en vervolgens enkele details van het zojuist gemaakte rekendoel afdrukken. Ten slotte wordt het benoemde rekendoel opgehaald uit de werkruimte en toegewezen aan compute_target
.
De trainingsuitvoering configureren
De runtimecontext wordt ingesteld door een RunConfiguration
object te maken en te configureren. Hier stellen we het rekendoel in.
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
aml_run_config = RunConfiguration()
# Use just-specified compute target ("cpu-cluster")
aml_run_config.target = compute_target
# Specify CondaDependencies obj, add necessary packages
aml_run_config.environment.python.conda_dependencies = CondaDependencies.create(
conda_packages=['pandas','scikit-learn'],
pip_packages=['azureml-sdk[automl]', 'pyarrow'])
Gegevens voorbereiden voor geautomatiseerde machine learning
De code voor gegevensvoorbereiding schrijven
De gegevensset Van de basislijn Titanic bestaat uit gemengde numerieke en tekstgegevens, waarbij enkele waarden ontbreken. Om deze voor te bereiden op geautomatiseerde machine learning, zal de pijplijnstap voor gegevensvoorbereiding het volgende doen:
- Ontbrekende gegevens vullen met willekeurige gegevens of een categorie die overeenkomt met 'Onbekend'
- Categorische gegevens transformeren naar gehele getallen
- Kolommen verwijderen die we niet willen gebruiken
- De gegevens splitsen in trainings- en testsets
- De getransformeerde gegevens naar de
OutputFileDatasetConfig
uitvoerpaden schrijven
%%writefile dataprep.py
from azureml.core import Run
import pandas as pd
import numpy as np
import argparse
RANDOM_SEED=42
def prepare_age(df):
# Fill in missing Age values from distribution of present Age values
mean = df["Age"].mean()
std = df["Age"].std()
is_null = df["Age"].isnull().sum()
# compute enough (== is_null().sum()) random numbers between the mean, std
rand_age = np.random.randint(mean - std, mean + std, size = is_null)
# fill NaN values in Age column with random values generated
age_slice = df["Age"].copy()
age_slice[np.isnan(age_slice)] = rand_age
df["Age"] = age_slice
df["Age"] = df["Age"].astype(int)
# Quantize age into 5 classes
df['Age_Group'] = pd.qcut(df['Age'],5, labels=False)
df.drop(['Age'], axis=1, inplace=True)
return df
def prepare_fare(df):
df['Fare'].fillna(0, inplace=True)
df['Fare_Group'] = pd.qcut(df['Fare'],5,labels=False)
df.drop(['Fare'], axis=1, inplace=True)
return df
def prepare_genders(df):
genders = {"male": 0, "female": 1, "unknown": 2}
df['Sex'] = df['Sex'].map(genders)
df['Sex'].fillna(2, inplace=True)
df['Sex'] = df['Sex'].astype(int)
return df
def prepare_embarked(df):
df['Embarked'].replace('', 'U', inplace=True)
df['Embarked'].fillna('U', inplace=True)
ports = {"S": 0, "C": 1, "Q": 2, "U": 3}
df['Embarked'] = df['Embarked'].map(ports)
return df
parser = argparse.ArgumentParser()
parser.add_argument('--output_path', dest='output_path', required=True)
args = parser.parse_args()
titanic_ds = Run.get_context().input_datasets['titanic_ds']
df = titanic_ds.to_pandas_dataframe().drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1)
df = prepare_embarked(prepare_genders(prepare_fare(prepare_age(df))))
df.to_csv(os.path.join(args.output_path,"prepped_data.csv"))
print(f"Wrote prepped data to {args.output_path}/prepped_data.csv")
Het bovenstaande codefragment is een volledig, maar minimaal voorbeeld van gegevensvoorbereiding voor de Titanic-gegevens. Het codefragment begint met een Jupyter -magic-opdracht om de code naar een bestand uit te voeren. Als u geen Jupyter-notebook gebruikt, verwijdert u deze regel en maakt u het bestand handmatig.
De verschillende prepare_
functies in het bovenstaande fragment wijzigen de relevante kolom in de invoergegevensset. Deze functies werken aan de gegevens zodra deze zijn gewijzigd in een Pandas-object DataFrame
. In elk geval worden ontbrekende gegevens gevuld met representatieve willekeurige gegevens of categorische gegevens die 'Onbekend' aangeven. Categorische gegevens op basis van tekst worden toegewezen aan gehele getallen. Kolommen die niet meer nodig zijn, worden overschreven of verwijderd.
Nadat de code de functies voor gegevensvoorbereiding heeft gedefinieerd, parseert de code het invoerargument. Dit is het pad waarnaar we onze gegevens willen schrijven. (Deze waarden worden bepaald door OutputFileDatasetConfig
objecten die in de volgende stap worden besproken.) De code haalt de geregistreerde 'titanic_cs'
Dataset
, converteert deze naar een Pandas DataFrame
en roept de verschillende functies voor gegevensvoorbereiding aan.
Omdat het output_path
een map is, geeft de aanroep om de bestandsnaam prepped_data.csv
op te to_csv()
geven.
De pijplijnstap voor gegevensvoorbereiding schrijven (PythonScriptStep
)
De hierboven beschreven gegevensvoorbereidingscode moet worden gekoppeld aan een PythonScripStep
object dat moet worden gebruikt met een pijplijn. Het pad waarnaar de CSV-uitvoer wordt geschreven, wordt gegenereerd door een OutputFileDatasetConfig
object. De resources die eerder zijn voorbereid, zoals de ComputeTarget
, de RunConfig
en de 'titanic_ds' Dataset
resources, worden gebruikt om de specificatie te voltooien.
from azureml.data import OutputFileDatasetConfig
from azureml.pipeline.steps import PythonScriptStep
prepped_data_path = OutputFileDatasetConfig(name="output_path")
dataprep_step = PythonScriptStep(
name="dataprep",
script_name="dataprep.py",
compute_target=compute_target,
runconfig=aml_run_config,
arguments=["--output_path", prepped_data_path],
inputs=[titanic_ds.as_named_input('titanic_ds')],
allow_reuse=True
)
Het prepped_data_path
object is van het type OutputFileDatasetConfig
dat verwijst naar een map. U ziet dat deze is opgegeven in de arguments
parameter. Als u de vorige stap bekijkt, ziet u dat in de code voor gegevensvoorbereiding de waarde van het argument '--output_path'
het mappad is waarop het CSV-bestand is geschreven.
Trainen met AutoMLStep
Het configureren van een geautomatiseerde ML-pijplijnstap wordt uitgevoerd met de AutoMLConfig
klasse. Deze flexibele klasse wordt beschreven in Geautomatiseerde ML-experimenten configureren in Python. Gegevensinvoer en -uitvoer zijn de enige aspecten van de configuratie die speciale aandacht vereisen in een ML-pijplijn. Hieronder vindt u gedetailleerde informatie over de invoer en uitvoer voor AutoMLConfig
in pijplijnen. Naast gegevens is een voordeel van ML-pijplijnen de mogelijkheid om verschillende rekendoelen te gebruiken voor verschillende stappen. U kunt ervoor kiezen om alleen een krachtiger ComputeTarget
gebruik te maken voor het geautomatiseerde ML-proces. Dit is net zo eenvoudig als het toewijzen van een krachtigere RunConfiguration
aan de parameter van run_configuration
het AutoMLConfig
object.
Gegevens verzenden naar AutoMLStep
In een ML-pijplijn moeten de invoergegevens een Dataset
object zijn. De best presterende manier is het leveren van de invoergegevens in de vorm van OutputTabularDatasetConfig
objecten. U maakt een object van dat type met de read_delimited_files()
op een OutputFileDatasetConfig
, zoals het prepped_data_path
object, zoals het prepped_data_path
object.
# type(prepped_data) == OutputTabularDatasetConfig
prepped_data = prepped_data_path.read_delimited_files()
Een andere optie is het gebruik van Dataset
objecten die zijn geregistreerd in de werkruimte:
prepped_data = Dataset.get_by_name(ws, 'Data_prepared')
De twee technieken vergelijken:
Techniek | Voordelen en nadelen |
---|---|
OutputTabularDatasetConfig |
Hogere prestaties |
Natuurlijke route van OutputFileDatasetConfig |
|
Gegevens worden niet behouden nadat de pijplijn is uitgevoerd | |
Geregistreerd Dataset |
Lagere prestaties |
Kan op veel manieren worden gegenereerd | |
Gegevens blijven behouden en zijn zichtbaar in de hele werkruimte | |
Notitieblok met geregistreerde Dataset techniek |
Geautomatiseerde ML-uitvoer opgeven
De uitvoer van de resultaten AutoMLStep
zijn de uiteindelijke metrische scores van het hogere presterende model en dat model zelf. Als u deze uitvoer in verdere pijplijnstappen wilt gebruiken, bereidt u objecten voor OutputFileDatasetConfig
om ze te ontvangen.
from azureml.pipeline.core import TrainingOutput, PipelineData
metrics_data = PipelineData(name='metrics_data',
datastore=datastore,
pipeline_output_name='metrics_output',
training_output=TrainingOutput(type='Metrics'))
model_data = PipelineData(name='best_model_data',
datastore=datastore,
pipeline_output_name='model_output',
training_output=TrainingOutput(type='Model'))
Met het bovenstaande codefragment worden de twee PipelineData
objecten voor de metrische gegevens en modeluitvoer gemaakt. Elk is benoemd, toegewezen aan het standaardgegevensarchief dat eerder is opgehaald en gekoppeld aan het specifieke type
van TrainingOutput
de AutoMLStep
. Omdat we deze PipelineData
objecten toewijzenpipeline_output_name
, zijn hun waarden niet alleen beschikbaar vanuit de afzonderlijke pijplijnstap, maar ook vanuit de pijplijn als geheel, zoals hieronder wordt besproken in de sectie 'Pijplijnresultaten onderzoeken'.
De geautomatiseerde ML-pijplijnstap configureren en maken
Zodra de invoer en uitvoer zijn gedefinieerd, is het tijd om de AutoMLConfig
en AutoMLStep
te maken. De details van de configuratie zijn afhankelijk van uw taak, zoals beschreven in Geautomatiseerde ML-experimenten configureren in Python. Het volgende codefragment laat een eenvoudige configuratie zien voor de Taak voor het overleven van de Titanic.
from azureml.train.automl import AutoMLConfig
from azureml.pipeline.steps import AutoMLStep
# Change iterations to a reasonable number (50) to get better accuracy
automl_settings = {
"iteration_timeout_minutes" : 10,
"iterations" : 2,
"experiment_timeout_hours" : 0.25,
"primary_metric" : 'AUC_weighted'
}
automl_config = AutoMLConfig(task = 'classification',
path = '.',
debug_log = 'automated_ml_errors.log',
compute_target = compute_target,
run_configuration = aml_run_config,
featurization = 'auto',
training_data = prepped_data,
label_column_name = 'Survived',
**automl_settings)
train_step = AutoMLStep(name='AutoML_Classification',
automl_config=automl_config,
passthru_automl_config=False,
outputs=[metrics_data,model_data],
enable_default_model_output=False,
enable_default_metrics_output=False,
allow_reuse=True)
Het fragment toont een idioom die vaak wordt gebruikt met AutoMLConfig
. Argumenten die vloeiender zijn (hyperparameter-ish) worden opgegeven in een afzonderlijke woordenlijst, terwijl de waarden die minder waarschijnlijk zullen worden gewijzigd, rechtstreeks in de AutoMLConfig
constructor worden opgegeven. In dit geval geeft u automl_settings
een korte uitvoering op: de uitvoering stopt na slechts 2 iteraties of 15 minuten, afhankelijk van wat het eerst komt.
De automl_settings
woordenlijst wordt als kwargs doorgegeven aan de AutoMLConfig
constructor. De andere parameters zijn niet complex:
-
task
is ingesteld opclassification
dit voorbeeld. Andere geldige waarden zijnregression
enforecasting
-
path
endebug_log
beschrijf het pad naar het project en een lokaal bestand waarnaar foutopsporingsgegevens worden geschreven -
compute_target
is de eerder gedefinieerdecompute_target
dat in dit voorbeeld een goedkope MACHINE op basis van CPU is. Als u de Deep Learning-faciliteiten van AutoML gebruikt, wilt u het rekendoel wijzigen in GPU -
featurization
is ingesteld opauto
. Meer informatie vindt u in de sectie Data Featurization van het geautomatiseerde ML-configuratiedocument -
label_column_name
geeft aan welke kolom we geïnteresseerd zijn in het voorspellen -
training_data
is ingesteld op deOutputTabularDatasetConfig
objecten die zijn gemaakt op basis van de uitvoer van de gegevensvoorbereidingsstap
De AutoMLStep
zelf neemt de AutoMLConfig
en heeft, als uitvoer, de PipelineData
objecten die zijn gemaakt om de metrische gegevens en modelgegevens op te slaan.
Belangrijk
U moet deze optie alleen instellen en enable_default_metrics_output
True
alleen instellen enable_default_model_output
als u .AutoMLStepRun
In dit voorbeeld voert het geautomatiseerde ML-proces kruisvalidaties uit op de training_data
. U kunt het aantal kruisvalidaties met het n_cross_validations
argument bepalen. Als u uw trainingsgegevens al hebt gesplitst als onderdeel van uw stappen voor gegevensvoorbereiding, kunt u deze instellen validation_data
op een eigen Dataset
.
Soms ziet u het gebruik X
voor gegevensfuncties en y
voor gegevenslabels. Deze techniek is afgeschaft en u moet deze gebruiken training_data
voor invoer.
Het model registreren dat wordt gegenereerd door geautomatiseerde ML
De laatste stap in een eenvoudige ML-pijplijn is het gemaakte model registreren. Door het model toe te voegen aan het modelregister van de werkruimte, is het beschikbaar in de portal en kan het worden geversied. Als u het model wilt registreren, schrijft u een andere PythonScriptStep
die de uitvoer van het model_data
AutoMLStep
model gebruikt.
De code schrijven om het model te registreren
Een model is geregistreerd in een Workspace
. U bent waarschijnlijk bekend met het aanmelden Workspace.from_config()
bij uw werkruimte op uw lokale computer, maar er is een andere manier om de werkruimte op te halen vanuit een actieve ML-pijplijn. Hiermee Run.get_context()
wordt de actieve Run
opgehaald. Dit run
object biedt toegang tot veel belangrijke objecten, waaronder de Workspace
objecten die hier worden gebruikt.
%%writefile register_model.py
from azureml.core.model import Model, Dataset
from azureml.core.run import Run, _OfflineRun
from azureml.core import Workspace
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--model_name", required=True)
parser.add_argument("--model_path", required=True)
args = parser.parse_args()
print(f"model_name : {args.model_name}")
print(f"model_path: {args.model_path}")
run = Run.get_context()
ws = Workspace.from_config() if type(run) == _OfflineRun else run.experiment.workspace
model = Model.register(workspace=ws,
model_path=args.model_path,
model_name=args.model_name)
print("Registered version {0} of model {1}".format(model.version, model.name))
De PythonScriptStep-code schrijven
Waarschuwing
Als u de Azure Machine Learning SDK v1 gebruikt en uw werkruimte is geconfigureerd voor netwerkisolatie (VNet), treedt er mogelijk een fout op bij het uitvoeren van deze stap. Zie HyperdriveStep en AutoMLStep mislukken met netwerkisolatie voor meer informatie.
Bij het registreren PythonScriptStep
van modellen wordt een PipelineParameter
voor een van de argumenten gebruikt. Pijplijnparameters zijn argumenten voor pijplijnen die eenvoudig kunnen worden ingesteld tijdens het indienen van uitvoeringen. Zodra ze zijn gedeclareerd, worden ze doorgegeven als normale argumenten.
from azureml.pipeline.core.graph import PipelineParameter
# The model name with which to register the trained model in the workspace.
model_name = PipelineParameter("model_name", default_value="TitanicSurvivalInitial")
register_step = PythonScriptStep(script_name="register_model.py",
name="register_model",
allow_reuse=False,
arguments=["--model_name", model_name, "--model_path", model_data],
inputs=[model_data],
compute_target=compute_target,
runconfig=aml_run_config)
Uw geautomatiseerde ML-pijplijn maken en uitvoeren
Het maken en uitvoeren van een pijplijn die een AutoMLStep
bevat, verschilt niet van een normale pijplijn.
from azureml.pipeline.core import Pipeline
from azureml.core import Experiment
pipeline = Pipeline(ws, [dataprep_step, train_step, register_step])
experiment = Experiment(workspace=ws, name='titanic_automl')
run = experiment.submit(pipeline, show_output=True)
run.wait_for_completion()
De bovenstaande code combineert de stappen voor gegevensvoorbereiding, geautomatiseerde ML en modelregistering in een Pipeline
object. Vervolgens wordt er een Experiment
object gemaakt. De Experiment
constructor haalt het benoemde experiment op als het bestaat of maakt het indien nodig. Hiermee wordt het Pipeline
naar het Experiment
object verzonden, dat een Run
object maakt waarmee de pijplijn asynchroon wordt uitgevoerd. De wait_for_completion()
functie blokkeert totdat de uitvoering is voltooid.
Pijplijnresultaten onderzoeken
Zodra de run
bewerking is voltooid, kunt u objecten ophalen PipelineData
waaraan een pipeline_output_name
. U kunt de resultaten downloaden en laden voor verdere verwerking.
metrics_output_port = run.get_pipeline_output('metrics_output')
model_output_port = run.get_pipeline_output('model_output')
metrics_output_port.download('.', show_progress=True)
model_output_port.download('.', show_progress=True)
Gedownloade bestanden worden naar de submap azureml/{run.id}/
geschreven. Het bestand met metrische gegevens is JSON-indeling en kan worden geconverteerd naar een Pandas-dataframe voor onderzoek.
Voor lokale verwerking moet u mogelijk relevante pakketten installeren, zoals Pandas, Pickle, de Azure Machine Learning SDK, enzovoort. In dit voorbeeld is het waarschijnlijk dat het beste model dat door geautomatiseerde ML wordt gevonden, afhankelijk is van XGBoost.
!pip install xgboost==0.90
import pandas as pd
import json
metrics_filename = metrics_output._path_on_datastore
# metrics_filename = path to downloaded file
with open(metrics_filename) as f:
metrics_output_result = f.read()
deserialized_metrics_output = json.loads(metrics_output_result)
df = pd.DataFrame(deserialized_metrics_output)
df
In het bovenstaande codefragment ziet u het bestand met metrische gegevens dat wordt geladen vanaf de locatie in het Azure-gegevensarchief. U kunt het ook laden vanuit het gedownloade bestand, zoals wordt weergegeven in de opmerking. Nadat u deze hebt gedeserialiseerd en geconverteerd naar een Pandas DataFrame, kunt u gedetailleerde metrische gegevens zien voor elk van de iteraties van de geautomatiseerde ML-stap.
Het modelbestand kan worden gedeserialiseerd in een Model
object dat u kunt gebruiken voor deductie, verdere analyse van metrische gegevens, enzovoort.
import pickle
model_filename = model_output._path_on_datastore
# model_filename = path to downloaded file
with open(model_filename, "rb" ) as f:
best_model = pickle.load(f)
# ... inferencing code not shown ...
Zie Een bestaand model gebruiken met Azure Machine Learning voor meer informatie over het laden en werken met bestaande modellen.
De resultaten van een geautomatiseerde ML-uitvoering downloaden
Als u het artikel hebt gevolgd, hebt u een geïnstantieerd run
object. U kunt echter ook voltooide Run
objecten ophalen uit de Workspace
manier van een Experiment
object.
De werkruimte bevat een volledige record van al uw experimenten en uitvoeringen. U kunt de portal gebruiken om de uitvoer van experimenten te zoeken en te downloaden of code te gebruiken. Als u toegang wilt krijgen tot de records vanuit een historische uitvoering, gebruikt u Azure Machine Learning om de id te vinden van de uitvoering waarin u geïnteresseerd bent. Met die id kunt u de specifieke run
kiezen via de Workspace
en Experiment
.
# Retrieved from Azure Machine Learning web UI
run_id = 'aaaaaaaa-bbbb-cccc-dddd-0123456789AB'
experiment = ws.experiments['titanic_automl']
run = next(run for run in ex.get_runs() if run.id == run_id)
U moet de tekenreeksen in de bovenstaande code wijzigen in de details van uw historische uitvoering. In het bovenstaande fragment wordt ervan uitgegaan dat u aan de relevante hebt Workspace
toegewezen ws
met het normale from_config()
bestand. Het interesse-experiment wordt rechtstreeks opgehaald en vervolgens wordt met de code de Run
interesse gevonden door de run.id
waarde te vergelijken.
Zodra u een Run
object hebt, kunt u de metrische gegevens en het model downloaden.
automl_run = next(r for r in run.get_children() if r.name == 'AutoML_Classification')
outputs = automl_run.get_outputs()
metrics = outputs['default_metrics_AutoML_Classification']
model = outputs['default_model_AutoML_Classification']
metrics.get_port_data_reference().download('.')
model.get_port_data_reference().download('.')
Elk Run
object bevat StepRun
objecten die informatie bevatten over de afzonderlijke pijplijnstapuitvoering. Er run
wordt gezocht naar het StepRun
object voor de AutoMLStep
. De metrische gegevens en het model worden opgehaald met behulp van hun standaardnamen, die beschikbaar zijn, zelfs als u geen objecten doorgeeft PipelineData
aan de outputs
parameter van de AutoMLStep
.
Ten slotte worden de werkelijke metrische gegevens en het model gedownload naar uw lokale computer, zoals is besproken in de sectie Pijplijnresultaten onderzoeken hierboven.
Volgende stappen
- Voer dit Jupyter-notebook uit met een volledig voorbeeld van geautomatiseerde ML in een pijplijn die gebruikmaakt van regressie om taxitarieven te voorspellen
- Geautomatiseerde ML-experimenten maken zonder code te schrijven
- Een verscheidenheid aan Jupyter-notebooks verkennen die geautomatiseerde ML demonstreren
- Meer informatie over het integreren van uw pijplijn in end-to-end MLOps of het onderzoeken van de MLOps GitHub-opslagplaats