Verbinden von Speicherdiensten in Azure mit Datenspeichern

GILT FÜR:Python SDK azureml v1

GILT FÜR:Azure CLI ML-Erweiterung v1

In diesem Artikel wird beschrieben, wie Sie die Datenspeicherdienste in Azure mit Azure Machine Learning-Datenspeichern und dem Python-SDK für Azure Machine Learning verbinden.

Datenspeicher stellen eine sichere Verbindung mit Ihrem Speicherdienst in Azure her, ohne Ihre Anmeldeinformationen für die Authentifizierung und die Integrität Ihrer ursprünglichen Datenquelle zu gefährden. Darin werden Verbindungsinformationen wie Ihre Abonnement-ID und die Tokenautorisierung in Ihrer mit dem Arbeitsbereich verknüpften Key Vault-Instanz gespeichert, damit Sie sicher auf Ihren Speicher zuzugreifen können, ohne dass Sie diese Informationen in Ihren Skripts hartcodieren müssen. Sie können Datenspeicher erstellen, für die Verbindungen mit diesen Azure-Speicherlösungen hergestellt werden.

Informationen dazu, welche Rolle Datenspeicher im Arbeitsbereich für den Datenzugriff in Azure Machine Learning spielen, finden Sie im Artikel Sicherer Datenzugriff.

Wenn Sie an einer Vorgehensweise ohne größeren Codeaufwand interessiert sind, sollten Sie sich über die Verwendung von Azure Machine Learning Studio für die Erstellung und Registrierung von Datenspeichern informieren.

Tipp

In diesem Artikel wird davon ausgegangen, dass Sie die Verbindung mit Ihrem Speicherdienst per Authentifizierung mit Anmeldeinformationen herstellen möchten, z. B. einem Dienstprinzipal oder einem SAS-Token (Shared Access Signature). Beachten Sie hierbei, dass alle Benutzer mit der Rolle Leser für den Arbeitsbereich diese Anmeldeinformationen abrufen können, wenn sie bei Datenspeichern registriert sind. Erfahren Sie mehr über die Rolle Leser für Arbeitsbereiche.

Falls dies problematisch sein sollte, können Sie sich über das Herstellen einer Verbindung mit Speicherdiensten per identitätsbasiertem Zugriff informieren.

Voraussetzungen

  • Ein Azure-Abonnement. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning aus.

  • Ein Azure Storage-Konto mit einem unterstützten Speichertyp.

  • Das Azure Machine Learning SDK für Python.

  • Ein Azure Machine Learning-Arbeitsbereich.

    Sie können wahlweise einen Azure Machine Learning-Arbeitsbereich erstellen oder mithilfe des Python SDKs einen vorhandenen verwenden.

    Importieren Sie die Klasse Workspace und Datastore, und laden Sie Ihre Abonnementinformationen mit der Funktion from_config() aus der Datei config.json. Diese Funktion durchsucht standardmäßig das aktuelle Verzeichnis nach der JSON-Datei. Sie können jedoch auch einen Pfadparameter angeben, um mit from_config(path="your/file/path") auf die Datei zu verweisen.

    import azureml.core
    from azureml.core import Workspace, Datastore
    
    ws = Workspace.from_config()
    

    Wenn Sie einen Arbeitsbereich erstellen, werden automatisch ein Azure-Blobcontainer und eine Azure-Dateifreigabe als Datenspeicher im Arbeitsbereich registriert. Sie erhalten die Namen workspaceblobstore und workspacefilestore. Der workspaceblobstore dient zum Speichern von Arbeitsbereichsartefakten und Ihren Protokollen zu Experimenten mit maschinellem Lernen. Er wird außerdem als Standarddatenspeicher festgelegt und kann nicht aus dem Arbeitsbereich gelöscht werden. Der workspacefilestore dient zum Speichern von Notebooks und R-Skripts, die über Computeinstanzen autorisiert werden.

    Hinweis

    Azure Machine Learning-Designer erstellt automatisch einen Datenspeicher namens azureml_globaldatasets, wenn Sie ein Beispiel auf der Designerstartseite öffnen. Dieser Datenspeicher enthält nur Beispieldatasets. Verwenden Sie diesen Datenspeicher nicht für den Zugriff auf vertrauliche Daten.

