Ligar a serviços de armazenamento no Azure com arquivos de dados

APLICA-SE A:SDK python azureml v1

APLICA-SE A:Extensão de ml da CLI do Azure v1

Neste artigo, saiba como ligar a serviços de armazenamento de dados no Azure com arquivos de dados do Azure Machine Learning e o SDK Python do Azure Machine Learning.

Os arquivos de dados ligam-se de forma segura ao seu serviço de armazenamento no Azure sem colocar as credenciais de autenticação e a integridade da origem de dados original em risco. Armazenam informações de ligação, como o ID da subscrição e a autorização de tokens no seu Key Vault associados à área de trabalho, para que possa aceder de forma segura ao seu armazenamento sem ter de os codificar nos scripts. Pode criar arquivos de dados que se ligam a estas soluções de armazenamento do Azure.

Para compreender onde os arquivos de dados se encaixam no fluxo de trabalho geral de acesso a dados do Azure Machine Learning, veja o artigo Dados de acesso seguro .

Para obter uma experiência de código baixa, veja como utilizar o estúdio do Azure Machine Learning para criar e registar arquivos de dados.

Dica

Este artigo pressupõe que pretende ligar ao seu serviço de armazenamento com credenciais de autenticação baseadas em credenciais, como um principal de serviço ou um token de assinatura de acesso partilhado (SAS). Tenha em atenção que, se as credenciais estiverem registadas nos arquivos de dados, todos os utilizadores com a função Leitor da área de trabalho poderão obter estas credenciais. Saiba mais sobre a função Leitor da área de trabalho.

Se for uma preocupação, saiba como Ligar a serviços de armazenamento com acesso baseado em identidade.

Pré-requisitos

  • Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente a versão gratuita ou paga do Azure Machine Learning.

  • Uma conta de armazenamento do Azure com um tipo de armazenamento suportado.

  • O SDK do Azure Machine Learning para Python.

  • Uma área de trabalho do Azure Machine Learning.

    Crie uma área de trabalho do Azure Machine Learning ou utilize uma existente através do SDK python.

    Importe a Workspace classe e Datastore e carregue as informações da subscrição do ficheiro config.json com a função from_config(). Esta ação procura o ficheiro JSON no diretório atual por predefinição, mas também pode especificar um parâmetro de caminho para apontar para o ficheiro com from_config(path="your/file/path").

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

    Quando cria uma área de trabalho, um contentor de blobs do Azure e uma partilha de ficheiros do Azure são automaticamente registados como arquivos de dados na área de trabalho. São denominados workspaceblobstore e workspacefilestore, respetivamente. O workspaceblobstore é utilizado para armazenar artefactos da área de trabalho e os registos de experimentação de machine learning. Também é definido como o arquivo de dados predefinido e não pode ser eliminado da área de trabalho. O workspacefilestore é utilizado para armazenar blocos de notas e scripts R autorizados através da instância de computação.

    Nota

    O estruturador do Azure Machine Learning irá criar um arquivo de dados com o nome azureml_globaldatasets automaticamente quando abrir um exemplo na home page do estruturador. Este arquivo de dados contém apenas conjuntos de dados de exemplo. Não utilize este arquivo de dados para qualquer acesso a dados confidenciais.

Tipos de serviços de armazenamento de dados suportados

Atualmente, os arquivos de dados suportam o armazenamento de informações de ligação aos serviços de armazenamento listados na seguinte matriz.

Dica

Para soluções de armazenamento não suportadas (as que não estão listadas na tabela abaixo), poderá deparar-se com problemas ao ligar e trabalhar com os seus dados. Sugerimos que mova os seus dados para uma solução de armazenamento do Azure suportada. Esta ação também pode ajudar com cenários adicionais, como poupar o custo de saída de dados durante experimentações de ML.

Tipo de armazenamento Tipo de autenticação estúdio do Azure Machine Learning Azure Machine Learning Python SDK CLI do Azure Machine Learning Azure Machine Learning REST API Código VS
Armazenamento de Blobs do Azure Chave da conta
Token de SAS
Partilha de Ficheiros do Azure Chave da conta
Token de SAS
Azure Data Lake Storage Gen 1 Service principal (Principal de serviço)
Azure Data Lake Storage Gen2 Service principal (Principal de serviço)
Base de Dados SQL do Azure Autenticação do SQL
Service principal (Principal de serviço)
Azure PostgreSQL Autenticação do SQL
Base de Dados do Azure para MySQL Autenticação do SQL ✓* ✓* ✓*
Sistema de Ficheiros do Databricks Sem autenticação ✓** ✓ ** ✓**

