Azure Machine Learning-adathalmazok létrehozása

ÉRVÉNYES:Python SDK azureml v1

Ebből a cikkből megtudhatja, hogyan hozhat létre Azure Machine Tanulás adatkészleteket az Azure Machine Tanulás Python SDK-val végzett helyi vagy távoli kísérletek adatainak eléréséhez. Az adathalmazok az Azure Machine Tanulás általános adathozzáférési munkafolyamatában való illeszkedéséről a Biztonságos hozzáférésű adatok című cikkben talál további információt.

Amikor létrehoz egy adathalmazt, az adatforrás helyére mutató hivatkozást és annak metaadatainak másolatát hozza létre. Mivel az adatok a meglévő helyen maradnak, nincs többlet tárolási költség, és nem kockáztatja az adatforrások integritását. Emellett az adathalmazok lazán kiértékelésre kerülnek, ami segít a munkafolyamatok teljesítményének javítására. Adatkészleteket adattárakból, nyilvános URL-címekből és Azure Open Datasetekből hozhat létre. Az alacsony kódszámú felhasználói élményről az Azure Machine Tanulás adatkészletek létrehozása az Azure Machine Tanulás studióval című témakörben olvashat.

Az Azure Machine Tanulás adatkészleteivel a következőket teheti:

  • Az adathalmazok által hivatkozott adatok egyetlen másolatának tárolása a tárban

  • Zökkenőmentesen elérheti az adatokat a modell betanítása során anélkül, hogy a kapcsolati sztring vagy az adatútvonalak miatt kellene aggódnia. Az adathalmazok betanításával kapcsolatos további információkért tekintse meg az adathalmazok betanításával kapcsolatos további tudnivalókat

  • Adatok megosztása és együttműködés más felhasználókkal

Fontos

A cikkben "előzetes verzióként" megjelölt elemek jelenleg nyilvános előzetes verzióban érhetők el. Az előzetes verzió szolgáltatásszint-szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Előfeltételek

Az adathalmazok létrehozásához és használatához a következőkre van szükség:

Feljegyzés

Egyes adathalmazosztályok függőségekkel rendelkeznek az azureml-dataprep csomaghoz, amely csak a 64 bites Pythonnal kompatibilis. Ha Linuxon fejleszt, ezek az osztályok a .NET Core 2.1-en alapulnak, és csak bizonyos disztribúciók támogatják őket. A támogatott disztribúciókkal kapcsolatos további információkért olvassa el a .NET Core 2.1 oszlopot a .NET telepítése Linuxon című cikkben.

Fontos

Bár a csomag a Linux disztribúciók régebbi verzióin is működik, nem javasoljuk, hogy olyan disztribúciót használjon, amely nincs általános támogatásban. Az általános támogatáson kívüli disztribúciók biztonsági résekkel rendelkezhetnek, mivel nem kapják meg a legújabb frissítéseket. Javasoljuk, hogy a disztribúció legújabb támogatott verzióját használja, amely kompatibilis a következővel: .

Számítási méretre vonatkozó útmutató

Adathalmaz létrehozásakor tekintse át a számítási feldolgozási teljesítményt és az adatok méretét a memóriában. A tárolóban lévő adatok mérete nem azonos az adatkeretben lévő adatok méretével. A CSV-fájlok adatai például akár 10-szer is kibővülhetnek egy adatkeretben, így egy 1 GB-os CSV-fájl 10 GB-ra nőhet egy adatkeretben.

A tömörített adatok tovább bővülhetnek. A tömörített parkettaformátumban tárolt húsz GB viszonylag ritka adat ~800 GB memóriára bővülhet. Mivel a Parquet-fájlok oszlopos formátumban tárolják az adatokat, ha csak az oszlopok felét szeretné, akkor csak ~400 GB memóriát kell betöltenie.

További információkért tekintse meg az Azure Machine Tanulás adatfeldolgozásának optimalizálásával kapcsolatos további tudnivalókat.

Adathalmaz-típusok

Két adathalmaztípus létezik, amelyek alapján a felhasználók hogyan használnak adathalmazokat a betanítás során: FileDatasets és TabularDatasets. Az Azure Machine Tanulás betanítási munkafolyamatok, amelyekbe becslők, AutoML, hyperDrive és folyamatok tartoznak, mindkét típust használhatják.

FileDataset

A FileDataset egy vagy több fájlra hivatkozik az adattárakban vagy a nyilvános URL-címeken. Ha az adatokat már megtisztították, és készen állnak a betanítási kísérletekben való használatra, letöltheti vagy csatlakoztathatja a fájlokat a számításhoz FileDataset-objektumként.

