Erstellen einer Datenressource

Abgeschlossen

Als wissenschaftliche Fachkraft für Daten möchten Sie sich auf das Trainieren von Machine Learning-Modellen konzentrieren. Auch wenn Sie Zugriff auf Daten für die Eingabe in ein Machine Learning-Modell benötigen, möchten Sie sich keine Gedanken darüber machen, wie Sie Zugriff erhalten. Um den Zugriff auf die Daten zu vereinfachen, mit denen Sie arbeiten möchten, können Sie Datenressourcen verwenden.

Grundlegendes zu Datenressourcen

In Azure Machine Learning sind Datenressourcen Verweise auf den Speicherort der Daten, die Möglichkeiten des Zugriffs und alle anderen relevanten Metadaten. Sie können Datenressourcen erstellen, um Zugriff auf Daten in Datenspeichern, Azure-Speicherdiensten, öffentlichen URLs oder auf Daten zu erhalten, die auf Ihrem lokalen Gerät gespeichert sind.

Es folgen die Vorteile von Datenressourcen:

  • Sie können Daten mit anderen Mitglieder des Teams freigeben und wiederverwenden, sodass sie sich keine Dateispeicherorte merken müssen.
  • Sie können während des Modelltrainings (auf jedem unterstützten Computetyp) nahtlos auf Daten zugreifen, ohne sich um Verbindungszeichenfolgen oder Datenpfade kümmern zu müssen.
  • Sie können die Metadaten der Datenressource mit einer Version versehen.

Es gibt drei Haupttypen von Datenressourcen:

Diagram of different types of data assets in Azure Machine Learning.

  • URI-Datei: verweist auf eine bestimmte Datei.
  • URI-Ordner: verweist auf einen Ordner.
  • MLTable: verweist auf einen Ordner oder eine Datei und enthält ein Schema, das als tabellarische Daten gelesen werden soll.

Hinweis

URI steht für Uniform Resource Identifier und einen Speicherort auf Ihrem lokalen Computer, in Azure Blob Storage oder Data Lake Storage, einen öffentlich verfügbaren HTTPS-Speicherort oder sogar einen angefügten Datenspeicher.

Zwecke von Datenressourcen

Datenressourcen sind besonders nützlich, wenn Machine Learning-Aufgaben als Azure Machine Learning-Aufträge ausgeführt werden. Als Auftrag können Sie ein Python-Skript ausführen, das Eingaben akzeptiert und Ausgaben generiert. Eine Datenressource kann sowohl als Eingabe als auch als Ausgabe eines Azure Machine Learning-Auftrags geparst werden.

Sehen wir uns die einzelnen Typen von Datenressourcen, ihre Erstellung und ihre Verwendung in einem Auftrag an.

Erstellen einer URI-Dateidatenressource

Eine URI-Dateidatenressource verweist auf eine bestimmte Datei. Azure Machine Learning speichert nur den Pfad zur Datei, d. h. Sie können auf jeden beliebigen Dateityp verweisen. Wenn Sie die Datenressource verwenden, geben Sie an, wie Sie die Daten lesen möchten. Dies hängt vom Typ der Daten ab, mit denen Sie eine Verbindung herstellen.

Es folgen die unterstützten Pfade, die Sie beim Erstellen einer URI-Dateidatenressource verwenden können:

  • Lokal: ./<path>
  • Azure Blob Storage: 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>
  • Datenspeicher: azureml://datastores/<datastore_name>/paths/<folder>/<file>

Wichtig

Wenn Sie eine Datenressource erstellen und auf eine Datei oder einen Ordner verweisen, die bzw. der auf Ihrem lokalen Gerät gespeichert ist, wird eine Kopie der Datei oder des Ordners in den Standarddatenspeicher workspaceblobstore hochgeladen. Sie können die Datei oder den Ordner im Ordner LocalUpload finden. Durch Hochladen einer Kopie können Sie weiterhin auf die Daten im Arbeitsbereich von Azure Machine Learning zugreifen, auch wenn das lokale Gerät, auf dem die Daten gespeichert sind, nicht verfügbar ist.

Mit dem folgenden Code können Sie eine URI-Dateidatenressource erstellen:

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)

