Conexión a servicios de almacenamiento en Azure con almacenes de datos

SE APLICA A:Azure ML del SDK de Python v1

SE APLICA A:Extensión de ML de la CLI de Azure v1

En este artículo, aprenderá a conectarse a los servicios de almacenamiento de datos de Azure con almacenes de datos de Azure Machine Learning y el SDK de Azure Machine Learning para Python.

Los almacenes de datos se conectan de forma segura al servicio de almacenamiento en Azure y evitan el riesgo de las credenciales de autenticación y la integridad del almacén de datos original. Un almacén de datos almacena información de conexión (por ejemplo, el identificador de suscripción o la autorización de tokens) en la instancia de Key Vault asociada al área de trabajo. Con un almacén de datos, puede acceder de forma segura al almacenamiento porque puede evitar la codificación de forma rígida de la información de conexión en los scripts. Puede crear almacenes de datos que se conecten a estas soluciones de almacenamiento de Azure.

Para obtener información sobre cómo encajan los almacenes de datos con el flujo de trabajo general de acceso a datos de Azure Machine Learning, visite el artículo Acceso seguro a los datos.

Para obtener información sobre cómo conectarse a un recurso de almacenamiento de datos con una interfaz de usuario, visite Conexión al almacenamiento de datos con la interfaz de usuario de Studio.

Sugerencia

En este artículo, se da por supuesto que se conectará al servicio de almacenamiento con credenciales de autenticación basada en credenciales, por ejemplo, una entidad de servicio o un token de firma de acceso compartido (SAS). Tenga en cuenta que si las credenciales están registradas con los almacenes de datos, todos los usuarios con el rol Lector en el área de trabajo pueden recuperar esas credenciales. Para obtener más información, visite Administración de roles en el área de trabajo.

Para obtener más información sobre el acceso a datos basado en identidades, visite Acceso a datos basado en identidades para los servicios de almacenamiento (v1).

Requisitos previos

  • Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar. Pruebe la versión gratuita o de pago de Azure Machine Learning.

  • Una cuenta de Azure Storage con un tipo de almacenamiento compatible

  • El SDK de Azure Machine Learning para Python

  • Un área de trabajo de Azure Machine Learning.

    Cree un área de trabajo de Azure Machine Learning o use una existente mediante el SDK para Python.

    Importe las clases Workspace y Datastore, y cargue la información de la suscripción desde el archivo config.json con la función from_config(). De manera predeterminada, la función busca el archivo JSON en el directorio actual, pero también puede especificar un parámetro de ruta de acceso para que apunte al archivo con from_config(path="your/file/path"):

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

    La creación del área de trabajo registra automáticamente un contenedor de blobs de Azure y un recurso compartido de archivos de Azure, como almacenes de datos, en el área de trabajo. Se denominan workspaceblobstore y workspacefilestore, respectivamente. workspaceblobstore almacena los artefactos del área de trabajo y los registros de experimentos de aprendizaje automático. Actúa como almacén de datos predeterminado y no se puede eliminar del área de trabajo. workspacefilestore almacena cuadernos y scripts de R autorizados mediante la instancia de proceso.

    Nota:

    El diseñador de Azure Machine Learning crea automáticamente un almacén de datos llamado azureml_globaldatasets al abrir un ejemplo en la página principal del diseñador. Este almacén de datos solo contiene conjuntos de datos de ejemplo. No use este almacén de datos para el acceso a datos confidenciales.

Tipos de servicio de almacenamiento de datos admitidos

Los almacenes de datos admiten actualmente el almacenamiento de la información de conexión para los servicios de almacenamiento enumerados en esta matriz:

Sugerencia

Para soluciones de almacenamiento no admitidas (aquellas que no aparecen en la tabla siguiente), es posible que encuentre problemas al conectarse y trabajar con los datos. Se recomienda mover los datos a una solución de almacenamiento de Azure compatible. Esto también puede ayudar con escenarios adicionales: por ejemplo, la reducción del costo de salida de datos durante los experimentos de ML.

Tipo de almacenamiento Tipo de autenticación Azure Machine Learning Studio SDK de Python de Azure Machine Learning CLI de Azure Machine Learning API REST de Azure Machine Learning Código de VS
Azure Blob Storage Clave de cuenta
Token de SAS
Recurso compartido de archivos de Azure Clave de cuenta
Token de SAS
Azure Data Lake Storage Gen 1 Entidad de servicio
Azure Data Lake Storage Gen 2 Entidad de servicio
Azure SQL Database Autenticación SQL
Entidad de servicio
Azure PostgreSQL Autenticación SQL
Azure Database for MySQL Autenticación SQL ✓* ✓* ✓*
Sistema de archivos de Databricks Sin autenticación ✓** ✓ ** ✓**