Unterstützte Diensttypen für Datenspeicher

Datenspeicher unterstützen derzeit das Speichern von Verbindungsinformationen in den Speicherdiensten, die in der folgenden Matrix aufgeführt sind.

Tipp

Bei nicht unterstützten Speicherlösungen (die nicht in der nachstehenden Tabelle aufgeführt sind) können Probleme beim Herstellen von Verbindungen und Arbeiten mit Ihren Daten auftreten. Wir empfehlen Ihnen, Ihre Daten auf eine unterstützte Azure-Speicherlösung zu verschieben. Dies kann auch bei weiteren Szenarien hilfreich sein, z. B. bei der Einsparung von Kosten für ausgehende Daten bei ML-Experimenten.

Speichertyp Authentifizierungsart Azure Machine Learning Studio Python-SDK für Azure Machine Learning Azure Machine Learning-CLI Azure Machine Learning-REST-API VS-Code
Azure Blob Storage Kontoschlüssel
SAS-Token
Azure-Dateifreigabe Kontoschlüssel
SAS-Token
Azure Data Lake Storage Gen 1 Dienstprinzipal
Azure Data Lake Storage Gen2 Dienstprinzipal
Azure SQL-Datenbank SQL-Authentifizierung
Dienstprinzipal
Azure PostgreSQL SQL-Authentifizierung
Azure Database for MySQL SQL-Authentifizierung ✓* ✓* ✓*
Databricks-Dateisystem Keine Authentifizierung ✓** ✓ ** ✓**

Leitfaden für Speicher

Es wird empfohlen, einen Datenspeicher für einen Azure-Blobcontainer zu erstellen. Für Blobs stehen sowohl der Standard- als auch der Premiumspeicher zur Verfügung. Der Premiumspeicher ist zwar teurer, ermöglicht aber höhere Durchsätze. Dies kann sich vor allem bei einem Training mit einem großen Dataset positiv auf die Ausführungsgeschwindigkeit auswirken. Informationen zu den Kosten für Speicherkonten finden Sie unter Azure-Preisrechner.

Azure Data Lake Storage Gen2 baut auf Azure Blob Storage auf und ist für Big Data-Analysen in Unternehmen ausgelegt. Ein wesentlicher Bestandteil von Data Lake Storage Gen2 ist das Hinzufügen eines hierarchischen Namespace zum Blobspeicher. Der hierarchische Namespace organisiert Objekte/Dateien in einer Hierarchie von Verzeichnissen für den effizienten Datenzugriff.

Speicherzugriff und Berechtigungen

Um sicherzustellen, dass eine sichere Verbindung mit Ihrem Azure-Speicherdienst hergestellt wird, erfordert Azure Machine Learning, dass Sie über die Berechtigung zum Zugreifen auf den entsprechenden Datenspeichercontainer verfügen. Dieser Zugriff ist von den Anmeldeinformationen für die Authentifizierung abhängig, die zum Registrieren des Datenspeichers verwendet werden.

Virtuelles Netzwerk

Damit Azure Machine Learning mit einem Speicherkonto kommunizieren kann, das sich hinter einer Firewall oder in einem virtuellen Netzwerk befindet, sind zusätzliche Konfigurationsschritte erforderlich. Wenn sich Ihr Speicherkonto hinter einer Firewall befindet, können Sie die IP-Adresse Ihres Clients über das Azure-Portal auf eine Positivliste setzen.

Azure Machine Learning kann Anforderungen von Clients außerhalb des virtuellen Netzwerks empfangen. Verwenden Sie einen privaten Endpunkt mit Ihrem Arbeitsbereich, um die Sicherheit der Entität, die Daten vom Dienst anfordert, sicherzustellen und um die Anzeige von Daten in Ihrem Arbeitsbereich zu ermöglichen.

Damit Benutzer des Python-SDK über Ihr Trainingsskript auf einem Computeziel auf Ihre Daten zugreifen können, muss sich das Computeziel in demselben virtuellen Netzwerk und Subnetz wie der Speicher befinden. Sie können einen Computecluster im gleichen virtuellen Netzwerk oder eine Compute-Instanz im gleichen virtuellen Netzwerk verwenden.

