Connettersi ai servizi di archiviazione in Azure con gli archivi dati

SI APPLICA A:Python SDK azureml v1

SI APPLICA A:estensione ML dell'interfaccia della riga di comando di Azure v1

In questo articolo verrà illustrato come connettersi ai servizi di archiviazione in Azure con gli archivi dati di Azure Machine Learning e Azure Machine Learning Python SDK.

Gli archivi dati si connettono in modo sicuro al servizio di archiviazione in Azure senza mettere a rischio le credenziali di autenticazione e l'integrità dell'origine dati originale. Archiviano le informazioni di connessione, ad esempio l'ID sottoscrizione e l'autorizzazione con token nell'istanza di Key Vault associata all'area di lavoro, in modo da poter accedere in modo sicuro all'archiviazione senza che sia necessario che le informazioni siano hardcoded negli script. È possibile creare archivi dati che si connettono a queste soluzioni di archiviazione di Azure.

Per informazioni sul ruolo degli archivi dati nel flusso di lavoro generale di accesso ai dati di Azure Machine Learning, vedere l'articolo Proteggere l'accesso ai dati.

Per un'esperienza con poco codice, vedere come usare lo studio di Azure Machine Learning per creare e registrare gli archivi dati.

Suggerimento

Questo articolo presuppone che si voglia connettersi al servizio di archiviazione mediante l'autenticazione basata su credenziali, ad esempio usando un'entità servizio o un token di firma di accesso condiviso. Tenere presente che, se le credenziali sono registrate con gli archivi dati, tutti gli utenti con il ruolo Lettore per l'area di lavoro possono recuperare queste credenziali. Altre informazioni sul ruolo Lettore dell'area di lavoro.

Se questo aspetto costituisce un problema, vedere come Connettersi ai servizi di archiviazione con l'accesso basato sull'identità.

Prerequisiti

  • Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.

  • Un account di archiviazione di Azure con un tipo di archiviazione supportato.

  • Azure Machine Learning SDK per Python.

  • Un'area di lavoro di Azure Machine Learning.

    Creare un'area di lavoro di Azure Machine Learning o usarne una esistente tramite Python SDK.

    Importare le classi Workspace e Datastore e caricare le informazioni sulla sottoscrizione dal file config.json usando la funzione from_config(). Per impostazione predefinita, il file JSON viene cercato nella directory corrente, ma è possibile anche specificare un parametro del percorso che punti al file usando from_config(path="your/file/path").

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

    Quando si crea un'area di lavoro, un contenitore BLOB di Azure e una condivisione file di Azure vengono registrati automaticamente come archivio dati nell'area di lavoro. A questi due elementi vengono assegnati, rispettivamente, i nomi workspaceblobstore e workspacefilestore. workspaceblobstore consente di archiviare gli artefatti dell'area di lavoro e i log degli esperimenti di Machine Learning. Viene impostato anche come archivio dati predefinito e non può essere eliminato dall'area di lavoro. workspacefilestore consente di archiviare notebook e script R autorizzati tramite l'istanza di calcolo.

    Nota

    La finestra di progettazione di Azure Machine Learning creerà automaticamente un archivio dati denominato azureml_globaldatasets quando si apre un esempio nella home page della finestra di progettazione. Questo archivio dati contiene solo i set di dati del campione. Non usare questo archivio dati per l'accesso ai dati riservati.

Tipi di servizi di archiviazione dati supportati

Gli archivi dati attualmente supportano l'archiviazione delle informazioni di connessione nei servizi di archiviazione elencati nella matrice seguente.

Suggerimento

Per le soluzioni di archiviazione non supportate (quelle non elencate nella tabella seguente), si potrebbero riscontrare problemi durante la connessione e l'utilizzo dei dati. È consigliabile spostare i dati in una soluzione di archiviazione di Azure supportata. Questa operazione può essere utile anche in ulteriori scenari, ad esempio per risparmiare sui costi dei dati in uscita durante gli esperimenti di Machine Learning.

Tipo di archiviazione Tipo di autenticazione Studio di Azure Machine Learning Python SDK di Azure Machine Learning Interfaccia della riga di comando di Azure Machine Learning API REST di Azure Machine Learning VS Code
Archiviazione BLOB di Azure Chiave account
Token di firma di accesso condiviso
Condivisione file di Azure Chiave account
Token di firma di accesso condiviso
Azure Data Lake Storage Gen 1 Entità servizio
Azure Data Lake Storage Gen2 Entità servizio
Database SQL di Azure Autenticazione SQL
Entità servizio
Azure PostgreSQL Autenticazione SQL
Database di Azure per MySQL Autenticazione SQL ✓* ✓* ✓*
File system di Databricks Nessuna autenticazione ✓** ✓ ** ✓**

