Vytváření datových sad služby Azure Machine Learning

PLATÍ PRO:Sada Python SDK azureml v1

V tomto článku se dozvíte, jak pomocí sady Azure Machine Learning Python SDK vytvářet datové sady Azure Machine Learning pro přístup k datům pro místní nebo vzdálené experimenty. Informace o tom, kam se datové sady vejdou do celkového pracovního postupu přístupu k datům ve službě Azure Machine Learning, najdete v článku Zabezpečený přístup k datům .

Vytvořením datové sady vytvoříte odkaz na umístění zdroje dat společně s kopií jeho metadat. Vzhledem k tomu, že data zůstávají ve svém stávajícím umístění, neúčtují se vám žádné další náklady na úložiště a neriskujete integritu zdrojů dat. Také datové sady se líně vyhodnocují, což pomáhá s rychlostmi výkonu pracovního postupu. Datové sady můžete vytvářet z úložišť dat, veřejných adres URL a Azure Open Datasets.

Pokud chcete mít prostředí s minimem kódu, vytvořte datové sady Azure Machine Learning pomocí studio Azure Machine Learning.

S datovými sadami Azure Machine Learning můžete:

Důležité

Položky v tomto článku označené jako "Preview" jsou aktuálně ve verzi Public Preview. Verze Preview se poskytuje bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Požadavky

K vytváření datových sad a práci s datovými sadami potřebujete:

Poznámka

Některé třídy datových sad mají závislosti na balíčku azureml-dataprep , který je kompatibilní pouze s 64bitovým Pythonem. Pokud vyvíjíte v Linuxu, tyto třídy spoléhají na .NET Core 2.1 a podporují se pouze v konkrétních distribucích. Další informace o podporovaných distribucích najdete ve sloupci .NET Core 2.1 v článku Instalace .NET v Linuxu .

Důležité

I když balíček může fungovat ve starších verzích distribucí Linuxu, nedoporučujeme používat distribuci, která je mimo hlavní fázi podpory. Distribuce, které nemají hlavní fázi technické podpory, můžou mít chyby zabezpečení, protože nedostávají nejnovější aktualizace. Doporučujeme používat nejnovější podporovanou verzi vaší distribuce, která je kompatibilní s nástrojem .

Pokyny k velikosti výpočetních prostředků

Při vytváření datové sady zkontrolujte výpočetní výkon a velikost dat v paměti. Velikost dat v úložišti není stejná jako velikost dat v datovém rámci. Například data v souborech CSV se můžou v datovém rámci rozšířit až 10krát, takže 1GB soubor CSV se může stát 10 GB v datovém rámci.

Pokud jsou vaše data komprimovaná, mohou se dále rozšiřovat; 20 GB relativně zhuštěných dat uložených v komprimovaném formátu Parquet se může rozšířit až na přibližně 800 GB v paměti. Vzhledem k tomu, že soubory Parquet ukládají data ve sloupcovém formátu, pokud potřebujete pouze polovinu sloupců, stačí načíst do paměti pouze přibližně 400 GB.

Přečtěte si další informace o optimalizaci zpracování dat ve službě Azure Machine Learning.

Typy datových sad

Existují dva typy datových sad v závislosti na tom, jak je uživatelé při trénování využívají; FileDatasets a TabularDatasets. Oba typy se dají použít v pracovních postupech trénování služby Azure Machine Learning, které zahrnují nástroje pro posouzení, AutoML, HyperDrive a kanály.

Datová sada souborů

FileDataset odkazuje na jeden nebo více souborů ve vašich úložištích dat nebo veřejných adresách URL. Pokud jsou data už vyčištěná a připravená k použití v trénovacích experimentech, můžete soubory stáhnout nebo připojit k výpočetním prostředkům jako objekt FileDataset.

Pro pracovní postupy strojového učení doporučujeme FileDatasets, protože zdrojové soubory můžou být v libovolném formátu, což umožňuje širší škálu scénářů strojového učení, včetně hlubokého učení.

Vytvořte sadu FileDataset pomocí sady Python SDK nebo studio Azure Machine Learning .

Tabulková datová sada