Benutzer von Azure Machine Learning Studio sollten beachten, dass mehrere Features darauf basieren, dass Daten aus einem Dataset gelesen werden können, z. B. Datasetvorschau, Profile und automatisiertes maschinelles Lernen. Damit diese Features für Speicher hinter virtuellen Netzwerken funktionieren, verwenden Sie in Studio eine vom Arbeitsbereich verwaltete Identität, damit Azure Machine Learning von Orten außerhalb des virtuellen Netzwerks auf das Speicherkonto zugreifen kann.

Hinweis

Wenn es sich bei Ihrem Datenspeicher um eine Azure SQL-Datenbank hinter einem virtuellen Netzwerk handelt, müssen Sie über das Azure-Portal die Einstellung Öffentlichen Zugriff verweigern auf Nein festlegen, um Azure Machine Learning Zugriff auf das Speicherkonto zu gewähren.

Zugriffsüberprüfung

Warnung

Mandantenübergreifender Zugriff auf Speicherkonten wird nicht unterstützt. Wenn mandantenübergreifender Zugriff für Ihr Szenario erforderlich ist, wenden Sie sich an den Alias des AzureML-Datensupportteams amldatasupport@microsoft.com, um Unterstützung bei einer benutzerdefinierten Codelösung zu erhalten.

Im Rahmen des ersten Erstellungs- und Registrierungsvorgangs des Datenspeichers überprüft Azure Machine Learning automatisch, ob der zugrunde liegende Speicherdienst vorhanden ist und der vom Benutzer bereitgestellte Prinzipal (Benutzername, Dienstprinzipal oder SAS-Token) Zugriff auf den angegebenen Speicher hat.

Nach dem Erstellen des Datenspeichers wird diese Überprüfung nur noch für Methoden ausgeführt, die Zugriff auf den zugrunde liegenden Speichercontainer benötigen, und nicht bei jedem Abruf von Datenspeicherobjekten. Beispielsweise erfolgt eine Überprüfung, wenn Sie Dateien aus Ihrem Datenspeicher herunterladen möchten. Wenn Sie jedoch nur den Standarddatenspeicher ändern möchten, findet keine Überprüfung statt.

Um Ihren Zugriff auf den zugrunde liegenden Speicherdienst zu authentifizieren, können Sie Ihren Kontoschlüssel, Ihr SAS-Token (Shared Access Signature) oder Ihren Dienstprinzipal in der entsprechenden register_azure_*()-Methode des zu erstellenden Datenspeichertyps angeben. In der Speichertypmatrix werden die unterstützten Authentifizierungstypen aufgeführt, die den einzelnen Datenspeichertypen entsprechen.

Informationen zu Kontoschlüssel, SAS-Token und Dienstprinzipal finden Sie im Azure-Portal.

  • Wenn Sie beabsichtigen, einen Kontoschlüssel oder ein SAS-Token für die Authentifizierung zu verwenden, wählen Sie im linken Bereich Speicherkonten und dann das Speicherkonto aus, das Sie registrieren möchten.

    • Die Seite Übersicht enthält Informationen wie den Kontonamen und den Namen des Containers oder der Dateifreigabe.
      • Wechseln Sie für Kontoschlüssel zu Kontoschlüssel im Bereich Einstellungen.
      • Für SAS-Token wechseln Sie zu Shared Access Signatures im Bereich Einstellungen.
  • Wenn Sie einen Dienstprinzipal für die Authentifizierung verwenden möchten, navigieren Sie zu Ihren App-Registrierungen, und wählen Sie die gewünschte App aus.

    • Auf der entsprechenden Übersichtsseite werden erforderliche Informationen wie Mandanten-ID und Client-ID angezeigt.

Wichtig

Wenn Sie Ihre Zugriffsschlüssel für ein Azure Storage-Konto (Kontoschlüssel oder SAS-Token) ändern müssen, stellen Sie sicher, dass die neuen Anmeldeinformationen mit Ihrem Arbeitsbereich und den damit verbundenen Datenspeichern synchronisiert werden. Eine Anleitung zum Synchronisieren Ihrer aktualisierten Anmeldeinformationen finden Sie hier.

Berechtigungen