A gépi tanulási munkafolyamatokhoz javasoljuk a FileDatasets használatát, mert a forrásfájlok bármilyen formátumban lehetnek. Ez a gépi tanulási forgatókönyvek szélesebb körét teszi lehetővé, beleértve a mély tanulást is.

Hozzon létre egy FileDatasetet a Python SDK-val vagy az Azure Machine Tanulás Studióval.

TabularDataset

A TabularDataset a megadott fájlt vagy fájllistát elemzi, hogy táblázatos formátumban ábrázolja az adatokat. Ezt követően a pandas vagy a Spark DataFrame használatával már jól ismert adatelőkészítési és betanítási kódtárakkal dolgozhat, miközben a jegyzetfüzetben marad. Objektumot TabularDataset .csv, .tsv, .parquet, .json sorfájlokból és SQL-lekérdezési eredményekből hozhat létre.

A TabularDatasets használatával időbélyeget adhat meg az adatok egy oszlopából vagy az elérésiút-minta adatainak tárolásának helyéről, hogy lehetővé tegye az idősorozat-tulajdonságokat. Ez a specifikáció lehetővé teszi az egyszerű és hatékony szűrést idő szerint. Például látogasson el a Tabular time series-hez kapcsolódó API-bemutatóra NOAA időjárási adatokkal.

TabularDataset létrehozása a Python SDK-val vagy az Azure Machine Tanulás studióval.

Feljegyzés

Az Azure Machine Tanulás studio használatával létrehozott automatizált ml-munkafolyamatok jelenleg csak a TabularDatasetseteket támogatják.

Emellett az SQL-lekérdezés eredményeiből létrehozott TabularDatasets függvények esetében a T-SQL (pl. "WITH" al lekérdezés) vagy az ismétlődő oszlopnevek nem támogatottak. Az összetett T-SQL-lekérdezések teljesítményproblémákat okozhatnak. Az adathalmaz ismétlődő oszlopnevei kétértelműségi problémákat okozhatnak.

Adathalmazok elérése virtuális hálózaton

Ha a munkaterület egy virtuális hálózaton található, úgy kell konfigurálnia az adathalmazt, hogy kihagyja az érvényesítést. Az adattárak és adathalmazok virtuális hálózatokban való használatával kapcsolatos további információkért látogasson el a Munkaterület és a kapcsolódó erőforrások biztonságossá tételéhez.

Adatkészletek létrehozása adattárakból

Ahhoz, hogy az adatok elérhetők legyenek az Azure Machine Tanulás, létre kell hoznia adathalmazokat a webes URL-címek vagy az Azure Machine Tanulás-adattárak elérési útjaiból.

Tipp.

Az adatkészleteket közvetlenül a tárolási URL-címekről hozhatja létre identitásalapú adathozzáféréssel. További információkért látogasson el Csatlakozás identitásalapú adathozzáféréssel rendelkező tárolóba.

Adathalmazok létrehozása egy adattárból a Python SDK-val:

  1. Ellenőrizze, hogy rendelkezik-e contributor a regisztrált Azure Machine-Tanulás-adattár mögöttes tárolási szolgáltatásával vagy owner az ahhoz való hozzáféréssel. Ellenőrizze a tárfiók engedélyeit az Azure Portalon.

  2. Hozza létre az adathalmazt az adattár elérési útjaira való hivatkozással. Több adattárban több elérési útból is létrehozhat adathalmazt. Nincs korlátozva a fájlok vagy adatméretek száma, amelyekből adatkészletet hozhat létre.

Feljegyzés

Minden adatelérési út esetében a rendszer néhány kérést küld a tárolási szolgáltatásnak annak ellenőrzéséhez, hogy az egy fájlra vagy mappára mutat-e. Ez a többletterhelés teljesítménycsökkenéshez vagy meghibásodáshoz vezethet. Egy 1000 fájllal rendelkező mappára hivatkozó adathalmaz egy adatútvonalra hivatkozik. Az optimális teljesítmény érdekében javasoljuk, hogy olyan adathalmazokat hozzon létre, amelyek 100-nál kevesebb elérési útra hivatkoznak az adattárakban.

FileDataset létrehozása

Az osztály metódusával from_files()FileDatasetFactory bármilyen formátumban betölthet fájlokat, és létrehozhat egy nem regisztrált FileDatasetet.

Ha a tároló virtuális hálózat vagy tűzfal mögött található, adja meg a paramétert validate=False a from_files() metódusban. Ez megfelel a kezdeti érvényesítési lépésnek, és biztosítja, hogy ezekből a biztonságos fájlokból hozza létre az adathalmazt. További információkért látogasson el a virtuális hálózatban található adattárak és adatkészletek használatára.

from azureml.core import Workspace, Datastore, Dataset

