Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR:
Azure Machine Learning SDK v1 för Python
Viktigt!
Den här artikeln innehåller information om hur du använder Azure Machine Learning SDK v1. SDK v1 är inaktuell från och med den 31 mars 2025. Stödet för det upphör den 30 juni 2026. Du kan installera och använda SDK v1 fram till det datumet. Dina befintliga arbetsflöden med SDK v1 fortsätter att fungera efter supportdatumet. De kan dock utsättas för säkerhetsrisker eller förändringar som bryter kompatibiliteten vid arkitektoniska förändringar i produkten.
Vi rekommenderar att du övergår till SDK v2 före den 30 juni 2026. Mer information om SDK v2 finns i Vad är Azure Machine Learning CLI och Python SDK v2? och SDK v2-referensen.
Den här artikeln innehåller kod för att importera data, transformera data och flytta data mellan steg i en Azure Machine Learning-pipeline. En översikt över hur data fungerar i Azure Machine Learning finns i Åtkomst till data i Azure Storage-tjänster. Information om fördelarna och strukturen för Azure Machine Learning-pipelines finns i Vad är Azure Machine Learning-pipelines?.
Den här artikeln visar hur du:
- Använda
Datasetobjekt för befintliga data - Få åtkomst till data i dina steg
- Dela upp
Datasetdata i delmängder, till exempel tränings- och valideringsunderuppsättningar - Skapa
OutputFileDatasetConfigobjekt för att överföra data till nästa pipelinesteg - Använda
OutputFileDatasetConfigobjekt som indata till pipelinesteg - Skapa nya
Datasetobjekt frånOutputFileDatasetConfigsom du vill spara
Förutsättningar
En Azure-prenumeration. Om du inte har något skapar du ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning.
Azure Machine Learning SDK för Python eller åtkomst till Azure Machine Learning-studio.
En Azure Machine Learning-arbetsyta.
Skapa antingen en Azure Machine Learning-arbetsyta eller använd en befintlig via Python SDK. Importera klasserna
WorkspaceochDatastoreoch läs in prenumerationsinformationenconfig.jsonfrån filen med hjälp av funktionenfrom_config(). Den här funktionen söker efter JSON-filen i den aktuella katalogen som standard, men du kan också ange en sökvägsparameter som pekar på filen med hjälpfrom_config(path="your/file/path")av .import azureml.core from azureml.core import Workspace, Datastore ws = Workspace.from_config()Vissa befintliga data. Den här artikeln visar kortfattat användningen av en Azure-blobcontainer.
Valfritt: En befintlig maskininlärningspipeline, till exempel den som beskrivs i Skapa och köra maskininlärningspipelines med Azure Machine Learning SDK.
Använda Dataset objekt för befintliga data
Det bästa sättet att mata in data i en pipeline är att använda ett datauppsättningsobjekt .
Dataset objekt representerar beständiga data som är tillgängliga i en arbetsyta.
Det finns många sätt att skapa och registrera Dataset objekt. Tabelldatauppsättningar är för avgränsade data som är tillgängliga i en eller flera filer. Fildatauppsättningar är för binära data (till exempel bilder) eller för data som du parsar. De enklaste programmatiska sätten att skapa Dataset objekt är att använda befintliga blobar i arbetsytelagring eller offentliga URL:er:
datastore = Datastore.get(workspace, 'training_data')
iris_dataset = Dataset.Tabular.from_delimited_files(DataPath(datastore, 'iris.csv'))
datastore_path = [
DataPath(datastore, 'animals/dog/1.jpg'),
DataPath(datastore, 'animals/dog/2.jpg'),
DataPath(datastore, 'animals/cat/*.jpg')
]
cats_dogs_dataset = Dataset.File.from_files(path=datastore_path)
Mer information om hur du skapar datauppsättningar med olika alternativ och från olika källor, registrerar dem och granskar dem i Azure Machine Learning-användargränssnittet, förstår hur datastorleken interagerar med beräkningskapaciteten och versionshantering av dem finns i Skapa Azure Machine Learning-datamängder.
Skicka datauppsättningar till skriptet
Om du vill skicka datauppsättningens sökväg till skriptet Dataset använder du objektets as_named_input() metod. Du kan antingen skicka det resulterande DatasetConsumptionConfig objektet till skriptet som ett argument eller genom att använda inputs argumentet till pipelineskriptet kan du hämta datamängden med hjälp Run.get_context().input_datasets[]av .
När du har namngett en indata kan du välja dess åtkomstsätt (endast för FileDataset): as_mount() eller as_download(). Om skriptet bearbetar alla filer i datauppsättningen och disken på beräkningsresursen är tillräckligt stora för datauppsättningen är nedladdningsläget ett bättre val. Läget för nedladdningsåtkomst undviker kostnaden för att strömma data vid körning. Om skriptet kommer åt en delmängd av datamängden eller är för stort för din beräkning använder du monteringsåtkomstläget. Mer information finns i Montering kontra nedladdning.
Så här skickar du en datauppsättning till pipelinesteget:
- Använd
TabularDataset.as_named_input()ellerFileDataset.as_named_input()(inga i slutet) för att skapa ettDatasetConsumptionConfigobjekt -
Endast
FileDatasetför: Användas_mount()elleras_download()för att ange åtkomstläget. MedTabularDatasetkan du inte ange åtkomstläget. - Skicka vidare datauppsättningarna till pipelinestegen genom att använda antingen
argumentsellerinputs.
Följande kodfragment visar det vanliga mönstret för att kombinera dessa steg i PythonScriptStep konstruktorn med hjälp iris_dataset av (TabularDataset):
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[iris_dataset.as_named_input('iris')]
)
Kommentar
Du måste ersätta värdena för alla dessa argument (dvs. "train_data", , "train.py"clusteroch iris_dataset) med dina egna data.
Ovanstående kodfragment visar bara anropets form och ingår inte i ett Microsoft-exempel.
Du kan också använda metoder som random_split() och take_sample() för att skapa flera indata eller minska mängden data som skickas till pipelinesteget:
seed = 42 # PRNG seed
smaller_dataset = iris_dataset.take_sample(0.1, seed=seed) # 10%
train, test = smaller_dataset.random_split(percentage=0.8, seed=seed)
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[train.as_named_input('train'), test.as_named_input('test')]
)
Komma åt datauppsättningar i skriptet
Namngivna indata till pipelinestegskriptet är tillgängliga som en ordlista i Run objektet. Hämta det aktiva Run-objektet med hjälp av Run.get_context() och hämta sedan ordlistan med namngivna indata med hjälp av input_datasets. Om du skickade DatasetConsumptionConfig-objektet med hjälp av argumentet arguments i stället för argumentet inputs, kan du komma åt data genom att använda ArgumentParser-kod. Båda teknikerna visas i följande kodfragment:
Skriptet för pipelinedefinition
# Code is for demonstration only: It would be confusing to split datasets between `arguments` and `inputs`
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
# Datasets passed as arguments
arguments=['--training-folder', train.as_named_input('train').as_download()],
# Datasets passed as inputs
inputs=[test.as_named_input('test').as_download()]
)
Skriptet train.py som refereras från PythonScriptStep
# In pipeline script
parser = argparse.ArgumentParser()
# Retrieve the dataset passed as an argument
parser.add_argument('--training-folder', type=str, dest='train_folder', help='training data folder mounting point')
args = parser.parse_args()
training_data_folder = args.train_folder
# Retrieve the dataset passed as an input
testing_data_folder = Run.get_context().input_datasets['test']
Det angivna värdet är sökvägen till datamängdsfilen eller filerna.
Eftersom registrerade datauppsättningar är beständiga och delas över en arbetsyta kan du hämta dem direkt:
run = Run.get_context()
ws = run.experiment.workspace
ds = Dataset.get_by_name(workspace=ws, name='mnist_opendataset')
Kommentar
Föregående kodfragment visar anropens form. De ingår inte i ett Microsoft-exempel. Du måste ersätta argumenten med värden från ditt eget projekt.
Används OutputFileDatasetConfig för mellanliggande data
Även om Dataset-objekt endast representerar beständiga data, kan OutputFileDatasetConfig-objekt användas för tillfälliga utdata från pipelinesteg och för beständiga utdata.
OutputFileDatasetConfig stöder skrivning av data till bloblagring, fildelning, Azure Data Lake Storage Gen1 eller Data Lake Storage Gen2. Den stöder både monteringsläge och uppladdningsläge. I monteringsläge lagras filer som skrivs till den monterade katalogen permanent när filen stängs. I uppladdningsläge laddas filer som skrivits till utdatakatalogen upp i slutet av jobbet. Om jobbet misslyckas eller avbryts laddas inte utdatakatalogen upp.
Objektets OutputFileDatasetConfig standardbeteende är att skriva till arbetsytans standarddatalager. Skicka dina OutputFileDatasetConfig objekt till din PythonScriptStep med hjälp av parametern arguments .
from azureml.data import OutputFileDatasetConfig
dataprep_output = OutputFileDatasetConfig()
input_dataset = Dataset.get_by_name(workspace, 'raw_data')
dataprep_step = PythonScriptStep(
name="prep_data",
script_name="dataprep.py",
compute_target=cluster,
arguments=[input_dataset.as_named_input('raw_data').as_mount(), dataprep_output]
)
Kommentar
Samtidiga skrivningar till en OutputFileDatasetConfig misslyckas. Försök inte använda en enda OutputFileDatasetConfig samtidigt. Dela inte en enskild OutputFileDatasetConfig i en situation med flera processer, som när du använder distribuerad utbildning.
Använda OutputFileDatasetConfig som utdata från ett träningssteg
I pipelinens PythonScriptStep kan du hämta tillgängliga utdatasökvägar via programmets argument. Om det här steget är det första steget och initierar utdata måste du skapa en katalog på den angivna sökvägen. Du kan sedan skriva de filer som du vill ska finnas i OutputFileDatasetConfig.
parser = argparse.ArgumentParser()
parser.add_argument('--output_path', dest='output_path', required=True)
args = parser.parse_args()
# Make directory for file
os.makedirs(os.path.dirname(args.output_path), exist_ok=True)
with open(args.output_path, 'w') as f:
f.write("Step 1's output")
Läs OutputFileDatasetConfig som indata till icke-initiala steg
När det första pipelinesteget OutputFileDatasetConfig skriver vissa data till sökvägen och det blir ett utdata från det första steget kan det användas som indata till ett senare steg.
I följande kod:
step1_output_dataanger att utdata frånPythonScriptStepstep1skrivs till Data Lake Storage Gen2-dataarkivetmy_adlsgen2i läget för uppladdningsåtkomst. Information om hur du konfigurerar rollbehörigheter för att skriva tillbaka data till Data Lake Storage Gen2-datalager finns i Ansluta till lagringstjänster i Azure med datalager.När
step1har slutförts och utdata skrivs till målet som anges avstep1_output_data, ärstep2redo att användastep1_output_datasom indata.
# Get Data Lake Storage Gen2 datastore that's already registered with the workspace
datastore = workspace.datastores['my_adlsgen2']
step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()
step1 = PythonScriptStep(
name="generate_data",
script_name="step1.py",
runconfig = aml_run_config,
arguments = ["--output_path", step1_output_data]
)
step2 = PythonScriptStep(
name="read_pipeline_data",
script_name="step2.py",
compute_target=compute,
runconfig = aml_run_config,
arguments = ["--pd", step1_output_data.as_input()]
)
pipeline = Pipeline(workspace=ws, steps=[step1, step2])
Dricks
Processen för att läsa data i Python-skriptet step2.py är densamma som den process som beskrevs tidigare i Access-datauppsättningar i skriptet. Använd ArgumentParser för att lägga till ett argument för --pd i skriptet för att komma åt data.
Registrera OutputFileDatasetConfig objekt för återanvändning
Om du vill göra ett OutputFileDatasetConfig objekt tillgängligt längre än hela experimentet registrerar du det på din arbetsyta för att dela och återanvända det i experiment:
step1_output_ds = step1_output_data.register_on_complete(
name='processed_data',
description = 'files from step1'
)
Ta bort OutputFileDatasetConfig innehåll när det inte längre behövs
Azure tar inte automatiskt bort mellanliggande data som skrivs med OutputFileDatasetConfig. Om du vill undvika lagringsavgifter för stora mängder onödiga data bör du vidta någon av följande åtgärder:
Ta programmatiskt bort mellanliggande data i slutet av ett pipelinejobb när de inte längre behövs.
Använd bloblagring med en kortsiktig lagringsprincip för mellanliggande data. (Se Optimera kostnader genom att automatisera Åtkomstnivåer för Azure Blob Storage.) Den här principen kan bara anges på en arbetsytas nondefault-datalager. Använd
OutputFileDatasetConfigför att exportera mellanliggande data till ett annat datalager som inte är standard.# Get Data Lake Storage Gen2 datastore that's already registered with the workspace datastore = workspace.datastores['my_adlsgen2'] step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()Granska regelbundet data och ta bort data som du inte behöver.
Varning
Ta bara bort mellanliggande data efter 30 dagar från datans senaste ändringsdatum. Om du tar bort mellanliggande data tidigare kan pipelinekörningen misslyckas eftersom pipelinen förutsätter att data finns under en 30-dagarsperiod för återanvändning.
Mer information finns i Planera för att hantera kostnader för Azure Machine Learning.