Integrieren von OneLake in Azure Machine Learning

OneLake ist Fabric' Open-Lake-Speicherschicht mit Azure Storage-kompatiblem Zugriff. Sie stellt Fabric-Daten über onelake.dfs.fabric.microsoft.com für den ADLS Gen2/DFS-Zugriff und onelake.blob.fabric.microsoft.com für den Blob-API-Zugriff bereit. In diesem Artikel wird beschrieben, wie Azure Machine Learning diese Schnittstellen über AML-Datenspeicher, Ein- und Ausgaben von Batchendpunkten sowie den direkten abfss:// Zugriff aus Notebooks oder Skripts verwenden kann.

Azure Machine Learning bietet drei primäre Integrationspunkte mit OneLake:

  1. Datenspeicher – registrieren Sie einen Fabric Lakehouse-Standort Files als Azure Machine Learning Datenspeicher, und verweisen Sie aus Aufträgen und Datenressourcen darauf. Azure Machine Learning unterstützt auch die direkte Verknüpfung mit Fabric-Lakehouse-Tabellen, aber dieser Ansatz beinhaltet ein Kopieren nach ADLS Gen2 und wird in diesem Dokument nicht behandelt.
  2. Batchendpunkte – Führen Sie Batchbereitstellungen mit Eingaben und Ausgaben aus, die sich in OneLake befinden (derzeit über einen registrierten Datenspeicher oder über einen durch Verknüpfungen unterstützten Blob-/ADLS-Datenspeicher).
  3. OneLake-APIs / direkter ABFSS-Zugriff – Lesen und Schreiben von OneLake direkt aus Notizbüchern und Skripts, die in Azure Machine Learning Laufzeitumgebungen ausgeführt werden.
Integrationspunkt in Azure Machine Learning OneLake-Oberfläche Azure Machine Learning Oberfläche Werden Daten in ADLS Gen2 kopiert? Primäre URI zur Verwendung in Azure Machine Learning
OneLake-Datenspeicher Lakehouse-Bereich /Files. CLI / SDK (YAML) No azureml://datastores/<name>/paths/<path>
OneLake Lakehouse-Tabelle (UI-verknüpft) Lakehouse-Bereich /Tables. Azure Machine Learning Studio (UI) Ja - über Fabric Pipeline nach ADLS Gen2 kopiert und dann registriert azureml://datastores/<adls_ds>/paths/<path>
Ein-/Ausgabe von Batch-Endpunkten Lakehouse /Files (über ADLS-Verknüpfung). CLI / SDK / REST Fakultativ azureml://datastores/<name>/paths/<path> oder abfss://...
Direct OneLake-API / ABFSS /Files und /Tables Notebooks / Skripte auf Azure Machine Learning-Rechenressourcen No abfss://<workspace>@onelake.dfs.fabric.microsoft.com/<lakehouse>.Lakehouse/Files/...

Note

azureml://ist ein Azure Machine Learning-spezifisches URI-Schema, kein Speicherprotokoll. Azure Machine Learning Steuerungsebene und Datenlaufzeit verwenden sie, um den zugrunde liegenden Speicherort (Blob, ADLS Gen2, OneLake und mehr) mithilfe der im benannten Datenspeicher registrierten Verbindungsmetadaten und Anmeldeinformationen aufzulösen.

OneLake als Azure Machine Learning Datenspeicher