TabularDataset představuje data v tabulkovém formátu parsováním zadaného souboru nebo seznamu souborů. Získáte tak možnost materializovat data do datového rámce pandas nebo Sparku, abyste mohli pracovat se známými knihovnami pro přípravu a trénování dat, aniž byste museli opustit poznámkový blok. Objekt můžete vytvořit TabularDataset ze souborů .csv, .tsv, .parquet, .jsonl a z výsledků dotazu SQL.

Pomocí TabularDatasets můžete zadat časové razítko ze sloupce v datech nebo z místa, kde jsou uložená data vzoru cesty, a povolit tak vlastnost časové řady. Tato specifikace umožňuje snadné a efektivní filtrování podle času. Příklad najdete v tématu Ukázka rozhraní API související s tabulkovými časovými řadami s daty o počasí NOAA.

Vytvořte tabulkovou datovou sadu pomocí sady Python SDK nebo studio Azure Machine Learning.

Poznámka

Automatizované pracovní postupy ML vygenerované prostřednictvím studio Azure Machine Learning aktuálně podporují pouze tabulkové datové sady.

Poznámka

U tabulkových datových sad, které generují výsledky dotazu SQL, se nepodporuje T-SQL (např. dílčí dotaz WITH) nebo duplicitní název sloupce. Složité dotazy, jako je T-SQL, můžou způsobovat problémy s výkonem. Duplicitní názvy sloupců v datové sadě můžou způsobit problémy s nejednoznačností.

Přístup k datovým sadám ve virtuální síti

Pokud je váš pracovní prostor ve virtuální síti, musíte nakonfigurovat datovou sadu tak, aby ověřování přeskočila. Další informace o tom, jak používat úložiště dat a datové sady ve virtuální síti, najdete v tématu Zabezpečení pracovního prostoru a přidružených prostředků.

Vytváření datových sad z úložišť dat

Aby byla data přístupná službou Azure Machine Learning, musí se datové sady vytvářet z cest v úložištích dat nebo webových adresách URL služby Azure Machine Learning.

Tip

Datové sady můžete vytvářet přímo z adres URL úložiště s přístupem k datům založeným na identitě. Další informace najdete v tématu Připojení k úložišti s přístupem k datům na základě identity.

Vytvoření datových sad z úložiště dat pomocí sady Python SDK:

  1. Ověřte, že máte contributor základní službu úložiště registrovaného úložiště služby Azure Machine Learning nebo owner k této službě máte přístup. Zkontrolujte oprávnění účtu úložiště v Azure Portal.

  2. Vytvořte datovou sadu odkazem na cesty v úložišti dat. Datovou sadu můžete vytvořit z více cest ve více úložištích dat. Počet souborů nebo velikost dat, ze kterého můžete datovou sadu vytvořit, není nijak pevně omezen.

Poznámka

Pro každou cestu k datům se do služby úložiště odešle několik požadavků, které zkontrolují, jestli odkazuje na soubor nebo složku. Tato režie může vést ke snížení výkonu nebo selhání. Datová sada odkazující na jednu složku se 1000 soubory uvnitř se považuje za odkazující na jednu cestu k datům. Pro zajištění optimálního výkonu doporučujeme v úložištích dat vytvořit datovou sadu odkazující na méně než 100 cest.

Vytvoření sady FileDataset

from_files() Pomocí metody ve FileDatasetFactory třídě načtěte soubory v libovolném formátu a vytvořte neregistrovanou sadu FileDataset.

Pokud je vaše úložiště za virtuální sítí nebo bránou firewall, nastavte v from_files() metodě parametr validate=False . To obchází počáteční krok ověření a zajišťuje, že z těchto zabezpečených souborů můžete vytvořit datovou sadu. Přečtěte si další informace o tom, jak používat úložiště dat a datové sady ve virtuální síti.

from azureml.core import Workspace, Datastore, Dataset

# create a FileDataset pointing to files in 'animals' folder and its subfolders recursively
datastore_paths = [(datastore, 'animals')]
animal_ds = Dataset.File.from_files(path=datastore_paths)

# create a FileDataset from image and label files behind public web urls
web_paths = ['https://azureopendatastorage.blob.core.windows.net/mnist/train-images-idx3-ubyte.gz',
             'https://azureopendatastorage.blob.core.windows.net/mnist/train-labels-idx1-ubyte.gz']