Stellen Sie für Azure-Blobcontainer und Azure Data Lake Gen2-Speicher sicher, dass Ihre Anmeldeinformationen für die Authentifizierung über den Zugriff Storage-Blobdatenleser verfügen. Erfahren Sie mehr über Storage-Blobdatenleser. Ein Konto-SAS-Token besitzt standardmäßig keine Berechtigungen.

  • Für den Lesezugriff auf Daten müssen Ihre Anmeldeinformationen für die Authentifizierung mindestens die Berechtigungen zum Auflisten und Lesen für Container und Objekte besitzen.

  • Für den Datenschreibzugriff sind auch Berechtigungen zum Schreiben und Hinzufügen erforderlich.

Erstellen und Registrieren von Datenspeichern

Wenn Sie eine Azure-Speicherlösung als Datenspeicher registrieren, erstellen Sie diesen Datenspeicher automatisch und registrieren ihn in einem bestimmten Arbeitsbereich. Lesen Sie den Abschnitt Speicherzugriff und Berechtigungen&, um Informationen zu Szenarios für virtuelle Netzwerke zu erhalten und um zu erfahren, wo Sie die erforderlichen Anmeldeinformationen für die Authentifizierung finden.

In diesem Abschnitt finden Sie Beispiele für das Erstellen und Registrieren eines Datenspeichers über das Python-SDK für die folgenden Speichertypen. Bei den in diesen Beispielen verwendeten Parametern handelt es sich um die erforderlichen Parameter zum Erstellen und Registrieren eines Datenspeichers.

Informationen zum Erstellen von Datenspeichern für andere unterstützte Speicherdienste finden Sie in der Referenzdokumentation für die entsprechenden register_azure_*-Methoden.

Wenn Sie eine Umgebung mit weniger Code bevorzugen, finden Sie weitere Informationen unter Verbinden mit Daten mit Azure Machine Learning Studio.

Wichtig

Wenn Sie die Registrierung aufheben und einen Datenspeicher mit dem gleichen Namen erneut registrieren und dabei ein Fehler auftritt, ist bei dem Azure Key Vault für Ihren Arbeitsbereich vorläufiges Löschen möglicherweise nicht aktiviert. Standardmäßig ist vorläufiges Löschen für die Key Vault-Instanz aktiviert, die von Ihrem Arbeitsbereich erstellt wurde. Es ist jedoch möglicherweise nicht aktiviert, wenn Sie einen vorhandenen Schlüsseltresor verwendet haben oder einen Arbeitsbereich vor Oktober 2020 erstellt haben. Informationen zum Aktivieren des vorläufigen Löschens finden Sie unter Aktivieren des vorläufigen Löschens für einen vorhandenen Schlüsseltresor.

Hinweis

Der Datenspeichername darf nur Kleinbuchstaben, Ziffern und Unterstriche enthalten.

Azure-Blobcontainer

Um einen Azure-Blobcontainer als Datenspeicher zu registrieren, verwenden Sie register_azure_blob_container().

Der folgende Code erstellt den Datenspeicher blob_datastore_name und registriert ihn im Arbeitsbereich ws. Dieser Datenspeicher greift auf den my-container-name-Blobcontainer im my-account-name-Speicherkonto zu und verwendet dazu den angegebenen Zugriffsschlüssel des Kontos. Lesen Sie den Abschnitt Speicherzugriff und Berechtigungen&, um Informationen zu Szenarios für virtuelle Netzwerke zu erhalten und um zu erfahren, wo Sie die erforderlichen Anmeldeinformationen für die Authentifizierung finden.

blob_datastore_name='azblobsdk' # Name of the datastore to workspace
container_name=os.getenv("BLOB_CONTAINER", "<my-container-name>") # Name of Azure blob container
account_name=os.getenv("BLOB_ACCOUNTNAME", "<my-account-name>") # Storage account name
account_key=os.getenv("BLOB_ACCOUNT_KEY", "<my-account-key>") # Storage account access key

blob_datastore = Datastore.register_azure_blob_container(workspace=ws, 
                                                         datastore_name=blob_datastore_name, 
                                                         container_name=container_name, 
                                                         account_name=account_name,
                                                         account_key=account_key)

Azure-Dateifreigabe