Wenn Sie die URI-Dateidatenressource als Eingabe in einen Azure Machine Learning-Auftrag parsen, müssen Sie die Daten zunächst einlesen, ehe Sie mit ihnen arbeiten können.

Stellen Sie sich vor, Sie erstellen ein Python-Skript, das Sie als Auftrag ausführen möchten, und legen als Eingabeparameter input_data die URI-Dateidatenressource fest (die auf eine CSV-Datei verweist). Sie können die Daten einlesen, indem Sie den folgenden Code in Ihr Python-Skript einfügen:

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

Wenn Ihre URI-Datendateiressource auf einen anderen Dateityp verweist, müssen Sie die Daten mit dem entsprechenden Python-Code einlesen. Wenn Sie beispielsweise statt mit CSV-Dateien mit JSON-Dateien arbeiten, müssen Sie stattdessen pd.read_json() verwenden.

Erstellen einer URI-Ordnerdatenressource

Eine URI-Ordnerdatenressource verweist auf einen bestimmten Ordner. Sie funktioniert ähnlich wie eine URI-Dateidatenressource und unterstützt dieselben Pfade.

Zum Erstellen einer URI-Ordnerdatenressource mit dem Python SDK können Sie den folgenden Code verwenden:

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)

Wenn Sie die URI-Ordnerdatenressource als Eingabe in einen Azure Machine Learning-Auftrag parsen, müssen Sie die Daten zunächst einlesen, ehe Sie mit ihnen arbeiten können.

Stellen Sie sich vor, Sie erstellen ein Python-Skript, das Sie als Auftrag ausführen möchten, und legen als Eingabeparameter input_data die URI-Ordnerdatenressource fest (die auf mehrere CSV-Dateien verweist). Sie können alle CSV-Dateien im Ordner einlesen und miteinander verknüpfen, indem Sie den folgenden Code in Ihr Python-Skript einfügen:

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)

Je nach Art der Daten, mit denen Sie arbeiten, kann sich der Code zum Einlesen der Dateien ändern.

Erstellen einer MLTable-Datenressource

Mit einer MLTable-Datenressource können Sie auf tabellarische Daten verweisen. Wenn Sie eine MLTable-Datenressource erstellen, geben Sie die Schemadefinition zum Einlesen der Daten an. Da das Schema bereits definiert und mit der Datenressource gespeichert ist, müssen Sie nicht angeben, wie die Daten eingelesen werden sollen, wenn Sie sie verwenden.

Daher sollten Sie eine MLTable-Datenressource verwenden, wenn das Schema Ihrer Daten komplex ist oder sich häufig ändert. Anstatt in jedem Skript, das die Daten nutzt, zu ändern, wie die Daten einzulesen sind, müssen Sie dies nur in der Datenressource selbst ändern.

Wenn Sie das Schema bei der Erstellung einer MLTable-Datenressource festlegen, können Sie auch wählen, ob Sie nur eine Teilmenge der Daten angeben möchten.

Für bestimmte Funktionen in Azure Machine Learning müssen Sie eine MLTable-Datenressource verwenden, da Azure Machine Learning wissen muss, wie die Daten eingelesen werden sollen.

Zur Festlegung des Schemas können Sie eine MLTable-Datei in den Ordner mit den Daten aufnehmen, die Sie einlesen möchten. Die MLTable-Datei enthält den Pfad, der auf die Daten verweist, die Sie einlesen möchten, und wie die Daten eingelesen werden sollen:

type: mltable

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

Zum Erstellen einer MLTable-Datenressource mit dem Python SDK können Sie den folgenden Code verwenden:

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)

Wenn Sie eine MLTable-Datenressource als Eingabe für ein Python-Skript parsen, das Sie als Azure Machine Learning-Auftrag ausführen möchten, können Sie den folgenden Code zum Einlesen der Daten einfügen:

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

Ein gängiger Ansatz besteht darin, die tabellarischen Daten in einen Pandas-DataFrame zu konvertieren. Sie können die Daten jedoch auch in einen Spark-DataFrame konvertieren, wenn dies besser zu Ihrer Workload passt.