mnist_ds = Dataset.File.from_files(path=web_paths)

Pokud chcete nahrát všechny soubory z místního adresáře, vytvořte FileDataset jednou metodou pomocí upload_directory(). Tato metoda nahrává data do základního úložiště a v důsledku toho vznikají náklady na úložiště.

from azureml.core import Workspace, Datastore, Dataset
from azureml.data.datapath import DataPath

ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
ds = Dataset.File.upload_directory(src_dir='<path to you data>',
           target=DataPath(datastore,  '<path on the datastore>'),
           show_progress=True)

Pokud chcete datové sady opakovaně používat a sdílet v rámci experimentu v pracovním prostoru, zaregistrujte datovou sadu.

Vytvoření tabulkové datové sady

from_delimited_files() Pomocí metody ve TabularDatasetFactory třídě můžete číst soubory ve formátu .csv nebo .tsv a vytvořit neregistrovanou tabulkovou datovou sadu. Pokud chcete číst soubory z formátu .parquet, použijte metodu from_parquet_files() . Pokud čtete z více souborů, výsledky se agregují do jedné tabulkové reprezentace.

Informace o podporovaných formátech souborů a vzorech syntaxe a návrhu, jako je podpora více řádků, najdete v referenční dokumentaci k TabularDatasetFactory.

Pokud je vaše úložiště za virtuální sítí nebo bránou firewall, nastavte parametr validate=False v from_delimited_files() metodě. Tím se počáteční ověřovací krok obchází a zajistí se, že z těchto zabezpečených souborů můžete vytvořit datovou sadu. Přečtěte si další informace o tom, jak používat úložiště dat a datové sady ve virtuální síti.

Následující kód získá existující pracovní prostor a požadované úložiště dat podle názvu. Potom předá úložiště dat a umístění souborů parametru path , aby se vytvořila nová sada TabularDataset weather_ds.

from azureml.core import Workspace, Datastore, Dataset

datastore_name = 'your datastore name'

# get existing workspace
workspace = Workspace.from_config()
    
# retrieve an existing datastore in the workspace by name
datastore = Datastore.get(workspace, datastore_name)

# create a TabularDataset from 3 file paths in datastore
datastore_paths = [(datastore, 'weather/2018/11.csv'),
                   (datastore, 'weather/2018/12.csv'),
                   (datastore, 'weather/2019/*.csv')]

weather_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths)

Nastavení schématu dat

Ve výchozím nastavení se při vytváření tabulkové datové typy sloupců odvozují automaticky. Pokud odvozené typy neodpovídají vašim očekáváním, můžete schéma datové sady aktualizovat zadáním typů sloupců s následujícím kódem. Parametr infer_column_type je použitelný pouze pro datové sady vytvořené ze souborů s oddělovači. Přečtěte si další informace o podporovaných datových typech.

from azureml.core import Dataset
from azureml.data.dataset_factory import DataType