# create a FileDataset recursively pointing to files in 'animals' folder and its subfolder
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)

Ha az összes fájlt egy helyi könyvtárból szeretné feltölteni, hozzon létre egy FileDatasetet egyetlen metódussal a következővel upload_directory(): . Ez a módszer feltölti az adatokat a mögöttes tárolóba, és emiatt tárolási költségek merülnek fel.

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)

Ha újra szeretné használni és megosztani az adathalmazokat a munkaterületen lévő kísérletek között, regisztrálja az adathalmazt.

TabularDataset létrehozása

Az osztály metódusával from_delimited_files()TabularDatasetFactory .csv vagy .tsv formátumban olvashat fájlokat, és létrehozhat egy nem regisztrált TabularDatasetet. Ha formátumból .parquet szeretne fájlokat olvasni, használja a metódust from_parquet_files() . Ha több fájlból olvas, az eredmények egyetlen táblázatos ábrázolásba lesznek összesítve.

A támogatott fájlformátumokkal kapcsolatos információkért tekintse meg a TabularDatasetFactory referenciadokumentációját, valamint a szintaxissal és a tervezési mintákkal, például a többsoros támogatással kapcsolatos információkat.

Ha a tároló virtuális hálózat vagy tűzfal mögött található, adja meg a paramétert validate=False a from_delimited_files() metódusban. Ez megfelel a kezdeti érvényesítési lépésnek, és biztosítja, hogy ezekből a biztonságos fájlokból hozza létre az adathalmazt. A virtuális hálózat vagy tűzfal mögötti adattárolási erőforrásokról további információt a virtuális hálózaton található adattárakban és adatkészletekben talál.

Ez a kód név alapján lekéri a meglévő munkaterületet és a kívánt adattárat. Ezután átadja az adattárat és a fájlhelyeket a path paraméternek, hogy létrehozhasson egy új TabularDataset nevűt 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)

Adatséma beállítása

TabularDataset létrehozásakor az oszlop adattípusai alapértelmezés szerint automatikusan következtetnek. Ha a kikövetkeztetett típusok nem felelnek meg az elvárásainak, az adatkészlet frissítéséhez az alábbi kóddal megadhatja az oszloptípusokat. A paraméter infer_column_type csak a tagolt fájlokból létrehozott adathalmazokra vonatkozik. További információ: További információ a támogatott adattípusokról.

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) Utasazonosító Túlélte Pclass Név Nem Kor SibSp Pergamen Jegy Viteldíj Kabin Behajózva
0 0 Hamis 3 Braund, Mr. Owen Harris male 22,0 0 0 A/5 21171 7.2500 V
0 2 Igaz 0 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 0 0 PC 17599 71.2833 C85 C
2 3 Igaz 3 Heikkinen, Miss. Laina female 26,0 0 0 STON/O2. 3101282 7.9250 V

Ha újra szeretné használni és megosztani az adathalmazokat a munkaterületen lévő kísérletek között, regisztrálja az adathalmazt.

Adatok átfésülése

Miután létrehozta és regisztrálta az adathalmazt, a modell betanítása előtt betöltheti az adathalmazt a jegyzetfüzetbe adatkonvergálás és -feltárás céljából. Előfordulhat, hogy nem kell adattovábbítást vagy -feltárást végeznie. Ebben az esetben az ml-kísérletek beküldéséhez használt betanítási szkriptekben lévő adathalmazok felhasználásával kapcsolatos további információkért látogasson el a Betanítás adathalmazokkal című témakörbe.

Adathalmazok szűrése (előzetes verzió)

A szűrési képességek az adathalmaz típusától függenek.

Fontos

Az adathalmazok előzetes verziós módszerrel történő filter() szűrése kísérleti előzetes verziójú funkció, amely bármikor változhat.

TabularDatasets esetén a keep_columns() és drop_columns() metódusokkal megtarthatja vagy eltávolíthatja az oszlopokat.

Ha egy TabularDataset adott oszlopértéke alapján szeretné kiszűrni a sorokat, használja a filter() metódust (előzetes verzió).

Ezek a példák egy nem regisztrált adatkészletet ad vissza a megadott kifejezések alapján:

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