Orientación sobre el almacenamiento

Se recomienda crear un almacén de datos para un contenedor de blobs de Azure. El almacenamiento Estándar y Premium están disponibles para blobs. Aunque el almacenamiento Premium es más caro, sus velocidades de rendimiento más rápidas pueden mejorar la velocidad de las ejecuciones de entrenamiento, especialmente si se entrena con un conjunto de datos grande. Para obtener información sobre los costos de la cuenta de almacenamiento, visite la calculadora de precios de Azure.

Azure Data Lake Storage Gen2 se basa en Azure Blob Storage. Se ha diseñado para el análisis de macrodatos empresariales. Como parte de Data Lake Storage Gen2, Blob Storage cuenta con un espacio de nombres jerárquico. El espacio de nombres jerárquico organiza los objetos o archivos en una jerarquía de directorios para un acceso eficaz a los datos.

Permisos y acceso a Storage

Para asegurarse de que se conecta de forma segura a su servicio Azure Storage, Azure Machine Learning requiere que tenga permiso para acceder al contenedor de almacenamiento de datos correspondiente. Este acceso depende de las credenciales de autenticación usadas para registrar el almacén de datos.

Virtual network

Para comunicarse con una cuenta de almacenamiento ubicada detrás de un firewall o dentro de una red virtual, Azure Machine Learning requiere pasos de configuración adicionales. En el caso de una cuenta de almacenamiento situada detrás de un firewall, puede agregar la dirección IP del cliente a una lista de permitidos con Azure Portal.

Azure Machine Learning puede recibir solicitudes de clientes fuera de la red virtual. Para asegurarse de que la entidad que solicita datos del servicio es segura y habilitar la visualización de datos en el área de trabajo, use un punto de conexión privado con el área de trabajo.

En el caso de los usuarios del SDK para Python: para acceder a los datos en un destino de proceso con el script de entrenamiento, debe ubicar el destino de proceso dentro de la misma red virtual y subred del almacenamiento. Puede usar un clúster o una instancia de proceso en la misma red virtual.

En el caso de los usuarios de Estudio de Azure Machine Learning: varias características se basan en la capacidad de leer datos desde un conjunto de datos, por ejemplo, las vistas previas del conjunto de datos, los perfiles y el aprendizaje automático automatizado. Para que estas características funcionen con el almacenamiento detrás de redes virtuales, use una identidad administrada del área de trabajo en el Estudio para permitir que Azure Machine Learning acceda a la cuenta de almacenamiento desde fuera de la red virtual.

Nota:

En el caso de los datos almacenados en una instancia de Azure SQL Database detrás de una red virtual, establezca Denegar acceso público en No con Azure Portal, para permitir que Azure Machine Learning acceda a la cuenta de almacenamiento.

Validación de acceso

Advertencia

No se admite el acceso entre inquilinos a las cuentas de almacenamiento. Si el escenario necesita acceso entre inquilinos, póngase en contacto con el alias del equipo de soporte técnico de datos de Azure Machine Learning en amldatasupport@microsoft.com para obtener ayuda con una solución de código personalizada.

Como parte del proceso inicial de creación y registro del almacén de datos, Azure Machine Learning valida automáticamente que exista el servicio de almacenamiento subyacente y que la entidad de seguridad proporcionada por el usuario (nombre de usuario, entidad de servicio o token de SAS) pueda acceder al almacenamiento especificado.

Una vez creado el almacén de datos, esta validación solo se realiza para los métodos que requieren acceso al contenedor de almacenamiento subyacente, y no cada vez que se recuperan objetos del almacén de datos. Por ejemplo, la validación se produce si quiere descargar archivos del almacén de datos. Sin embargo, si solo quiere cambiar el almacén de datos predeterminado, no se produce la validación.

Para autenticar su acceso al servicio de almacenamiento subyacente, puede proporcionar su clave de cuenta, tokens de firmas de acceso compartido (SAS) o entidad de servicio en el método register_azure_*() correspondiente del tipo de almacén de datos que desea crear. La matriz de tipo de almacenamiento muestra los tipos de autenticación admitidos que corresponden a cada tipo de almacén de datos.