Linee guida per l'archiviazione

È consigliabile creare un archivio dati per un contenitore BLOB di Azure. Per i BLOB sono disponibili i livelli di archiviazione Standard e Premium. Sebbene l'archiviazione Premium sia più costosa, la velocità effettiva maggiore può migliorare la velocità delle esecuzioni dei training, in particolare se si esegue il training su un set di dati di grandi dimensioni. Per informazioni sul costo degli account di archiviazione, vedere Calcolatore prezzi di Azure.

Azure Data Lake Storage Gen2 si basa su Archiviazione BLOB di Azure ed è una soluzione progettata per le analisi di Big Data aziendali. Una parte fondamentale di Data Lake Storage Gen2 è l'aggiunta di uno spazio dei nomi gerarchico all'archivio BLOB. Lo spazio dei nomi gerarchico organizza gli oggetti e i file in una gerarchia di directory per un accesso ai dati efficiente.

Accesso al servizio di archiviazione e autorizzazioni

Per garantire una connessione sicura al servizio di archiviazione di Azure, Azure Machine Learning richiede che l'utente disponga delle autorizzazioni per accedere al contenitore di archiviazione dei dati corrispondente. Questo accesso dipende dalle credenziali di autenticazione usate per registrare l'archivio dati.

Nota

Queste indicazioni si applicano anche agli archivi dati creati con l'accesso ai dati basato sull'identità.

Rete virtuale

Azure Machine Learning richiede passaggi di configurazione aggiuntivi per comunicare con un account di archiviazione protetto da un firewall o all'interno di una rete virtuale. Se l'account di archiviazione è protetto da un firewall, è possibile aggiungere l'indirizzo IP del client a un elenco elementi consentiti tramite il portale di Azure.

Azure Machine Learning può ricevere richieste dai client all'esterno della rete virtuale. Per assicurarsi che l'entità che richiede dati dal servizio sia sicura e per consentire la visualizzazione dei dati nell'area di lavoro, usare un endpoint privato con l'area di lavoro.

Per gli utenti di Python SDK: per accedere ai dati tramite lo script di training in una destinazione di calcolo, la destinazione di calcolo deve trovarsi all'interno della stessa rete virtuale e della stessa subnet del servizio di archiviazione. È possibile usare un'istanza di calcolo o un cluster di elaborazione nella stessa rete virtuale.

Per gli utenti dello studio di Azure Machine Learning: numerose funzionalità si basano sulla possibilità di leggere o meno i dati da un set di dati, ad esempio anteprime dei set di dati, profili e Machine Learning automatizzato. Per il corretto funzionamento con account di archiviazione all'interno di reti virtuali, usare un'identità gestita dell'area di lavoro nello studio per consentire ad Azure Machine Learning di accedere all'account di archiviazione dall'esterno della rete virtuale.

Nota

Se il servizio di archiviazione dei dati è un database SQL di Azure all'interno di una rete virtuale, assicurarsi di impostare Nega accesso pubblico su No tramite il portale di Azure per consentire ad Azure Machine Learning di accedere all'account di archiviazione.

Convalida dell'accesso

Avviso

L'accesso agli account di archiviazione tra tenant non è supportato. Se lo scenario in uso richiede l'accesso tra tenant, contattare l'alias del team di supporto dati di Azure Machine Learning all'indirizzo amldatasupport@microsoft.com per ricevere assistenza e ottenere una soluzione di codice personalizzata.

Come parte del processo iniziale di creazione e registrazione dell'archivio dati, Azure Machine Learning convalida automaticamente che il servizio di archiviazione sottostante esista e che l'entità di sicurezza fornita dall'utente (nome utente, entità servizio o token di firma di accesso condiviso) abbia accesso a tale risorsa di archiviazione specifica.

Dopo la creazione dell'archivio dati, questa convalida viene eseguita solo per i metodi che richiedono l'accesso al contenitore di archiviazione sottostante e non ogni volta che vengono recuperati gli oggetti dell'archivio dati. La convalida viene ad esempio eseguita se è necessario scaricare i file dall'archivio dati, mentre se si vuole solo modificare l'archivio dati predefinito, la convalida non viene eseguita.

Per autenticare l'accesso al servizio di archiviazione sottostante, è possibile fornire la chiave dell'account, i token di firma di accesso condiviso o l'entità servizio nel metodo register_azure_*() corrispondente del tipo di archivio dati che si vuole creare. La matrice del tipo di archiviazione elenca i tipi di autenticazione supportati che corrispondono a ogni tipo di archivio dati.