Orientações de armazenamento

Recomendamos que crie um arquivo de dados para um contentor de Blobs do Azure. Tanto o armazenamento standard como o premium estão disponíveis para blobs. Embora o armazenamento premium seja mais dispendioso, as velocidades de débito mais rápidas podem melhorar a velocidade das suas execuções de preparação, especialmente se preparar com um grande conjunto de dados. Para obter informações sobre o custo das contas de armazenamento, veja a calculadora de preços do Azure.

Azure Data Lake Storage Gen2 baseia-se no armazenamento de Blobs do Azure e foi concebido para análise de macrodados empresariais. Uma parte fundamental do Data Lake Storage Gen2 é a adição de um espaço de nomes hierárquico ao Armazenamento de blobs. O espaço de nomes hierárquico organiza objetos/ficheiros numa hierarquia de diretórios para um acesso de dados eficiente.

Acesso e permissões de armazenamento

Para garantir que se liga de forma segura ao seu serviço de armazenamento do Azure, o Azure Machine Learning requer que tenha permissão para aceder ao contentor de armazenamento de dados correspondente. Este acesso depende das credenciais de autenticação utilizadas para registar o arquivo de dados.

Nota

Esta orientação também se aplica aos arquivos de dados criados com acesso a dados baseados em identidade.

Rede virtual

O Azure Machine Learning requer passos de configuração adicionais para comunicar com uma conta de armazenamento protegida por uma firewall ou numa rede virtual. Se a conta de armazenamento estiver protegida por uma firewall, pode adicionar o endereço IP do cliente a uma lista de permissões através da portal do Azure.

O Azure Machine Learning pode receber pedidos de clientes fora da rede virtual. Para garantir que a entidade que pede dados do serviço é segura e para permitir que os dados sejam apresentados na área de trabalho, utilize um ponto final privado com a área de trabalho.

Para os utilizadores do SDK Python acederem aos seus dados através do script de preparação num destino de computação, o destino de computação tem de estar dentro da mesma rede virtual e sub-rede do armazenamento. Pode utilizar uma instância de computação/cluster na mesma rede virtual.

Para estúdio do Azure Machine Learning utilizadores, várias funcionalidades dependem da capacidade de ler dados de um conjunto de dados, como pré-visualizações de conjuntos de dados, perfis e machine learning automatizado. Para estas funcionalidades funcionarem com armazenamento por trás de redes virtuais, utilize uma identidade gerida de área de trabalho no estúdio para permitir que o Azure Machine Learning aceda à conta de armazenamento de fora da rede virtual.

Nota

Se o armazenamento de dados for uma Base de Dados SQL do Azure por trás de uma rede virtual, certifique-se de que define Negar acesso público como Não através do portal do Azure para permitir que o Azure Machine Learning aceda à conta de armazenamento.

Validação de acesso

Aviso

O acesso entre inquilinos a contas de armazenamento não é suportado. Se for necessário acesso entre inquilinos para o seu cenário, contacte o alias da equipa de Suporte de Dados do Azure Machine Learning em amldatasupport@microsoft.com para obter assistência com uma solução de código personalizado.

Como parte do processo inicial de criação e registo do arquivo de dados, o Azure Machine Learning valida automaticamente a existência do serviço de armazenamento subjacente e o principal fornecido pelo utilizador (nome de utilizador, principal de serviço ou token de SAS) tem acesso ao armazenamento especificado.

Após a criação do arquivo de dados, esta validação só é efetuada para métodos que requerem acesso ao contentor de armazenamento subjacente e não sempre que são obtidos objetos de arquivo de dados. Por exemplo, a validação ocorre se quiser transferir ficheiros do arquivo de dados; mas se quiser apenas alterar o arquivo de dados predefinido, a validação não acontece.

Para autenticar o acesso ao serviço de armazenamento subjacente, pode fornecer a sua chave de conta, tokens de assinaturas de acesso partilhado (SAS) ou o principal de serviço no método correspondente register_azure_*() do tipo de arquivo de dados que pretende criar. A matriz de tipo de armazenamento lista os tipos de autenticação suportados que correspondem a cada tipo de arquivo de dados.