Um einen eine Azure-Dateifreigabe als Datenspeicher zu registrieren, verwenden Sie register_azure_file_share().

Der folgende Code erstellt den Datenspeicher file_datastore_name und registriert ihn im Arbeitsbereich ws. Dieser Datenspeicher greift auf die my-fileshare-name-Dateifreigabe im my-account-name-Speicherkonto zu und verwendet dazu den angegebenen Zugriffsschlüssel des Kontos. Lesen Sie den Abschnitt Speicherzugriff und Berechtigungen&, um Informationen zu Szenarios für virtuelle Netzwerke zu erhalten und um zu erfahren, wo Sie die erforderlichen Anmeldeinformationen für die Authentifizierung finden.

file_datastore_name='azfilesharesdk' # Name of the datastore to workspace
file_share_name=os.getenv("FILE_SHARE_CONTAINER", "<my-fileshare-name>") # Name of Azure file share container
account_name=os.getenv("FILE_SHARE_ACCOUNTNAME", "<my-account-name>") # Storage account name
account_key=os.getenv("FILE_SHARE_ACCOUNT_KEY", "<my-account-key>") # Storage account access key

file_datastore = Datastore.register_azure_file_share(workspace=ws,
                                                     datastore_name=file_datastore_name, 
                                                     file_share_name=file_share_name, 
                                                     account_name=account_name,
                                                     account_key=account_key)

Azure Data Lake Storage Generation 2

Für einen Datenspeicher von Azure Data Lake Storage Generation 2 (ADLS Gen 2) verwenden Sie register_azure_data_lake_gen2(), um einen Datenspeicher für Anmeldeinformationen zu registrieren, der mit einem Azure DataLake Gen 2-Speicher mit Dienstprinzipalberechtigungen verbunden ist.

Damit Sie Ihren Dienstprinzipal nutzen können, müssen Sie Ihre Anwendung registrieren und dem Dienstprinzipal Datenzugriff über die rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) oder Zugriffssteuerungslisten (ACL) gewähren. Erfahren Sie mehr über die für ADLS Gen 2 eingerichtete Zugriffssteuerung.

Der folgende Code erstellt den Datenspeicher adlsgen2_datastore_name und registriert ihn im Arbeitsbereich ws. Dieser Datenspeicher greift auf das Dateisystem test im account_name-Speicherkonto zu und verwendet dazu die bereitgestellten Anmeldeinformationen des Dienstprinzipals. Lesen Sie den Abschnitt Speicherzugriff und Berechtigungen&, um Informationen zu Szenarios für virtuelle Netzwerke zu erhalten und um zu erfahren, wo Sie die erforderlichen Anmeldeinformationen für die Authentifizierung finden.

adlsgen2_datastore_name = 'adlsgen2datastore'

subscription_id=os.getenv("ADL_SUBSCRIPTION", "<my_subscription_id>") # subscription id of ADLS account
resource_group=os.getenv("ADL_RESOURCE_GROUP", "<my_resource_group>") # resource group of ADLS account

account_name=os.getenv("ADLSGEN2_ACCOUNTNAME", "<my_account_name>") # ADLS Gen2 account name
tenant_id=os.getenv("ADLSGEN2_TENANT", "<my_tenant_id>") # tenant id of service principal
client_id=os.getenv("ADLSGEN2_CLIENTID", "<my_client_id>") # client id of service principal
client_secret=os.getenv("ADLSGEN2_CLIENT_SECRET", "<my_client_secret>") # the secret of service principal

adlsgen2_datastore = Datastore.register_azure_data_lake_gen2(workspace=ws,
                                                             datastore_name=adlsgen2_datastore_name,
                                                             account_name=account_name, # ADLS Gen2 account name
                                                             filesystem='test', # ADLS Gen2 filesystem
                                                             tenant_id=tenant_id, # tenant id of service principal
                                                             client_id=client_id, # client id of service principal
                                                             client_secret=client_secret) # the secret of service principal

Erstellen von Datenspeichern mit anderen Azure-Tools

Zusätzlich zur Erstellung von Datenspeichern mit dem Python-SDK und mit Studio können Sie auch Azure Resource Manager-Vorlagen oder die VS Code-Erweiterung für Azure Machine Learning verwenden.