È possibile trovare informazioni sulla chiave dell'account, sul token di firma di accesso condiviso e sull'entità servizio nel portale di Azure.

  • Se si prevede di usare una chiave dell'account o un token di firma di accesso condiviso per l'autenticazione, selezionare Account di archiviazione nel riquadro sinistro e scegliere l'account di archiviazione da registrare.

    • La pagina Panoramica fornisce informazioni come il nome dell'account, il contenitore e il nome della condivisione file.
      • Per le chiavi dell'account, passare a Chiavi di accesso nel riquadro Impostazioni.
      • Per i token di firma di accesso condiviso, passare a Shared access signatures (Firme di accesso condiviso) nel riquadro Impostazioni.
  • Se si prevede di usare un'entità servizio per l'autenticazione, passare a Registrazioni app e selezionare l'app da usare.

    • La pagina Panoramica corrispondente conterrà le informazioni necessarie, come ID tenant e ID client.

Importante

Se è necessario modificare le chiavi di accesso per un account di archiviazione di Azure (chiave dell'account o token di firma di accesso condiviso), assicurarsi di sincronizzare le nuove credenziali con l'area di lavoro e gli archivi dati connessi. Informazioni su come sincronizzare le credenziali aggiornate.

Autorizzazioni

Per il contenitore BLOB di Azure e Azure Data Lake Storage Gen2, assicurarsi che le credenziali di autenticazione abbiano l'accesso come Lettore dei dati dei BLOB di archiviazione. Altre informazioni su Ruolo con autorizzazioni di lettura per i dati dei BLOB di archiviazione. Per impostazione predefinita, un token di firma di accesso condiviso dell'account non prevede autorizzazioni.

  • Per l'accesso in lettura ai dati, le credenziali di autenticazione devono avere un minimo di autorizzazioni di elenco e lettura per contenitori e oggetti.

  • Per l'accesso in scrittura ai dati, sono necessarie anche autorizzazioni di scrittura e aggiunta.

Creare e registrare archivi dati

Quando si registra una soluzione di archiviazione di Azure come archivio dati, l'archivio dati viene creato e registrato automaticamente in un'area di lavoro specifica. Vedere la sezione Accesso al servizio di archiviazione e autorizzazioni per indicazioni sugli scenari di rete virtuale e su dove trovare le credenziali di autenticazione necessarie.

In questa sezione sono riportati esempi su come creare e registrare un archivio dati tramite Python SDK per i tipi di archiviazione seguenti. I parametri forniti in questi esempi sono i parametri obbligatori per creare e registrare un archivio dati.

Per creare archivi dati per altri servizi di archiviazione supportati, vedere la documentazione di riferimento per i metodi register_azure_* applicabili.

Se si preferisce un'esperienza con poco codice, vedere Connettersi ai dati con lo studio di Azure Machine Learning.

Importante

Se si annulla la registrazione e si registra nuovamente un archivio dati con lo stesso nome, ma l'operazione non riesce, è possibile che l'eliminazione temporanea non sia abilitata per l'istanza di Azure Key Vault per l'area di lavoro. Per impostazione predefinita, l'eliminazione temporanea è abilitata per l'istanza di Key Vault creata dall'area di lavoro, ma potrebbe non essere abilitata se è stato usato un insieme di credenziali delle chiavi esistente o se è stata creata un'area di lavoro prima di ottobre 2020. Per informazioni su come abilitare l'eliminazione temporanea, vedere Attivare l'eliminazione temporanea per un insieme di credenziali delle chiavi esistente.

Nota

Il nome dell'archivio dati deve essere costituito solo da lettere minuscole, cifre e caratteri di sottolineatura.

Contenitore BLOB di Azure

Per registrare un contenitore BLOB di Azure come archivio dati, usare register_azure_blob_container().

Il codice seguente crea e registra l'archivio dati blob_datastore_name nell'area di lavoro ws. Questo archivio dati accede al contenitore BLOB my-container-name nell'account di archiviazione my-account-name, usando la chiave di accesso dell'account fornita. Vedere la sezione Accesso al servizio di archiviazione e autorizzazioni per indicazioni sugli scenari di rete virtuale e su dove trovare le credenziali di autenticazione necessarie.

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)

Condivisione file di Azure

Per registrare una condivisione file di Azure come archivio dati, usare register_azure_file_share().

Il codice seguente crea e registra l'archivio dati file_datastore_name nell'area di lavoro ws. Questo archivio dati accede alla condivisione file my-fileshare-name nell'account di archiviazione my-account-name, usando la chiave di accesso dell'account fornita. Vedere la sezione Accesso al servizio di archiviazione e autorizzazioni per indicazioni sugli scenari di rete virtuale e su dove trovare le credenziali di autenticazione necessarie.

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 Gen2