Pode encontrar informações sobre a chave da conta, o token de SAS e o principal de serviço no seu portal do Azure.

  • Se planear utilizar uma chave de conta ou token de SAS para autenticação, selecione Contas de Armazenamento no painel esquerdo e escolha a conta de armazenamento que pretende registar.

    • A página Descrição geral fornece informações como o nome da conta, o contentor e o nome da partilha de ficheiros.
      • Para chaves de conta, aceda a Chaves de acesso no painel Definições .
      • Para tokens SAS, aceda a Assinaturas de acesso partilhado no painel Definições .
  • Se planear utilizar um principal de serviço para autenticação, aceda ao seu Registos de aplicações e selecione a aplicação que pretende utilizar.

    • A página Descrição Geral correspondente irá conter as informações necessárias, como o ID do inquilino e o ID de cliente.

Importante

Se precisar de alterar as chaves de acesso de uma conta de Armazenamento do Azure (chave de conta ou token SAS), certifique-se de que sincroniza as novas credenciais com a área de trabalho e os arquivos de dados ligados à mesma. Saiba como sincronizar as credenciais atualizadas.

Permissões

Para o contentor de blobs do Azure e o armazenamento do Azure Data Lake Gen2, certifique-se de que as credenciais de autenticação têm acesso ao Leitor de Dados do Blob de Armazenamento . Saiba mais sobre o Leitor de Dados de Blobs de Armazenamento. Um token de SAS de conta não tem permissões predefinidas.

  • Para acesso de leitura de dados, as suas credenciais de autenticação têm de ter, no mínimo, permissões de lista e leitura para contentores e objetos.

  • Para acesso de escrita de dados, também são necessárias permissões de escrita e de adição.

Criar e registar arquivos de dados

Quando regista uma solução de armazenamento do Azure como um arquivo de dados, cria e regista automaticamente esse arquivo de dados numa área de trabalho específica. Reveja a secção permissões de acesso & ao armazenamento para obter orientações sobre cenários de rede virtual e onde encontrar as credenciais de autenticação necessárias.

Nesta secção estão exemplos de como criar e registar um arquivo de dados através do SDK Python para os seguintes tipos de armazenamento. Os parâmetros fornecidos nestes exemplos são os parâmetros necessários para criar e registar um arquivo de dados.

Para criar arquivos de dados para outros serviços de armazenamento suportados, veja a documentação de referência dos métodos aplicáveisregister_azure_*.

Se preferir uma experiência de código baixa, veja Ligar a dados com estúdio do Azure Machine Learning.

Importante

Se anular o registo e voltar a registar um arquivo de dados com o mesmo nome e este falhar, o Key Vault do Azure para a área de trabalho poderá não ter a eliminação recuperável ativada. Por predefinição, a eliminação recuperável está ativada para a instância do cofre de chaves criada pela área de trabalho, mas poderá não estar ativada se tiver utilizado um cofre de chaves existente ou tiver uma área de trabalho criada antes de outubro de 2020. Para obter informações sobre como ativar a eliminação recuperável, consulte Ativar a Eliminação Recuperável para um cofre de chaves existente.

Nota

O nome do arquivo de dados deve consistir apenas em letras minúsculas, dígitos e carateres de sublinhado.

Contentor de blobs do Azure

Para registar um contentor de blobs do Azure como um arquivo de dados, utilize register_azure_blob_container().

O código seguinte cria e regista o blob_datastore_name arquivo de dados na área ws de trabalho. Este arquivo de dados acede ao my-container-name contentor de blobs na my-account-name conta de armazenamento através da chave de acesso da conta fornecida. Reveja a secção permissões de acesso & ao armazenamento para obter orientações sobre cenários de rede virtual e onde encontrar as credenciais de autenticação necessárias.

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)

Partilha de ficheiros do Azure

Para registar uma partilha de ficheiros do Azure como um arquivo de dados, utilize register_azure_file_share().

O código seguinte cria e regista o file_datastore_name arquivo de dados na área ws de trabalho. Este arquivo de dados acede à my-fileshare-name partilha de ficheiros na my-account-name conta de armazenamento através da chave de acesso da conta fornecida. Reveja a secção permissões de acesso & ao armazenamento para obter orientações sobre cenários de rede virtual e onde encontrar as credenciais de autenticação necessárias.

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 Geração 2