Puede encontrar la clave de cuenta, el token de SAS y la información de la entidad de servicio en Azure Portal.

  • Para usar una clave de cuenta o un token de SAS para la autenticación, seleccione Cuentas de almacenamiento en el panel izquierdo y elija la cuenta de almacenamiento que quiere registrar.

    • La página Información general proporciona el nombre de cuenta, el nombre del recurso compartido de archivos, el contenedor, etc.
      • En el caso de las claves de cuenta, vaya a Claves de acceso en el panel Configuración.
      • En el caso de los tokens de SAS, vaya a Firmas de acceso compartido en el panel Configuración.
  • Para usar una entidad de servicio para la autenticación, vaya a Registros de aplicaciones y seleccione la aplicación que quiere usar.

    • La página Información general correspondiente de la aplicación seleccionada contiene la información necesaria; por ejemplo, el identificador de inquilino y el identificador de cliente.

Importante

Para cambiar las claves de acceso de una cuenta de Azure Storage (clave de cuenta o token de SAS), sincronice las nuevas credenciales con el área de trabajo y los almacenes de datos conectados a él. Para obtener más información, visite Sincronización de las credenciales actualizadas.

Permisos

En el caso del contenedor de blobs de Azure y el almacenamiento de Azure Data Lake Gen 2, asegúrese de que las credenciales de autenticación tengan acceso de Lector de datos de Storage Blob. Para obtener más información, visite Lector de datos de Storage Blob. Un token de SAS de cuenta no tiene de forma predeterminada ningún permiso.

  • Para el acceso de lectura a los datos, las credenciales de autenticación deben tener un número mínimo de permisos de enumeración y lectura para contenedores y objetos.

  • El acceso de escritura de datos también requiere permisos de escritura y adición

Creación y registro de almacenes de datos

El registro de una solución de almacenamiento de Azure como almacén de datos crea y registra automáticamente ese almacén de datos en un área de trabajo específica. Revise Acceso y permisos de almacenamiento en este documento para obtener instrucciones sobre escenarios de red virtual y dónde encontrar las credenciales de autenticación necesarias.

En esa sección, se ofrecen ejemplos que describen cómo crear y registrar un almacén de datos mediante el SDK para Python para estos tipos de almacenamiento. Los parámetros que se muestran en estos ejemplos son los parámetros necesarios para crear y registrar un almacén de datos:

A fin de crear almacenes de datos para otros servicios de almacenamiento admitidos, visite la documentación de referencia de los métodos register_azure_* aplicables.

Para obtener información sobre cómo conectarse a un recurso de almacenamiento de datos con una interfaz de usuario, visite Conexión a datos con Estudio de Azure Machine Learning.

Importante

Si anula el registro y vuelve a registrar un almacén de datos con el mismo nombre y se produce un error en el nuevo registro, es posible que la instancia de Azure Key Vault del área de trabajo no tenga habilitada la eliminación temporal. De manera predeterminada, la eliminación temporal está habilitada para la instancia del almacén de claves que creó el área de trabajo, pero podría no estar habilitada si usó un almacén de claves existente, o si creó el área de trabajo antes de octubre de 2020. Para obtener información que describa cómo habilitar la eliminación temporal, consulte Activación de la eliminación temporal de un almacén de claves existente.

Nota:

El nombre de un almacén de datos solo debe contener letras minúsculas, dígitos y caracteres de subrayado.

Contenedor de blobs de Azure

Para registrar un contenedor de blobs de Azure como almacén de datos, use el método register_azure_blob_container().

Este ejemplo de código crea y registra el almacén de datos blob_datastore_name en el área de trabajo ws. El almacén de datos usa la clave de acceso de la cuenta proporcionada para acceder al contenedor de blobs my-container-name en la cuenta de almacenamiento my-account-name. Revise la sección Acceso y permisos de almacenamiento para obtener ayuda sobre los escenarios de red virtual y dónde encontrar las credenciales de autenticación necesarias.

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)

Recurso compartido de archivos de Azure

Para registrar un recurso compartido de archivos de Azure como almacén de datos, use el método register_azure_file_share().

Este ejemplo de código crea y registra el almacén de datos file_datastore_name en el área de trabajo ws. El almacén de datos usa el recurso compartido de archivos my-fileshare-name en la cuenta de almacenamiento my-account-name, con la clave de acceso de la cuenta proporcionada. Revise la sección Acceso y permisos de almacenamiento para obtener ayuda sobre los escenarios de red virtual y dónde encontrar las credenciales de autenticación necesarias.

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