Azure Resource Manager

Es gibt mehrere Vorlagen unter https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices, die zum Erstellen von Datenspeichern verwendet werden können.

Informationen zur Verwendung dieser Vorlagen finden Sie unter Verwenden einer Azure Resource Manager-Vorlage zum Erstellen eines Arbeitsbereichs für Azure Machine Learning.

VS Code-Erweiterung

Wenn Sie Datenspeicher mithilfe der VS Code-Erweiterung für Azure Machine Learning erstellen und verwalten möchten, helfen Ihnen die Informationen in der Schrittanleitung zur Ressourcenverwaltung für VS Code weiter.

Verwenden von Daten in Ihren Datenspeichern

Nachdem Sie einen Datenspeicher erstellt haben, erstellen Sie ein Azure Machine Learning-Dataset, um mit Ihren Daten zu interagieren. Datasets packen Ihre Daten in ein selten ausgewertetes Objekt für Aufgaben des maschinellen Lernens wie das Training.

Mit Datasets können Sie Dateien für das Modelltraining auf einem Computeziel in allen Formaten aus Azure-Speicherdiensten herunterladen bzw. einbinden. Erfahren Sie mehr zum Trainieren von ML-Modellen mit Datasets.

Abrufen von Datenspeichern aus Ihrem Arbeitsbereich

Verwenden Sie die statische Methode get() mit der Datastore-Klasse, um einen bestimmten Datenspeicher im aktuellen Arbeitsbereich zu registrieren:

# Get a named datastore from the current workspace
datastore = Datastore.get(ws, datastore_name='your datastore name')

Um die Liste der in einem bestimmten Arbeitsbereich registrierten Datenspeicher abzurufen, können Sie die datastores-Eigenschaft für ein Arbeitsbereichsobjekt verwenden:

# List all datastores registered in the current workspace
datastores = ws.datastores
for name, datastore in datastores.items():
    print(name, datastore.datastore_type)

Über diese Zeile rufen Sie den Standarddatenspeicher des Arbeitsbereichs ab:

datastore = ws.get_default_datastore()

Mithilfe des folgenden Codes können Sie den Standarddatenspeicher ändern. Diese Option wird nur über das SDK unterstützt.

 ws.set_default_datastore(new_default_datastore)

Zugreifen auf Daten während der Bewertung

Azure Machine Learning bietet mehrere Möglichkeiten, Ihre Modelle zur Bewertung zu verwenden. Einige dieser Methoden bieten keinen Zugriff auf Datenspeicher. Verwenden Sie die folgende Tabelle, um zu verstehen, welche Methoden Ihnen ermöglichen, während der Bewertung auf Datenspeicher zuzugreifen:

Methode Datenspeicherzugriff BESCHREIBUNG
Batchvorhersage Treffen Sie asynchron Vorhersagen für große Datenmengen.
Webdienst   Stellen Sie Modelle als Webdienste bereit.

Für Situationen, in denen das SDK keinen Zugriff auf Datenspeicher bietet, können Sie möglicherweise benutzerdefinierten Code mit dem entsprechenden Azure-SDK erstellen, um auf die Daten zuzugreifen. Das Azure Storage SDK für Python ist beispielsweise eine Clientbibliothek, mit der Sie auf in Blobs oder Dateien gespeicherte Daten zugreifen können.

Verschieben von Daten in unterstützte Azure Storage-Lösungen

Azure Machine Learning unterstützt den Zugriff auf Daten aus Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, einer Azure SQL-Datenbank und Azure Database for PostgreSQL. Wenn Sie einen nicht unterstützten Speicher verwenden, wird empfohlen, Ihre Daten mithilfe von Azure Data Factory und diesen Schritten in unterstützte Azure-Speicherlösungen zu verschieben. Durch das Verschieben von Daten auf einen unterstützten Speicher können Sie bei Machine Learning-Experimenten Kosten für die Datenausgabe sparen.

Azure Data Factory bietet eine effiziente und robuste Datenübertragung mit mehr als 80 vorkonfigurierten Connectors ohne zusätzliche Kosten. Diese Connectors umfassen Azure-Datendienste, lokale Datenquellen, Amazon S3 und Redshift sowie Google BigQuery.

Nächste Schritte