Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
PLATÍ PRO:
Python SDK azure-ai-ml v2 (aktuální)
Projekt strojového učení obvykle začíná průzkumnou analýzou dat (EDA) a předzpracováním dat (čištění, příprava funkcí). Zahrnuje také vytváření prototypů modelu strojového učení pro ověření hypotéz. Tato fáze projektu vytváření prototypů je vysoce interaktivní a hodí se k vývoji v poznámkovém bloku Jupyter nebo v integrovaném vývojovém prostředí s interaktivní konzolou Pythonu. V tomto článku se naučíte:
- Získejte přístup k datům z URI úložiště dat Azure Machine Learning, jako byste pracovali se systémem souborů.
- Materializace datových prostředků služby Azure Machine Learning do Pandas pomocí
mltableknihovny Pythonu - Materializace dat prostřednictvím explicitního stažení pomocí
azcopynástroje.
Požadavky
- Pracovní prostor služby Azure Machine Learning. Další informace najdete v tématu Správa pracovních prostorů Služby Azure Machine Learning na portálu nebo pomocí sady Python SDK (v2).
- Úložiště dat služby Azure Machine Learning Další informace najdete v tématu Vytváření úložišť dat.
Návod
Pokyny v tomto článku popisují přístup k datům během interaktivního vývoje. Platí pro každého hostitele, který může spustit relaci Pythonu. Tento hostitel může být váš místní počítač, cloudový virtuální počítač, GitHub Codespace nebo jiný hostitel. Použijte výpočetní instanci Azure Machine Learning – plně spravovanou a předkonfigurovanou cloudovou pracovní stanici. Další informace najdete v tématu Vytvoření výpočetní instance služby Azure Machine Learning.
Důležité
Ujistěte se, že v prostředí Python máte nainstalované nejnovější knihovny: azure-fsspec, mltable a azure-ai-ml.
pip install -U azureml-fsspec==1.3.1 mltable azure-ai-ml
azure-fsspec Nejnovější verze balíčku se může v průběhu času měnit. Další informace o balíčku azure-fsspec naleznete v azureml-fsspec 1.3.1.
Přistupujte k datům z URI úložiště dat stejným způsobem, jako byste přistupovali k souborovému systému.
Úložiště dat Azure Machine Learning je odkazem na existující účet úložiště Azure. Mezi výhody vytváření a používání úložišť dat patří:
- Běžné snadno použitelné rozhraní API pro interakci s různými typy úložiště (objekt blob, soubor, Azure Data Lake Storage).
- Snadné zjišťování užitečných úložišť dat v týmových operacích
- Podpora přístupu k datům na základě přihlašovacích údajů (například tokenu SAS) i přístupu k datům na základě identity (Microsoft Entra ID nebo spravované identity).
- Pro přístup na základě přihlašovacích údajů jsou informace o připojení zabezpečené, aby se zabránilo ohrožení klíče ve skriptech.
- V uživatelském rozhraní nástroje Azure Machine Learning Studio můžete procházet data a kopírovat a vkládat identifikátory URI úložiště dat.
Datastore URI je jednotný identifikátor prostředku, který odkazuje na umístění úložiště (cestu) ve vašem účtu úložiště Azure. Identifikátor URI úložiště dat má tento formát:
# Azure Machine Learning workspace details:
subscription = '<subscription_ID>'
resource_group = '<resource_group>'
workspace = '<workspace>'
datastore_name = '<datastore>'
path_on_datastore = '<path>'
# Long-form datastore URI format:
uri = f'azureml://subscriptions/{subscription}/resourcegroups/{resource_group}/workspaces/{workspace}/datastores/{datastore_name}/paths/{path_on_datastore}'.
Tyto identifikátory URI úložiště dat jsou známou implementací specifikace systému souborů (fsspec): jednotné rozhraní Pythonic pro místní, vzdálené a vložené systémy souborů a bajtové úložiště. Nejprve pomocí nástroje pip nainstalujte azureml-fsspec balíček a jeho balíček závislostí azureml-dataprep . Pak můžete použít implementaci úložiště fsspec dat služby Azure Machine Learning.
Implementace úložiště fsspec dat Azure Machine Learning automaticky zpracovává předávání přihlašovacích údajů nebo identity, které používá úložiště dat Azure Machine Learning. Můžete se vyhnout vystavení klíče účtu ve skriptech a vyhnout se zbytečným přihlašovacím procedurám na výpočetním uzlu.
Můžete například přímo použít URI úložišť dat v knihovně Pandas. Tento příklad ukazuje, jak číst soubor CSV:
import pandas as pd
df = pd.read_csv("azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/<folder>/<filename>.csv")
df.head()
Návod
Abyste nemuseli pamatovat formát identifikátoru URI úložiště dat, můžete identifikátor URI úložiště dat zkopírovat a vložit do uživatelského rozhraní studia pomocí následujícího postupu:
- V nabídce vlevo vyberte Data a pak vyberte kartu Úložiště dat .
- Vyberte název úložiště dat a pak vyberte Procházet.
- Najděte soubor nebo složku, kterou chcete číst do Pandasu, vyberte tři tečky (...) vedle něj a pak vyberte Kopírovat identifikátor URI. Pak můžete vybrat identifikátor URI úložiště dat, který chcete zkopírovat do poznámkového bloku nebo skriptu.
Můžete také vytvořit instanci systému souborů Azure Machine Learning pro zpracování příkazů podobných systému souborů, jako jsou ls, glob, existsa open.
- Metoda
ls()uvádí soubory v určitém adresáři. Můžete použítls(),ls(.)als (<folder_level_1>/<folder_level_2>)k vypsání souborů. Relativní cesty podporují jak., tak... - Metoda
glob()podporuje*a**globbing. - Metoda
exists()vrátí logickou hodnotu, která označuje, zda zadaný soubor existuje v aktuálním kořenovém adresáři. - Metoda
open()vrátí objekt podobný souboru, který lze předat jakékoli jiné knihovně, která očekává, že bude pracovat se soubory Pythonu. Váš kód může tento objekt také použít, jako by se jednalo o normální objekt souboru Pythonu. Tyto objekty podobné souboru respektují použitíwithkontextů, jak je znázorněno v tomto příkladu:
from azureml.fsspec import AzureMachineLearningFileSystem
# Instantiate the filesystem by using the following URI.
fs = AzureMachineLearningFileSystem('azureml://subscriptions/<subscriptionID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>')
fs.ls() # List folders and files in datastore datastorename.
# Output example:
# folder1
# folder2
# file3.csv
# Use an open context.
with fs.open('./folder1/file1.csv') as f:
# Do some process.
process_file(f)
Nahrání souborů pomocí AzureMachineLearningFileSystem
from azureml.fsspec import AzureMachineLearningFileSystem
# Instantiate the filesystem by using the following URI.
fs = AzureMachineLearningFileSystem('azureml://subscriptions/<subscriptionID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/')
# You can set recursive to False to upload a file.
fs.upload(lpath='data/upload_files/crime-spring.csv', rpath='data/fsspec', recursive=False, **{'overwrite': 'MERGE_WITH_OVERWRITE'})
# You need to set recursive to True to upload a folder.
fs.upload(lpath='data/upload_folder/', rpath='data/fsspec_folder', recursive=True, **{'overwrite': 'MERGE_WITH_OVERWRITE'})
lpath je místní cesta a rpath je to vzdálená cesta.
Pokud zadané složky rpath neexistují, metoda vytvoří složky za vás.
Metoda podporuje tři overwrite režimy:
- PŘIPOJIT. Pokud v cílové cestě existuje soubor se stejným názvem, funkce APPEND zachová původní soubor.
- FAIL_ON_FILE_CONFLICT. Pokud v cílové cestě existuje soubor se stejným názvem, FAIL_ON_FILE_CONFLICT vyvolá chybu.
- MERGE_WITH_OVERWRITE. Pokud v cílové cestě existuje soubor se stejným názvem, MERGE_WITH_OVERWRITE přepíše tento soubor novým souborem.
Stažení souborů pomocí AzureMachineLearningFileSystem
# You can set recursive to False to download a file.
# The downloading overwrite option is determined by the local system. It's MERGE_WITH_OVERWRITE.
fs.download(rpath='data/fsspec/crime-spring.csv', lpath='data/download_files/', recursive=False)
# You need to set recursive to True to download a folder.
fs.download(rpath='data/fsspec_folder', lpath='data/download_folder/', recursive=True)
Příklady
Tyto příklady ukazují, jak používat specifikace systému souborů v běžných scénářích.
Čtení jednoho souboru CSV do Pandas
Jeden soubor CSV můžete do Pandas přečíst pomocí tohoto kódu:
import pandas as pd
df = pd.read_csv("azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/<folder>/<file_name>.csv")
Čtení složky souborů CSV do Pandas
Metoda Pandas read_csv() nepodporuje čtení složky souborů CSV. Pokud chcete toto omezení zpracovat, použijte glob k získání CSV cest a sloučení do datového rámce s využitím metody Pandas concat(). Následující ukázka kódu ukazuje, jak tuto zřetězení dosáhnout pomocí systému souborů Azure Machine Learning:
import pandas as pd
from azureml.fsspec import AzureMachineLearningFileSystem
# Define the URI. Update <> placeholders.
uri = 'azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>'
# Create the filesystem.
fs = AzureMachineLearningFileSystem(uri)
# Append .csv files in the folder to a list.
dflist = []
for path in fs.glob('/<folder>/*.csv'):
with fs.open(path) as f:
dflist.append(pd.read_csv(f))
# Concatenate data frames.
df = pd.concat(dflist)
df.head()
Čtení souborů CSV do Dask
Tento příklad ukazuje, jak číst soubor CSV do datového rámce Dask:
import dask.dd as dd
df = dd.read_csv("azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/<folder>/<file_name>.csv")
df.head()
Čtení složky souborů parquet do Pandas
Během procesu ETL se soubory Parquet obvykle zapisují do složky. Proces pak může generovat soubory relevantní pro ETL, jako je průběh, potvrzení a další metadata. Tento příklad ukazuje soubory vytvořené z procesu ETL (soubory začínající _), které poté vytvoří datový soubor ve formátu Parquet.
V těchto scénářích čtete jenom soubory Parquet ve složce. Soubory procesu ETL ignorujete. Tento vzorový kód ukazuje, jak můžou vzory globů číst pouze soubory Parquet ve složce:
import pandas as pd
from azureml.fsspec import AzureMachineLearningFileSystem
# Define the URI. Update <> placeholders.
uri = 'azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>'
# Create the filesystem.
fs = AzureMachineLearningFileSystem(uri)
# Append Parquet files in folder to a list.
dflist = []
for path in fs.glob('/<folder>/*.parquet'):
with fs.open(path) as f:
dflist.append(pd.read_parquet(f))
# Concatenate data frames.
df = pd.concat(dflist)
df.head()
Přístup k datům ze systému souborů Azure Databricks
Specifikace systému souborů (fsspec) má řadu známých implementací, včetně systému souborů Databricks (dbfs).
Pokud chcete získat přístup k datům dbfs z prostředku, potřebujete:
- Název instance ve formě
adb-<number>.<number>.azuredatabricks.net. Tuto hodnotu najdete v adrese URL pracovního prostoru Azure Databricks. - Osobní přístupový token. Další informace o vytváření osobních přístupových tokenů najdete v tématu Ověřování pomocí osobních přístupových tokenů Azure Databricks (starší verze).
Pomocí těchto hodnot vytvořte proměnnou prostředí pro token PAT ve výpočetní instanci:
export ADB_PAT=<personal_access_token>
Pak můžete přistupovat k datům v Knihovně Pandas, jak je znázorněno v tomto příkladu:
import os
import pandas as pd
pat = os.getenv(ADB_PAT)
path_on_dbfs = '<absolute_path_on_dbfs>' # e.g. /folder/subfolder/file.csv
storage_options = {
'instance':'adb-<number>.<number>.azuredatabricks.net',
'token': pat
}
df = pd.read_csv(f'dbfs://{path_on_dbfs}', storage_options=storage_options)
Čtení obrázků pomocí pillow
from PIL import Image
from azureml.fsspec import AzureMachineLearningFileSystem
# Define the URI. Update <> placeholders.
uri = 'azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>'
# Create the filesystem.
fs = AzureMachineLearningFileSystem(uri)
with fs.open('/<folder>/<image.jpeg>') as f:
img = Image.open(f)
img.show()
Příklad vlastní datové sady PyTorch
V tomto příkladu vytvoříte vlastní datovou sadu PyTorch pro zpracování obrázků. V tomto scénáři existuje soubor poznámek (ve formátu CSV) s touto celkovou strukturou:
image_path, label
0/image0.png, label0
0/image1.png, label0
1/image2.png, label1
1/image3.png, label1
2/image4.png, label2
2/image5.png, label2
Podsložky ukládají tyto obrázky podle jejich popisků:
/
└── 📁images
├── 📁0
│ ├── 📷image0.png
│ └── 📷image1.png
├── 📁1
│ ├── 📷image2.png
│ └── 📷image3.png
└── 📁2
├── 📷image4.png
└── 📷image5.png
Vlastní třída datové sady PyTorch musí implementovat tři funkce: __init____len__, a __getitem__, jak je znázorněno zde:
import os
import pandas as pd
from PIL import Image
from torch.utils.data import Dataset
class CustomImageDataset(Dataset):
def __init__(self, filesystem, annotations_file, img_dir, transform=None, target_transform=None):
self.fs = filesystem
f = filesystem.open(annotations_file)
self.img_labels = pd.read_csv(f)
f.close()
self.img_dir = img_dir
self.transform = transform
self.target_transform = target_transform
def __len__(self):
return len(self.img_labels)
def __getitem__(self, idx):
img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])
f = self.fs.open(img_path)
image = Image.open(f)
f.close()
label = self.img_labels.iloc[idx, 1]
if self.transform:
image = self.transform(image)
if self.target_transform:
label = self.target_transform(label)
return image, label
Potom můžete vytvořit instanci datové sady, jak je znázorněno tady:
from azureml.fsspec import AzureMachineLearningFileSystem
from torch.utils.data import DataLoader
# Define the URI. Update <> placeholders.
uri = 'azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<datastore_name>'
# Create the filesystem.
fs = AzureMachineLearningFileSystem(uri)
# Create the dataset.
training_data = CustomImageDataset(
filesystem=fs,
annotations_file='/annotations.csv',
img_dir='/<path_to_images>/'
)
# Prepare your data for training with DataLoaders.
train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
Materializace dat do Pandas pomocí mltable knihovny
Knihovna mltable vám také pomůže získat přístup k datům v cloudovém úložišti. Pro čtení dat do Pandas pomocí mltable použijte následující formát:
import mltable
# Define a path, folder, or pattern.
path = {
'file': '<supported_path>'
# alternatives
# 'folder': '<supported_path>'
# 'pattern': '<supported_path>'
}
# Create an mltable from paths.
tbl = mltable.from_delimited_files(paths=[path])
# alternatives
# tbl = mltable.from_parquet_files(paths=[path])
# tbl = mltable.from_json_lines_files(paths=[path])
# tbl = mltable.from_delta_lake(paths=[path])
# Materialize to Pandas.
df = tbl.to_pandas_dataframe()
df.head()
Podporované cesty
Knihovna mltable podporuje čtení tabulkových dat z různých typů cest:
| Umístění | Příklady |
|---|---|
| Cesta na místním počítači | ./home/username/data/my_data |
| Cesta na veřejném serveru HTTP(S) | https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv |
| Cesta ve službě Azure Storage | wasbs://<container_name>@<account_name>.blob.core.windows.net/<path> abfss://<file_system>@<account_name>.dfs.core.windows.net/<path> |
| Dlouhodobé úložiště dat služby Azure Machine Learning | azureml://subscriptions/<subscription_ID>/resourcegroups/<resource_group_name>/workspaces/<workspace_name>/datastores/<name>/paths/<path> |
Poznámka:
Pro cesty na úložištích Azure Storage a datových úložištích služby Azure Machine Learning mltable používá předání přihlašovacích údajů. Pokud nemáte oprávnění pro přístup k datům v podkladovém úložišti, nemůžete k nim získat přístup.
Soubory, složky a globy
mltable podporuje čtení z:
- Soubory: Například:
abfss://<file_system>@<account_name>.dfs.core.windows.net/my-csv.csv. - Složky. Například:
abfss://<file_system>@<account_name>.dfs.core.windows.net/my-folder/. -
globové vzory. Například:
abfss://<file_system>@<account_name>.dfs.core.windows.net/my-folder/*.csv. - Kombinace souborů, složek a/nebo vzorů globu
mltable umožňuje materializaci dat do jednoho datového rámce z kombinace místních a cloudových prostředků úložiště a kombinací souborů, složek a globů. Příklad:
path1 = {
'file': 'abfss://filesystem@account1.dfs.core.windows.net/my-csv.csv'
}
path2 = {
'folder': './home/username/data/my_data'
}
path3 = {
'pattern': 'abfss://filesystem@account2.dfs.core.windows.net/folder/*.csv'
}
tbl = mltable.from_delimited_files(paths=[path1, path2, path3])
Podporované formáty souborů
mltable podporuje následující formáty souborů.
- Text s oddělovači (například soubory CSV):
mltable.from_delimited_files(paths=[path]) - Parkety:
mltable.from_parquet_files(paths=[path]) - Delta:
mltable.from_delta_lake(paths=[path]) - Formát řádků JSON:
mltable.from_json_lines_files(paths=[path])
Příklady
Čtení souboru CSV
-
Data Lake Storage - Blob Storage
- Úložiště dat služby Azure Machine Learning
- Server HTTP
Zástupné symboly (<>) v tomto fragmentu kódu nahraďte hodnotami:
import mltable
path = {
'file': 'abfss://<filesystem>@<account>.dfs.core.windows.net/<folder>/<file_name>.csv'
}
tbl = mltable.from_delimited_files(paths=[path])
df = tbl.to_pandas_dataframe()
df.head()
Čtení souborů Parquet ve složce
** Tento příklad ukazuje, jak lze používat vzory typu glob, jako jsou zástupné znaky, aby se zajistilo, že se čtou pouze soubory „Parquet“.
-
Data Lake Storage - Blob Storage
- Úložiště dat služby Azure Machine Learning
- Server HTTP
Zástupné symboly (<>) v tomto fragmentu kódu nahraďte hodnotami:
import mltable
path = {
'pattern': 'abfss://<filesystem>@<account>.dfs.core.windows.net/<folder>/*.parquet'
}
tbl = mltable.from_parquet_files(paths=[path])
df = tbl.to_pandas_dataframe()
df.head()
Čtení datových prostředků
V této části se dozvíte, jak získat přístup k datovým prostředkům služby Azure Machine Learning v Pandas.
Asset tabulky
Pokud jste dříve vytvořili prostředek tabulky ve službě Azure Machine Learning ( mltable nebo v1 TabularDataset), můžete tento prostředek tabulky načíst do Pandas pomocí tohoto kódu:
import mltable
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
ml_client = MLClient.from_config(credential=DefaultAzureCredential())
data_asset = ml_client.data.get(name="<name_of_asset>", version="<version>")
tbl = mltable.load(f'azureml:/{data_asset.id}')
df = tbl.to_pandas_dataframe()
df.head()
Asset souboru
Pokud jste zaregistrovali soubor jako datový prostředek (například soubor CSV), můžete jej načíst do pandas DataFrame za použití následujícího kódu:
import mltable
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
ml_client = MLClient.from_config(credential=DefaultAzureCredential())
data_asset = ml_client.data.get(name="<name_of_asset>", version="<version>")
path = {
'file': data_asset.path
}
tbl = mltable.from_delimited_files(paths=[path])
df = tbl.to_pandas_dataframe()
df.head()
Asset složky
Pokud jste zaregistrovali prostředek složky (uri_folder nebo V1 FileDataset), například složku obsahující soubor CSV, můžete tento prostředek načíst do datového rámce Pandas pomocí tohoto kódu:
import mltable
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
ml_client = MLClient.from_config(credential=DefaultAzureCredential())
data_asset = ml_client.data.get(name="<name_of_asset>", version="<version>")
path = {
'folder': data_asset.path
}
tbl = mltable.from_delimited_files(paths=[path])
df = tbl.to_pandas_dataframe()
df.head()
Čtení a zpracování velkých objemů dat pomocí Pandas
Návod
Pandas není navržený tak, aby zpracovával velké datové sady. Pandas může zpracovávat pouze data, která se vejdou do paměti výpočetní instance.
Pro velké datové sady použijte Spark spravovaný službou Azure Machine Learning. Tato služba poskytuje rozhraní API PySpark Pandas.
Před vertikálním navýšením kapacity na vzdálenou asynchronní úlohu můžete chtít rychle iterovat menší podmnožinu velké datové sady.
mltable poskytuje funkce pro získání ukázek velkých dat prostřednictvím metody take_random_sample :
import mltable
path = {
'file': 'https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv'
}
tbl = mltable.from_delimited_files(paths=[path])
# Take a random 30% sample of the data.
tbl = tbl.take_random_sample(probability=.3)
df = tbl.to_pandas_dataframe()
df.head()
Pomocí těchto operací můžete také vzít podmnožinu velkých dat:
Stahování dat pomocí azcopy nástroje
azcopy Pomocí nástroje můžete stáhnout data do místního systému souborů SSD hostitele (místní počítač, cloudový virtuální počítač, výpočetní instance Azure Machine Learning atd.). Nástroj azcopy , který je předinstalovaný ve výpočetní instanci služby Azure Machine Learning, zpracovává stahování dat. Pokud nepoužíváte výpočetní instanci služby Azure Machine Learning nebo data Science Virtual Machine (DSVM), možná budete muset nainstalovat azcopy. Další informace najdete v tématu azcopy.
Upozornění
Nestahujte si data do /home/azureuser/cloudfiles/code umístění v rámci výpočetní instance. Toto umístění je určeno k ukládání artefaktů poznámkového bloku a kódu, nikoli dat. Čtení dat z tohoto umístění způsobuje během tréninku značné výkonové zatížení. Místo toho uložte data do home/azureuser umístění, což je místní SSD výpočetního uzlu.
Otevřete terminál a vytvořte nový adresář, například:
mkdir /home/azureuser/data
Přihlášení k azcopy:
azcopy login
Teď můžete kopírovat data pomocí identifikátoru URI úložiště:
SOURCE=https://<account_name>.blob.core.windows.net/<container>/<path>
DEST=/home/azureuser/data
azcopy cp $SOURCE $DEST