Per un archivio dati Azure Data Lake Storage Gen2 (ADLS Gen2), usare register_azure_data_lake_gen2() per registrare un archivio dati delle credenziali connesso a una risorsa di archiviazione di Azure Data Lake Storage Gen2 con autorizzazioni dell'entità servizio.

Per usare l'entità servizio, è necessario registrare l'applicazione e concedere all'entità servizio l'accesso ai dati tramite il controllo degli accessi in base al ruolo di Azure o gli elenchi di controllo di accesso (ACL). Vedere altre informazioni sulla configurazione del controllo di accesso per ADLS Gen2.

Il codice seguente crea e registra l'archivio dati adlsgen2_datastore_name nell'area di lavoro ws. Questo archivio dati accede al file system test nell'account di archiviazione account_name usando le credenziali dell'entità servizio fornite. Vedere la sezione Accesso al servizio di archiviazione e autorizzazioni per indicazioni sugli scenari di rete virtuale e su dove trovare le credenziali di autenticazione necessarie.

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

Creare archivi dati con altri strumenti di Azure

Oltre a creare archivi dati con Python SDK e lo studio, è anche possibile usare i modelli di Azure Resource Manager o l'estensione VS Code per Azure Machine Learning.

Azure Resource Manager

In https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices sono disponibili numerosi modelli da usare per creare set di dati.

Per informazioni sull'uso di questi modelli, vedere Usare un modello di Azure Resource Manager per creare un'area di lavoro per Azure Machine Learning.

Estensione di Visual Studio Code

Se si preferisce creare e gestire archivi dati usando l'estensione VS Code per Azure Machine Learning, vedere la Guida pratica per la gestione delle risorse di VS Code per altre informazioni.

Usare i dati negli archivi dati

Dopo aver creato un archivio dati, creare un set di dati di Azure Machine Learning per interagire con i dati. I set di dati consentono di creare un pacchetto dei dati da inserire in un oggetto consumabile valutato in modo differito per le attività di Machine Learning, ad esempio il training.

Con i set di dati è possibile scaricare o montare file di qualsiasi formato dai servizi di archiviazione di Azure per il training dei modelli in una destinazione di calcolo. Altre informazioni su come eseguire il training dei modelli di ML con i set di dati.

Ottenere gli archivi dati dall'area di lavoro

Per ottenere un archivio dati specifico registrato nell'area di lavoro corrente, usare il metodo statico get() nella classe Datastore:

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

Per ottenere l'elenco degli archivi dati registrati con un'area di lavoro specifica, usare la proprietà datastores in un oggetto dell'area di lavoro:

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

Per ottenere l'archivio dati predefinito dell'area di lavoro, usare questa riga:

datastore = ws.get_default_datastore()

È anche possibile modificare l'archivio dati predefinito con il codice seguente. Questa funzionalità è supportata solo tramite l'SDK.

 ws.set_default_datastore(new_default_datastore)

Accedere ai dati durante l'assegnazione dei punteggi

Azure Machine Learning offre diversi modi per usare i modelli per l'assegnazione dei punteggi. Alcuni di questi metodi non forniscono l'accesso agli archivi dati. Usare la tabella seguente per informazioni sui metodi che consentono di accedere agli archivi dati durante l'assegnazione dei punteggi:

metodo Accesso all'archivio dati Descrizione
Stima in batch Eseguire stime su grandi quantità di dati in modo asincrono.
Servizio Web   Distribuire modelli come servizi Web.

Per le situazioni in cui l'SDK non fornisce l'accesso agli archivi dati, è possibile creare codice personalizzato usando la soluzione Azure SDK pertinente per accedere ai dati. Azure Storage SDK per Python, ad esempio, è una libreria client che è possibile usare per accedere ai dati archiviati in BLOB o file.

Spostare i dati in soluzioni di archiviazione di Azure supportate

Azure Machine Learning supporta l'accesso ai dati da Archiviazione BLOB di Azure, File di Azure, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, database SQL di Azure e Database di Azure per PostgreSQL. Se si usa una soluzione di archiviazione non supportata, è consigliabile spostare i dati in soluzioni di archiviazione di Azure supportate usando Azure Data Factory e questi passaggi. Lo spostamento dei dati in una soluzione di archiviazione supportata può consentire di risparmiare sui costi relativi al traffico in uscita durante gli esperimenti di Machine Learning.

Azure Data Factory consente un trasferimento dei dati efficiente e resiliente con più di 80 connettori predefiniti senza costi aggiuntivi. Questi connettori includono i servizi dati di Azure, le origini dati locali, Amazon S3 Redshift, nonché Google BigQuery.

Passaggi successivi