Ein Datenspeicher ist eine arbeitsbereichsbezogene Abstraktion in Azure Machine Learning für einen externen Speicherort (OneLake, Azure Blob, ADLS Gen2, Azure Files). Sie speichert die Verbindungsmetadaten für eine vorhandene Speicherressource, den Endpunkt, das Container/Dateisystem/Element und anmeldeinformationen oder die Identitätskonfiguration, ohne die Daten selbst bereitzustellen oder zu kopieren. Verschiedene Oberflächen in Azure Machine Learning können mithilfe eines stabilen URI (azureml://datastores/<name>/paths/<path>) auf Datenspeicher verweisen.

Note

Azure Machine Learning Studio listet OneLake derzeit nicht als Datenspeichertyp auf der Benutzeroberfläche auf, aber die CLI und das SDK unterstützen das Erstellen und Verwalten von OneLake-Datenspeichern über die YAML-Definition.

Für Microsoft Fabric erforderliche Verbindungsmetadaten

Erfassen Sie auf der Eigenschaftenseite des Lakehouse-Elements in Fabric:

  • Endpunkt – Verwenden Sie onelake.dfs.fabric.microsoft.com für OneLake oder onelake.blob.fabric.microsoft.com abhängig von dem Protokoll, das Sie verwenden möchten.
  • Arbeitsbereichs-GUID
  • Element-GUID (die Lakehouse-GUID)

Erstellen des Datenspeichers in Azure Machine Learning

onelake-datastore.yml:

$schema: https://azuremlschemas.azureedge.net/latest/oneLakeDatastore.schema.json
name: <name_of_datastore>
type: onelake
description: Datastore pointing to a Microsoft Fabric lakehouse.
onelake_workspace_name: <workspace_guid>
endpoint: onelake.dfs.fabric.microsoft.com
artifact:
  type: lakehouse
  name: <item_guid>/Files   # Include /Files in the name to point at the lakehouse Files layer; omit it to point at the root of the item.

Erstellen Sie mithilfe der Azure CLI den Datenspeicher im Zielarbeitsbereich von Azure Machine Learning. Ersetzen Sie die <name_of_AML_workspace> Und <name_of_datastore> Platzhalter durch die entsprechenden Werte.

az ml datastore create --file ./onelake-datastore.yml \
    --resource-group rg-amlonelake \
    --workspace-name <name_of_AML_workspace>

Verwenden eines Datenspeichers in Azure Machine Learning Aufträgen

Sobald ein Azure Machine Learning Datenspeicher registriert ist, steht der azureml:// URI für die Verwendung über verschiedene Oberflächen zur Verfügung. Im folgenden Beispiel wird veranschaulicht, wie Sie in einem Azure Machine Learning Auftrag auf einen OneLake-Datenspeicher verweisen. Der folgende URI ist für einen Auftrag Input/Output gültig, in Definitionen von Datenobjekten und überall dort, wo Azure Machine Learning einen Datenspeicherpfad akzeptiert, mit Ausnahme von Batchendpunkten, die OneLake derzeit nicht als Datenspeichertyp für Eingaben oder Ausgaben unterstützen.

Im folgenden Auftragsbeispiel wird eine Datei von einem Speicherort an einen anderen innerhalb desselben OneLake-Datenspeichers kopiert. Sie können eine Mischung aus verschiedenen unterstützten Speicherzielen (Blob, ADLS Gen2, OneLake) als Eingaben und Ausgaben im selben Auftrag verwenden.

type: command
command: cp ${{inputs.input_data}} ${{outputs.output_data}}
compute: azureml:<replace_with_aml_compute_target>
environment: azureml://registries/azureml/environments/sklearn-1.1/versions/4
inputs:
  input_data:
    mode: ro_mount
    path: azureml://datastores/<name_of_datastore>/paths/<folder-path>/<file-name> # Do not include /Files in the <file-name> portion of the path. Reason being that the datastore is already pointed at the /Files layer of the lakehouse via the artifact name in the datastore definition.
    type: uri_file
outputs:
  output_data:
    mode: rw_mount
    path: azureml://datastores/<name_of_datastore>/paths/<folder-path>/<file-name> # Do not include /Files in the <file-name> portion of the path. Reason being that the datastore is already pointed at the /Files layer of the lakehouse via the artifact name in the datastore definition.
    type: uri_file
    # optional: if you want to create a data asset from the output, 
    # then uncomment `name` (`name` can be set without setting `version`, and in this way, we will set `version` automatically for you)
    # name: <name_of_data_asset> # use `name` and `version` to create a data asset from the output
    # version: <version_of_data_asset>

Azure Machine Learning Erfahrungen, die direkt auf einen OneLake-Datenspeicher verweisen können

# Azure Machine Learning Oberfläche/Schnittstelle Direction OneLake-Adressierung Source
1 Azure Machine Learning Aufträge - Input / Output (CLI v2, SDK v2 command, , ) pipelinesweep R / W azureml://datastores/<onelake_ds>/paths/... Zugreifen auf Daten in einem Auftrag
2 Datenbestände (uri_file, uri_folder), die für einen OneLake-Datenspeicherpfad registriert sind R (Ressourcen sind schreibgeschützte Verweise) azureml://datastores/<onelake_ds>/paths/... umschlossen mit Versionsverwaltung Erstellen von Datenressourcen
3 Azure Machine Learning-Datenlaufzeit in Notebooks/Skripten über azureml-fsspec auf Azure Machine Learning-Compute R / W azureml://datastores/<onelake_ds>/paths/... geöffnet mit fsspec.open(...) oder AzureMachineLearningFileSystem Zugreifen auf Daten aus OneLake während der interaktiven Entwicklung

OneLake mit Batchendpunkten

Azure Machine Learning ermöglicht es Ihnen, Fabric für den Zugriff auf Batchendpunkte für Modellbereitstellungen für asynchrone Inferenzen mit langer Laufzeit mit Machine Learning-Modellen und Pipelines zu verwenden.

In diesem Muster besteht das architektonische Ziel darin, eine einzige physische Kopie sowohl der Eingabe-Featuredaten als auch der Ausgabeprognosen beizubehalten, auf die beide Plattformen – Fabric und Azure Machine Learning – zugreifen können. Eine Datei in ADLS enthält zwei gültige Adressen – eine azureml://datastores/... URI, die von Azure Machine Learning-Batch-Endpunkten als Eingabe/Ausgabe akzeptiert wird, und einen Lakehouse-Pfad (aktiviert über ADLS-Shortcut), den Fabric-Notebooks, Pipelines und SQL-Analytics-Endpunkte abfragen können. Dieses Muster umfasst keine Kopie, keine geplante Synchronisierung, keine zweite Quelle der Wahrheit. Die Seehausansicht und die Azure Machine Learning Ansicht sind Projektionen desselben Speicherkontos.

Batch-Endpunkte befinden sich zwischen zwei in OneLake sichtbaren Ordnern:

  • Eingabedaten – ein kuratierter Speicherort (Rohdaten-/FilesLandingzone, bewertete Anfragen, tägliche Partitionen), vorbereitet von Fabric Data Engineering. Azure Machine Learning liest sie über einen ADLS Gen2-Datenspeicher, der auf denselben Speicher wie die Verknüpfung verweist.
  • Ausgaben – ein Speicherort für Vorhersagen, der vom Batchjob in dasselbe ADLS Gen2-Konto geschrieben wird, im Lakehouse über eine Verknüpfung erscheint und sofort für Fabric-Notebooks, Datenflüsse oder einen Delta-Tabellenladeschritt verfügbar ist.

Allgemeiner gesagt ist dieses Muster gut für Szenarien geeignet, in denen Ihre Daten bereits in ADLS Gen2 vorliegen. Beispielsweise ein vorhandener Data Lake, der Analyse- oder ML-Workloads speist. Anstatt diese Daten in OneLake zu migrieren oder zu duplizieren, macht eine OneLake-Verknüpfung den vorhandenen ADLS-Speicherort in einem Fabric-Lakehouse sichtbar, während dasselbe Konto weiterhin als Datenspeicher registriert bleibt.

OneLake SDK- oder API-Zugriff aus den Azure Machine Learning-Notizbüchern und -Skripten

Wenn Code auf einer Azure Machine Learning-Compute-Ressource ausgeführt wird (Computeinstanz, Computecluster oder serverloses Compute), kann er direkt in OneLake über den Pfad abfss:// oder den OneLake-Datenspeicherpfad lesen und schreiben. OneLake SDK und APIs bieten einen flexiblen Integrationspunkt und können für notebookgesteuerte Exploration, benutzerdefinierte Trainingsskripts und Komponenten verwendet werden, die über Azure Machine Learning-Compute sowohl auf /Files als auch auf /Tables zugreifen müssen.

OneLake verwendet den URI abfss:// für Dateien in OneLake, und er kann als gültiger Eingabepfad für Aufträge bei der identitäts- oder dienstprinzipalbasierten Authentifizierung verwendet werden:

abfss://<workspace_guid>@<endpoint>/<item_guid>/Files/<path>

Leistung und Skalierbarkeit – Wahl des richtigen Readers in Azure Machine Learning

fsspec (und das darunterliegende OneLake-Backend adlfs) ist eine Dateisystemabstraktion auf Python-Ebene. Es ist praktisch für Notizbücher, aber nicht selbst ein paralleles Datenmodul – seine Parallelität ist an einen einzelnen Python Prozess gebunden. Die Leistung hängt daher von dem darauf aufsetzenden Reader und der Engine ab. Die Dokumentation zur Azure Machine Learning-Datenlaufzeit empfiehlt ausdrücklich, für Trainingsdaten die Azure Machine Learning-Datenlaufzeit gegenüber clientseitigen Python-Downloads zu verwenden, und weist darauf hin, dass Speicherdurchsatzbeschränkungen beobachtet wurden, „wenn der Clientcode Python zum Herunterladen von Daten aus dem Speicher verwendet, aufgrund von Problemen mit dem Global Interpreter Lock (GIL).“

Verwenden von Azure Machine Learning Spark für die verarbeitung großer Datenmengen in OneLake

OneLake ist als Analysedatensee konzipiert, und der Endpunkt abfss:// ist für die parallelen, partitionierten Lesemuster ausgelegt, die Spark verwendet. Für ETL im TB‑Maßstab, Feature-Engineering oder die verteilte Aufbereitung von Trainingsdaten verwenden Sie Azure Machine Learning Spark über fsspec, idealerweise auf einem Cluster mit mehreren Knoten:

  • Serverless Spark in Azure Machine Learning oder einem angefügten Synapse Spark-Pool – Führen Sie Spark-Aufträge/Notizbücher innerhalb Azure Machine Learning aus und lesen Sie OneLake direkt über abfss://. Siehe Apache Spark in Azure Machine Learning.

  • Fabric Spark - Spark-Notizbücher/Aufträge, die in Fabric ausgeführt werden, haben erstklassigen Zugriff auf dasselbe Lakehouse und können kuratierte Ausgaben über oneLake-Datenspeicher an Azure Machine Learning übergeben.

Das folgende Beispiel zeigt, wie eine Lakehouse-Delta-Tabelle in einer Spark-Sitzung auf Azure Machine Learning-Compute gelesen wird:

df = (
    spark.read.format("delta")
        .load(
            "abfss://<workspace_guid>@onelake.dfs.fabric.microsoft.com/"
            "<item_guid>/Tables/<table-name>"
        )
)

OneLake und Azure Machine Learning mltable

Derzeit schlägt das Lesen von in OneLake gespeicherten Daten über mltable fehl, während die Datei gestreamt wird. Beobachtete Fehler umfassen ScriptExecution.StreamAccess.NotFound und Invalid argument (os error 22). Azure Machine Learning Compute kann OneLake über azureml-fsspec, pyarrowoder das Azure Storage Data Lake SDK für denselben Datenspeicher und dieselbe Identität auflösen und lesen.

Anstelle der ML-Tabelle sollten Sie eine der folgenden Alternativen in Betracht ziehen:

  • Verwenden Sie für Lesezugriffe auf OneLake vorzugsweise uri_file / uri_folder Datenobjekte und laden Sie sie mit azureml-fsspec + pyarrow / pandas / polars / DuckDB (einzelner Knoten) oder mit Spark auf abfss:// (verteilt). Die Microsoft Lerndokumentation mltable selbst stellt fest, dass für einen einfachen Parkettordner oder eine CSV-Datei uri_file / uri_folder die empfohlene Wahl ist.
  • Wenn mltable Semantik wirklich erforderlich ist - meist als Eingabe für AutoML, das type: mltable voraussetzt -, stellen Sie die Daten zunächst in einem ADLS Gen2-Konto bereit und erstellen Sie das mltable für diesen Speicherort. mltable ist heute für ADLS Gen2 zuverlässig.
  • Das OneLake-Verknüpfungsmuster (besprochen als Teil von Batchendpunkten) ist eine naheliegende Lösung für ML Table: Dieselbe physische Datei befindet sich in ADLS Gen2 (wo mltable funktioniert) und wird über eine Verknüpfung im Fabric-Lakehouse angezeigt (wo die Fabric-Tools sie erkennen), ohne dass eine Kopie erstellt wird.

mltable bündelt mehrere Funktionen, die uri_file / uri_folder nicht standardmäßig bieten. In der folgenden Tabelle wird die nächstliegende Entsprechung aufgeführt, wenn Sie OneLake direkt lesen.

mltable Fähigkeit Alternative
Deklarativer, portabler Lese-Blueprint (Trennzeichen, Codierung, Header, Partitionsgröße, Spaltentypen) beibehalten als MLTable Datei neben den Daten Fixieren Sie die Leseeinstellungen in Python (pyarrow.parquet.ParquetDataset, pandas.read_csv(...), polars.scan_parquet(...), duckdb.read_parquet(...)) und behalten Sie dieses Lademodul unter Versionsverwaltung.
Integrierte Transformationen zur Lesezeit (filter, drop_columns, , convert_column_typestake_random_sample) Wenden Sie die Entsprechungen in der von Ihnen gewählten Engine an – polars / duckdb Lazy Frames schieben Filter und Projektionen ähnlich nach unten; Spark auf abfss:// macht dasselbe in großem Maßstab
Komposition mit mehreren Quellpfaden – eine Tabelle, die mehrere Dateien, Ordner, Globmuster und sogar Speicherkonten umfasst Verwenden von fs.glob(...)azureml-fsspec, oder pyarrow.dataset.dataset(paths)Spark's spark.read.parquet(*paths) zum Lesen einer Liste von Pfaden als ein logisches Dataset
eval_mount / eval_download Modi in Azure Machine Learning-Aufträgen (Pfade beim Übermitteln des Auftrags aus der Datei MLTable auflösen, nur das einbinden, worauf verwiesen wird) Materialisieren Sie vorgelagert eine kuratierte Teilmenge (ein Fabric-Notebook oder ein Azure Machine Learning-Vorverarbeitungsauftrag schreibt in einen dedizierten /Files/curated/...-Ordner) und verweisen Sie auf uri_folder
Versionierung des Ausleserezepts (nicht nur der Daten) mithilfe eines Daten-Assets vom Typ mltable Das Ladeskript zusammen mit dem Modellcode in Git versionieren oder ein uri_folder Daten-Asset mit einem kleinen Lademodul kombinieren, das neben dem Trainingsskript eingecheckt ist
**AutoML-Eingabe – AutoML-Mandate type: mltable (Einrichten der AutoML-Schulung) Daten in ADLS Gen2 bereitstellen (die Verknüpfung aus dem Lakehouse behält eine einzige physische Kopie bei) und das mltable dort erstellen

Verwenden Sie für benutzerdefiniertes Training und Scoring auf OneLake uri_file / uri_folder sowie eine Engine Ihrer Wahl (pyarrow / polars / duckdb als Einzelknoten-Engine oder Spark verteilt in Azure Machine Learning). Diese Optionen bieten dieselben funktionalen Funktionen wie mltable bei vergleichbarer oder besserer Durchsatzleistung. Für AutoML über ADLS Gen2 weiterleiten, bis mltable über OneLake unterstützt wird. Sie können eine Verknüpfung zu OneLake verwenden, um Datenduplizierung zu vermeiden und die Daten weiterhin in Fabric für andere Anwendungsfälle verfügbar zu haben.

Considerations

  • Identitätsmodell. OneLake verwendet das SaaS-Identitätsmodell, sodass keine Abonnement-ID verfügbar gemacht wird. Anstelle der rollenbasierten Azure-Zugriffssteuerung (Azure RBAC) für das Speicherkonto wird der Zugriff auf das Ziel-Lakehouse durch Fabric-Arbeitsbereichsrollen (Administrator, Mitglied, Mitwirkender, Betrachter) geregelt. Der OneLake-Datenspeicher unterstützt zwei Modi für Anmeldeinformationen, die in Datenspeicher erstellen dokumentiert sind. Um den Datenspeicher einzurichten und auf das Fabric Lakehouse zuzugreifen, benötigen Sie einen Benutzer mit der Rolle "Fabric Arbeitsbereichsmitwirkender" und der Rolle "Azure Machine Learning Arbeitsbereichadministrator".

  • Einzelne Kopie der Daten. Der OneLake-Datenspeicher und der direkte ABFSS-Zugriff bewahren OneLakes Prinzip der einzigen Kopie. Das Verknüpfungsmuster für Batch-Endpunkte folgt diesem Prinzip in logischer Weise, erfordert jedoch ein ADLS Gen2-Konto als zugrunde liegenden physischen Speicherort.

  • Region im Ko-Standort. Platzieren Sie den Azure Machine Learning-Arbeitsbereich, Compute und die Fabric-Kapazität oder die OneLake-Region in derselben Region, um regionenübergreifenden Datenabfluss zu vermeiden.