# create a TabularDataset from a delimited file behind a public web url and convert column "Survived" to boolean
web_path ='https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_path, set_column_types={'Survived': DataType.to_bool()})

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) PassengerId (ID pasažéra) Přežil Třída Pclass Název Sex Věk SibSp Parch Ticket (Lístek) Jízdné Kabiny Pustil
0 1 Ne 3 Braund, pan Owen Harris male (muž) 22,0 1 0 A/5 21171 7.2500 S
1 2 Ano 1 Cumings, paní John Bradley (Florence Briggs Th... female (žena) 38.0 1 0 PC 17599 71.2833 C85 C
2 3 Ano 3 Heikkinen, slečno. Laina female (žena) 26.0 0 0 STON/O2. 3101282 7.9250 S

Pokud chcete datové sady opakovaně používat a sdílet mezi experimenty v pracovním prostoru, zaregistrujte datovou sadu.

Uspořádat data

Jakmile datovou sadu vytvoříte a zaregistrujete , můžete ji před trénováním modelu načíst do poznámkového bloku, abyste mohli měnit a zkoumat data.

Pokud nepotřebujete provádět žádné transformace nebo zkoumání dat, přečtěte si, jak využívat datové sady ve trénovacích skriptech pro odesílání experimentů ML v části Trénování s datovými sadami.

Filtrování datových sad (Preview)

Možnosti filtrování závisí na typu datové sady, kterou máte.

Důležité

Filtrování datových sad pomocí metody filter() Preview je experimentální funkce ve verzi Preview a může se kdykoli změnit.

U tabulkových datových sad můžete zachovat nebo odebrat sloupce pomocí metod keep_columns() a drop_columns().

Pokud chcete filtrovat řádky podle konkrétní hodnoty sloupce v TabularDataset, použijte metodu filter() (Preview).

Následující příklady vrátí neregistrovanou datovou sadu na základě zadaných výrazů.

# TabularDataset that only contains records where the age column value is greater than 15
tabular_dataset = tabular_dataset.filter(tabular_dataset['age'] > 15)

# TabularDataset that contains records where the name column value contains 'Bri' and the age column value is greater than 15
tabular_dataset = tabular_dataset.filter((tabular_dataset['name'].contains('Bri')) & (tabular_dataset['age'] > 15))

V části FileDatasets každý řádek odpovídá cestě k souboru, takže filtrování podle hodnoty sloupce není užitečné. Řádky ale můžete filtrovat podle metadat, jako je CreationTime, Size atd.

Následující příklady vrátí neregistrovanou datovou sadu na základě zadaných výrazů.

# FileDataset that only contains files where Size is less than 100000
file_dataset = file_dataset.filter(file_dataset.file_metadata['Size'] < 100000)

# FileDataset that only contains files that were either created prior to Jan 1, 2020 or where 
file_dataset = file_dataset.filter((file_dataset.file_metadata['CreatedTime'] < datetime(2020,1,1)) | (file_dataset.file_metadata['CanSeek'] == False))

Speciálním případem jsou označené datové sady vytvořené z projektů označování obrázků. Tyto datové sady jsou typem TabularDataset, který se skládá ze souborů obrázků. U těchto typů datových sad můžete filtrovat obrázky podle metadat a podle hodnot sloupců, jako je label a image_details.

# Dataset that only contains records where the label column value is dog
labeled_dataset = labeled_dataset.filter(labeled_dataset['label'] == 'dog')

# Dataset that only contains records where the label and isCrowd columns are True and where the file size is larger than 100000
labeled_dataset = labeled_dataset.filter((labeled_dataset['label']['isCrowd'] == True) & (labeled_dataset.file_metadata['Size'] > 100000))

Dělení dat

Datovou sadu můžete rozdělit zahrnutím parametru partitions_format při vytváření TabularDataset nebo FileDataset.

Při dělení datové sady se informace o oddílech každé cesty k souboru extrahují do sloupců na základě zadaného formátu. Formát by měl začínat od pozice prvního klíče oddílu až do konce cesty k souboru.

Například vzhledem k cestě ../Accounts/2019/01/01/data.jsonl , kde je oddíl podle názvu oddělení a času, partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' vytvoří řetězec sloupec "Oddělení" s hodnotou Accounts a sloupec datetime PartitionDate s hodnotou 2019-01-01.

Pokud vaše data již mají existující oddíly a chcete zachovat tento formát, zahrňte partitioned_format parametr do metody from_files() pro vytvoření FileDataset.

Pokud chcete vytvořit tabulkovoudataset, která zachová existující oddíly, zahrňte partitioned_format parametr do metody from_parquet_files() nebo from_delimited_files().

Následující příklad:

  • Vytvoří fileDataset z dělených souborů.
  • Získá klíče oddílu.
  • Vytvoří novou indexovanou sadu FileDataset pomocí

file_dataset = Dataset.File.from_files(data_paths, partition_format = '{userid}/*.wav')
ds.register(name='speech_dataset')

# access partition_keys
indexes = file_dataset.partition_keys # ['userid']

# get all partition key value pairs should return [{'userid': 'user1'}, {'userid': 'user2'}]
partitions = file_dataset.get_partition_key_values()


partitions = file_dataset.get_partition_key_values(['userid'])
# return [{'userid': 'user1'}, {'userid': 'user2'}]

# filter API, this will only download data from user1/ folder
new_file_dataset = file_dataset.filter(ds['userid'] == 'user1').download()

Můžete také vytvořit novou strukturu oddílů pro TabularDatasets pomocí metody partitions_by().


 dataset = Dataset.get_by_name('test') # indexed by country, state, partition_date

# call partition_by locally
new_dataset = ds.partition_by(name="repartitioned_ds", partition_keys=['country'], target=DataPath(datastore, "repartition"))
partition_keys = new_dataset.partition_keys # ['country']

Zkoumání dat

Po dokončení úprav dat můžete datovou sadu zaregistrovat a pak ji načíst do poznámkového bloku, abyste mohli prozkoumat data před trénováním modelu.

U fileDatasets můžete datovou sadu připojit nebo stáhnout a použít knihovny Pythonu, které byste normálně používali pro zkoumání dat. Přečtěte si další informace o připojení a stahování.

# download the dataset 
dataset.download(target_path='.', overwrite=False) 

# mount dataset to the temp directory at `mounted_path`

import tempfile
mounted_path = tempfile.mkdtemp()
mount_context = dataset.mount(mounted_path)

mount_context.start()

Pro TabularDatasets použijte metodu to_pandas_dataframe() k zobrazení dat v datovém rámci.

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) PassengerId (ID pasažéra) Přežil Pclass Název Sex Věk SibSp Parchovat Ticket (Lístek) Jízdné Kabiny Pustil
0 1 Ne 3 Braund, pan Owen Harris male (muž) 22,0 1 0 A/5 21171 7.2500 S
1 2 Ano 1 Cumings, paní John Bradley (Florence Briggs Th... female (žena) 38.0 1 0 PC 17599 71.2833 C85 C
2 3 Ano 3 Heikkinen, slečno. Laina female (žena) 26.0 0 0 STON/O2. 3101282 7.9250 S

Vytvoření datové sady z datového rámce pandas

Pokud chcete vytvořit TabularDataset z datového rámce pandas v paměti, použijte metodu register_pandas_dataframe() . Tato metoda zaregistruje TabularDataset do pracovního prostoru a nahraje data do základního úložiště, což účtují náklady na úložiště.

from azureml.core import Workspace, Datastore, Dataset
import pandas as pd

pandas_df = pd.read_csv('<path to your csv file>')
ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
dataset = Dataset.Tabular.register_pandas_dataframe(pandas_df, datastore, "dataset_from_pandas_df", show_progress=True)

Tip

Vytvořte a zaregistrujte tabulkovou datovou sadu z datového rámce Sparku v paměti nebo datového rámce dask pomocí metod register_spark_dataframe() verze Public Preview a register_dask_dataframe(). Tyto metody jsou experimentální funkce ve verzi Preview a můžou se kdykoli změnit.

Tyto metody nahrávají data do základního úložiště a v důsledku toho účtují náklady na úložiště.

Registrace datových sad

Proces vytváření dokončíte registrací datových sad v pracovním prostoru. Použijte metodu register() k registraci datových sad ve vašem pracovním prostoru, abyste je mohli sdílet s ostatními a opakovaně je používat v experimentech v pracovním prostoru:

titanic_ds = titanic_ds.register(workspace=workspace,
                                 name='titanic_ds',
                                 description='titanic training data')

Vytváření datových sad pomocí Azure Resource Manager

Existuje mnoho šablon na webu https://github.com/Azure/azure-quickstart-templates/tree/master//quickstarts/microsoft.machinelearningservices , které lze použít k vytvoření datových sad.

Informace o použití těchto šablon najdete v tématu Použití šablony Azure Resource Manager k vytvoření pracovního prostoru pro Azure Machine Learning.

Trénování s datovými sadami

Používejte datové sady v experimentech strojového učení pro trénování modelů ML. Přečtěte si další informace o tom, jak trénovat pomocí datových sad.

Verze datových sad

Novou datovou sadu pod stejným názvem můžete zaregistrovat vytvořením nové verze. Verze datové sady představuje způsob, jak vytvořit záložku stavu dat, abyste mohli použít konkrétní verzi datové sady pro experimentování nebo budoucí reprodukci. Přečtěte si další informace o verzích datových sad.

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

# create a new version of titanic_ds
titanic_ds = titanic_ds.register(workspace = workspace,
                                 name = 'titanic_ds',
                                 description = 'new titanic training data',
                                 create_new_version = True)

Další kroky