Para um arquivo de dados de Geração 2 (ADLS Gen2) de Azure Data Lake Storage, utilize register_azure_data_lake_gen2() para registar um arquivo de dados de credenciais ligado a um armazenamento do Azure DataLake Gen2 com permissões de principal de serviço.

Para utilizar o principal de serviço, tem de registar a aplicação e conceder acesso aos dados do principal de serviço através do controlo de acesso baseado em funções do Azure (RBAC do Azure) ou das listas de controlo de acesso (ACL). Saiba mais sobre a configuração do controlo de acesso para o ADLS Gen2.

O código seguinte cria e regista o adlsgen2_datastore_name arquivo de dados na área ws de trabalho. Este arquivo de dados acede ao sistema test de ficheiros na account_name conta de armazenamento com as credenciais do principal de serviço fornecidas. Reveja a secção permissões de acesso & ao armazenamento para obter orientações sobre cenários de rede virtual e onde encontrar as credenciais de autenticação necessárias.

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

Criar arquivos de dados com outras ferramentas do Azure

Além de criar arquivos de dados com o SDK python e o studio, também pode utilizar modelos de Resource Manager do Azure ou a extensão do VS Code do Azure Machine Learning.

Azure Resource Manager

Existem vários modelos em https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices que podem ser utilizados para criar arquivos de dados.

Para obter informações sobre como utilizar estes modelos, veja Utilizar um modelo do Azure Resource Manager para criar uma área de trabalho para o Azure Machine Learning.

Extensão do VS Code

Se preferir criar e gerir arquivos de dados com a extensão do VS Code do Azure Machine Learning, visite o guia de instruções de gestão de recursos do VS Code para saber mais.

Utilizar dados nos arquivos de dados

Depois de criar um arquivo de dados, crie um conjunto de dados do Azure Machine Learning para interagir com os seus dados. Os conjuntos de dados empacotam os seus dados num objeto consumível lazily avaliado para tarefas de machine learning, como a preparação.

Com os conjuntos de dados, pode transferir ou montar ficheiros de qualquer formato dos serviços de armazenamento do Azure para preparação de modelos num destino de computação. Saiba mais sobre como preparar modelos de ML com conjuntos de dados.

Obter arquivos de dados a partir da sua área de trabalho

Para obter um arquivo de dados específico registado na área de trabalho atual, utilize o get() método estático na Datastore classe :

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

Para obter a lista de arquivos de dados registados numa determinada área de trabalho, pode utilizar a datastores propriedade num objeto de área de trabalho:

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

Para obter o arquivo de dados predefinido da área de trabalho, utilize esta linha:

datastore = ws.get_default_datastore()

Também pode alterar o arquivo de dados predefinido com o seguinte código. Esta capacidade só é suportada através do SDK.

 ws.set_default_datastore(new_default_datastore)

Aceder a dados durante a classificação

O Azure Machine Learning fornece várias formas de utilizar os seus modelos para classificação. Alguns destes métodos não fornecem acesso aos arquivos de dados. Utilize a tabela seguinte para compreender que métodos lhe permitem aceder aos arquivos de dados durante a classificação:

Método Acesso ao arquivo de dados Description
Predição de lote Faça predições em grandes quantidades de dados de forma assíncrona.
Serviço Web   Implementar modelos como um serviço Web.

Para situações em que o SDK não fornece acesso aos arquivos de dados, poderá conseguir criar código personalizado com o SDK do Azure relevante para aceder aos dados. Por exemplo, o SDK de Armazenamento do Azure para Python é uma biblioteca de cliente que pode utilizar para aceder a dados armazenados em blobs ou ficheiros.

Mover dados para soluções de armazenamento do Azure suportadas

O Azure Machine Learning suporta o acesso a dados a partir do armazenamento de Blobs do Azure, Ficheiros do Azure, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Base de Dados SQL do Azure e Base de Dados do Azure para PostgreSQL. Se estiver a utilizar armazenamento não suportado, recomendamos que mova os seus dados para soluções de armazenamento do Azure suportadas com Azure Data Factory e estes passos. Mover dados para o armazenamento suportado pode ajudá-lo a poupar nos custos de saída de dados durante experimentações de machine learning.

Azure Data Factory fornece transferência de dados eficiente e resiliente com mais de 80 conectores pré-criados sem custos adicionais. Estes conectores incluem serviços de dados do Azure, origens de dados no local, Amazon S3 e Redshift e Google BigQuery.

Passos seguintes