Creare un asset di dati

Completato

In qualità di scienziato dei dati, ci si vuole concentrare sul training dei modelli di Machine Learning. Anche se è necessario accedere ai dati come input per un modello di Machine Learning, non si vuole preoccuparsi di come ottenere l'accesso. Per semplificare l'accesso ai dati da usare, è possibile usare gli asset di dati.

Informazioni sugli asset dati

In Azure Machine Learning gli asset di dati sono riferimenti a dove vengono archiviati i dati, su come ottenere l'accesso e a tutti gli altri metadati pertinenti. È possibile creare asset di dati per ottenere l'accesso ai dati in archivi dati, servizi di archiviazione di Azure, URL pubblici o dati archiviati nel dispositivo locale.

I vantaggi dell'uso degli asset di dati sono:

  • È possibile condividere e riutilizzare i dati con altri membri del team in modo che non debbano ricordare i percorsi dei file.
  • È possibile accedere facilmente ai dati durante il training del modello (in qualsiasi tipo di calcolo supportato) senza preoccuparsi delle stringhe di connessione o dei percorsi dati.
  • È possibile eseguire il controllo versioni dei metadati dell'asset dati.

Esistono tre tipi principali di asset di dati che è possibile usare:

Diagramma di diversi tipi di asset di dati in Azure Machine Learning.

  • File URI: punta a un file specifico.
  • URI cartella: punta a una cartella.
  • MLTable: punta a una cartella o a un file e include uno schema da leggere come dati tabulari.

Nota

L'URI è l'identificatore di risorsa uniforme e rappresenta un percorso di archiviazione nel computer locale, BLOB di Azure o Data Lake Storage, un percorso HTTPS disponibile pubblicamente o anche un archivio dati collegato.

Quando usare asset di dati

Gli asset di dati sono più utili quando si eseguono attività di Machine Learning come processi di Azure Machine Learning. Come processo, è possibile eseguire uno script Python che accetta input e genera output. Un asset di dati può essere analizzato come input o output di un processo di Azure Machine Learning.

Si esaminerà ogni tipo di asset di dati, come crearli e come usarli in un processo.

Creare un asset di dati del file URI

Un asset di dati del file URI punta a un file specifico. Azure Machine Learning archivierà solo il percorso del file, per cui è possibile puntare a qualsiasi tipo di file. Quando si usa l'asset dati, si specifica come leggere i dati, il che dipende dal tipo di dati a cui ci si connette.

I percorsi supportati che è possibile usare durante la creazione di un asset di dati dei file URI sono:

  • Locale: ./<path>
  • Archiviazione BLOB di Azure: wasbs://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
  • Azure Data Lake Storage (Gen 2): abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>
  • Datastore: azureml://datastores/<datastore_name>/paths/<folder>/<file>

Importante

Quando si crea un asset dati e si punta a un file o a una cartella archiviata nel dispositivo locale, verrà caricata una copia del file o della cartella nell'archivio dati predefinito workspaceblobstore. È possibile trovare il file o la cartella nella cartella LocalUpload. Caricando una copia, sarà comunque possibile accedere ai dati dall'area di lavoro di Azure Machine Learning, anche quando il dispositivo locale in cui i dati vengono archiviati non è disponibile.

Per creare un asset di dati file URI, è possibile usare il codice seguente:

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FILE,
    description="<description>",
    name="<name>",
    version="<version>"
)

ml_client.data.create_or_update(my_data)

Quando si analizza l'asset di dati del file URI come input in un processo di Azure Machine Learning, è necessario leggere i dati prima di poterli usare.

Si supponga di creare uno script Python che si vuole eseguire come processo e di impostare il valore del parametro input_data di input come l'asset di dati del file URI (che punta a un file CSV). È possibile leggere i dati includendo il codice seguente nello script Python:

import argparse
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

df = pd.read_csv(args.input_data)
print(df.head(10))

Se l'asset dei dati del file URI punta a un tipo di file diverso, è necessario usare il codice Python appropriato per leggere i dati. Ad esempio, se invece di file CSV si usano file JSON, si userà invece pd.read_json().

Creare un asset di dati della cartella URI

Un asset di dati della cartella URI punta a una cartella specifica. Funziona in modo simile a un asset di dati dei file URI e supporta gli stessi percorsi.

Per creare un asset di dati della cartella URI con Python SDK, è possibile usare il codice seguente:

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FOLDER,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

Quando si analizza l'asset di dati della cartella URI come input in un processo di Azure Machine Learning, è necessario leggere i dati prima di poterli usare.

Si supponga di creare uno script Python che si vuole eseguire come processo e di impostare il valore del parametro input_data di input come l'asset di dati della cartella URI (che punta a più file CSV). È possibile leggere tutti i file CSV nella cartella e concatenarli, includendo il codice seguente nello script Python:

import argparse
import glob
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

data_path = args.input_data
all_files = glob.glob(data_path + "/*.csv")
df = pd.concat((pd.read_csv(f) for f in all_files), sort=False)

A seconda del tipo di dati in uso, il codice usato per leggere i file può cambiare.

Creare un asset di dati MLTable

Un asset dati MLTable consente di puntare ai dati tabulari. Quando si crea un asset dati MLTable, specificare la definizione dello schema per leggere i dati. Poiché lo schema è già definito e archiviato con l'asset dei dati, non è necessario specificare come leggere i dati quando lo si usa.

Pertanto, si vuole usare un asset dati MLTable quando lo schema dei dati è complesso o cambia frequentemente. Invece di modificare come leggere i dati in ogni script che usa i dati, è necessario modificarli solo nell'asset dati stesso.

Quando si definisce lo schema alla creazione di un asset dati MLTable, è anche possibile scegliere di specificare solo un subset dei dati.

Per determinate funzionalità in Azure Machine Learning, ad esempio Machine Learning automatizzato, è necessario usare un asset dati MLTable, poiché Azure Machine Learning deve sapere come leggere i dati.

Per definire lo schema, è consigliabile includere un file MLTable nella stessa cartella dei dati da leggere. Il file MLTable include il percorso che punta ai dati da leggere e le modalità di lettura:

type: mltable

paths:
  - pattern: ./*.txt
transformations:
  - read_delimited:
      delimiter: ','
      encoding: ascii
      header: all_files_same_headers

Per creare un asset di dati MLTable con Python SDK, è possibile usare il codice seguente:

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<path-including-mltable-file>'

my_data = Data(
    path=my_path,
    type=AssetTypes.MLTABLE,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

Quando si analizza un asset di dati MLTable come input di uno script Python che si vuole eseguire come processo di Azure Machine Learning, è possibile includere il codice seguente per leggere i dati:

import argparse
import mltable
import pandas

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

tbl = mltable.load(args.input_data)
df = tbl.to_pandas_dataframe()

print(df.head(10))

Un approccio comune consiste nel convertire i dati tabulari in un frame di dati Pandas. Tuttavia, è anche possibile convertire i dati in un frame di dati Spark se ciò si adatta meglio al carico di lavoro.