A FileDatasetsben minden sor egy fájl elérési útjának felel meg, ezért az oszlopérték szerinti szűrés nem segít. A sorokat azonban metaadatok alapján is szűrheti ( például CreationTime, Size stb. Ezek a példák egy nem regisztrált adatkészletet ad vissza a megadott kifejezések alapján:

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

A képfeliratozási projektekből létrehozott címkézett adathalmazok különleges esetnek számítanak. Ezek az adathalmazok képfájlokból álló TabularDataset típusúak. Ezekhez az adathalmazokhoz metaadatok image_detailslabel, valamint oszlopértékek alapján szűrheti a képeket.

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

Partícióadatok

Adathalmaz particionálásához adja meg a partitions_format paramétert a TabularDataset vagy a FileDataset létrehozásakor.

Adathalmaz particionálásakor az egyes fájlelérési utak partícióadatai a megadott formátum alapján oszlopokba lesznek kinyerve. A formátumnak az első partíciókulcs helyétől kell kezdődnie, és a fájl elérési útjának végéig kell folytatódnia.

Ha például az elérési út ../Accounts/2019/01/01/data.jsonlalapján a partíció részlegnév és idő szerint van megadva, a partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' rendszer létrehoz egy "Részleg" sztringoszlopot a "Fiókok" értékkel, és egy "PartitionDate" datetime oszlopot az értékkel 2019-01-01.

Ha az adatok már tartalmaznak meglévő partíciókat, és meg szeretné őrizni ezt a formátumot, adja meg a paramétert a partitioned_formatfrom_files() metódusban egy FileDataset létrehozásához.

A meglévő partíciókat megőrző TabularDataset létrehozásához adja meg a partitioned_format paramétert a metódusban vagy a from_parquet_files()from_delimited_files() metódusban.

Ez a példa

  • FileDataset létrehozása particionált fájlokból
  • A partíciókulcsok lekérdezése
  • Új, indexelt FileDataset létrehozása

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

A TabularDatasets új partícióstruktúráját is létrehozhatja a partition_by() metódussal.


 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']

Adatok megismerése

Az adatok átrendezése után regisztrálhatja az adathalmazt, majd betöltheti őket a jegyzetfüzetbe adatfeltáráshoz a modell betanítása előtt.

FileDatasets esetén csatlakoztathatja vagy letöltheti az adathalmazt, és alkalmazhatja az adatfeltáráshoz általában használt Python-kódtárakat. További információ: További információ a csatlakoztatásról és a letöltésről.

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

TabularDatasets esetén használja a to_pandas_dataframe() metódust az adatok adatkeretben való megtekintésére.

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) Utasazonosító Túlélte Pclass Név Nem Kor SibSp Pergamen Jegy Viteldíj Kabin Behajózva
0 0 Hamis 3 Braund, Mr. Owen Harris male 22,0 0 0 A/5 21171 7.2500 V
0 2 Igaz 0 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 0 0 PC 17599 71.2833 C85 C
2 3 Igaz 3 Heikkinen, Miss. Laina female 26,0 0 0 STON/O2. 3101282 7.9250 V

Adatkészlet létrehozása pandas-adatkeretből

TabularDataset memóriabeli pandas-adatkeretből való létrehozásához használja a metódust register_pandas_dataframe() . Ez a módszer regisztrálja a TabularDatasetet a munkaterületen, és feltölti az adatokat a mögöttes tárolóba. Ez a folyamat tárolási költségeket von maga után.

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)

Tipp.

Hozzon létre és regisztráljon egy TabularDatasetet egy memóriabeli Spark-adatkeretből vagy egy dask-adatkeretből a nyilvános előzetes verziós metódusokkal, register_spark_dataframe() és register_dask_dataframe(). Ezek a módszerek kísérleti előzetes verziójú funkciók, és bármikor változhatnak.

Ezek a módszerek adatokat töltenek fel a mögöttes tárolóba, és emiatt tárolási költségekkel járnak.

Adathalmazok regisztrálása

A létrehozási folyamat befejezéséhez regisztrálja az adathalmazokat egy munkaterületen. Ezzel a register() módszerrel regisztrálhatja az adathalmazokat a munkaterületén, megoszthatja őket másokkal, és újra felhasználhatja őket a munkaterületen végzett kísérletek során:

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

Adatkészletek létrehozása az Azure Resource Managerrel

A microsoft.machinelearningservices webhelyen számos olyan sablon található, amelyek adathalmazok létrehozásához használhatók.

Ezekről a sablonokról az Azure Resource Manager-sablon használatával hozhat létre munkaterületet az Azure Machine Tanulás.

Betanítás adathalmazok használatával

Az adathalmazokat gépi tanulási kísérletekben használhatja az ML-modellek betanításához. További információ az adathalmazok betanításairól.

Verzióadatkészletek

Új verzió létrehozásával új adathalmazt regisztrálhat ugyanazzal a névvel. Az adathalmazok verziója könyvjelzővel láthatja el az adatok állapotát, így az adathalmaz egy adott verzióját alkalmazhatja kísérletezésre vagy későbbi többszörözésre. További információkért látogasson el az adathalmaz verzióira.

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

Következő lépések