Para un almacén de datos de Azure Data Lake Storage Generation 2 (ADLS Gen 2), utilice el método register_azure_data_lake_gen2() para registrar un almacén de datos de credenciales conectado a un almacenamiento Azure Data Lake Gen 2 con permisos de entidad de servicio.

Para usar la entidad de servicio, debe registrar la aplicación y conceder acceso a datos a la entidad de servicio mediante el control de acceso basado en rol de Azure (Azure RBAC) o listas de control de acceso (ACL). Para obtener más información, visite Configuración del control de acceso para ADLS Gen 2.

Este código crea y registra el almacén de datos adlsgen2_datastore_name en el área de trabajo ws. Este almacén de datos accede al sistema de archivos test en la cuenta de almacenamiento account_name mediante el uso de las credenciales de la entidad de servicio facilitadas. Revise la sección Permisos y acceso a Storage para obtener ayuda sobre los escenarios de red virtual y dónde encontrar las credenciales de autenticación necesarias.

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

Creación de almacenes de datos con otras herramientas de Azure

Además de la creación de almacenes de datos con el SDK para Python y Studio, también puede crear almacenes de datos con plantillas de Azure Resource Manager o la extensión de VS Code para Azure Machine Learning.

Azure Resource Manager

Puede usar varias plantillas de https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices para crear almacenes de datos. Para obtener información sobre estas plantillas, visite Uso de una plantilla de Azure Resource Manager para crear un área de trabajo para Azure Machine Learning.

Extensión de VS Code

Para obtener más información sobre la creación y administración de almacenes de datos con la extensión de VS Code para Azure Machine Learning, visite la guía paso a paso de administración de recursos de VS Code.

Uso de datos en los almacenes de datos

Después de la creación del almacén de datos, cree un conjunto de datos de Azure Machine Learning para interactuar con los datos. Un conjunto de datos empaqueta los datos en un objeto consumible que se evalúa de forma diferida para tareas de aprendizaje automático, como el entrenamiento. Con los conjuntos de datos, puede descargar o montar archivos de cualquier formato desde los servicios de almacenamiento de Azure para el entrenamiento del modelo en un destino de proceso. Más información sobre cómo entrenar modelos de aprendizaje automático con conjuntos de datos.

Obtención de almacenes de almacenamiento del área de trabajo

Para obtener un almacén de datos específico registrado en el área de trabajo actual, utilice el método estático get() en la clase Datastore:

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

Para obtener la lista de almacenes de datos registrados con un área de trabajo determinada, utilice la propiedad datastores en un objeto del área de trabajo:

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

En este ejemplo de código, se muestra cómo obtener el almacén de datos predeterminado del área de trabajo:

datastore = ws.get_default_datastore()

También puede cambiar el almacén de datos predeterminado con este ejemplo de código. Solo el SDK admite esta capacidad:

 ws.set_default_datastore(new_default_datastore)

Acceso a los datos durante la puntuación

Azure Machine Learning dispone de varios métodos para usar los modelos para puntuación. Algunos de estos métodos no proporcionan acceso a los almacenes de datos. En la tabla siguiente, se describen los métodos que permiten el acceso a los almacenes de datos durante la puntuación:

Método Acceso a almacén de datos Descripción
Predicción por lotes Realice predicciones sobre grandes cantidades de datos asincrónicamente.
Servicio web   Implemente modelos como servicios web.

Cuando el SDK no proporciona acceso a los almacenes de datos, es posible que pueda crear código personalizado con el SDK de Azure pertinente para acceder a los datos. Por ejemplo, la biblioteca cliente del SDK de Azure Storage para Python puede acceder a los datos almacenados en blobs o archivos.

Movimiento de datos a soluciones de Azure Storage compatibles

Azure Machine Learning admite el acceso a datos desde

  • Azure Blob Storage
  • Azure Files
  • Azure Data Lake Storage Gen1
  • Azure Data Lake Storage Gen2
  • Azure SQL Database
  • Azure Database for PostgreSQL

Si usa almacenamiento no compatible, se recomienda usar Azure Data Factory y estos pasos para mover los datos a soluciones de almacenamiento de Azure compatibles. El movimiento de datos a un almacenamiento compatible puede ayudarle a ahorrar costos de salida de datos durante los experimentos de aprendizaje automático.

Azure Data Factory proporciona una transferencia de datos eficaz y resistente con más de 80 conectores pregenerados sin costo adicional. Estos conectores incluyen servicios de datos de Azure, orígenes de datos locales, Amazon S3 y Redshift, y Google BigQuery.

Pasos siguientes