Подключение к службам хранилища в Azure с помощью хранилищ данных

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

ОБЛАСТЬ ПРИМЕНЕНИЯ: Расширение ML для Azure CLIверсии 1

Из этой статьи вы узнаете, как подключиться к службам хранилища данных в Azure с помощью хранилищ данных Машинного обучения Azure и пакета SDK Машинного обучения Azure для Python.

Хранилища данных безопасно подключаются к службе хранилища в Azure, не подвергая риску ваши учетные данные проверки подлинности и целостность исходного источника данных. Они хранят такие сведения о подключении, как идентификатор подписки и авторизация с помощью маркеров, в Key Vault, связанном с рабочей областью, поэтому вы можете безопасно получать доступ к хранилищу без необходимости жесткого кодирования этих сведений в сценариях. Вы можете создавать хранилища данных, которые подключаются к этим решениям службы хранилища Azure.

Сведения о работе с хранилищами данных в общем рабочем процессе доступа к данным в Машинном обучении Azure см. в статье о безопасном доступе к данным.

Если вы предпочитаете немного поработать с кодом, узнайте, как использовать Студию машинного обучения Azure для создания и регистрации хранилищ данных.

Совет

В этой статье предполагается, что вы хотите подключаться к службе хранилища с использованием учетных данных для проверки подлинности на основе учетных данных, таких как субъект-служба или маркер подписанного URL-адреса (SAS). Помните, что если учетные данные зарегистрированы в хранилищах данных, все пользователи с ролью читателя рабочей области могут получить эти учетные данные. Узнайте больше о роли читателя рабочей области.

Если это представляет проблему, узнайте, как подключиться к службам хранилища с использованием доступа на основе удостоверений.

Предварительные требования

  • Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу. Попробуйте бесплатную или платную версию Машинного обучения Azure.

  • Учетная запись хранения Azure с поддерживаемым типом хранилища.

  • Пакет SDK Машинного обучения Azure для Python.

  • Рабочая область машинного обучения Azure.

    Создайте рабочую область Машинного обучения Azure или используйте существующую с помощью пакета SDK для Python.

    Импортируйте классы Workspace и Datastore и загрузите сведения о подписке из файла config.json с помощью функции from_config(). Эта функция выполняет поиск файла JSON по умолчанию в текущем каталоге, но можно также указать параметр path, указывающий на файл, с помощью from_config(path="your/file/path").

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

    При создании рабочей области в ней автоматически регистрируются контейнер BLOB-объектов Azure и общая папка Azure как источники данных рабочей области. Они называются workspaceblobstore и workspacefilestore, соответственно. workspaceblobstore используется для хранения артефактов рабочей области и журналов экспериментов машинного обучения. Он также задается в качестве хранилища данных по умолчанию и не может быть удален из рабочей области. workspacefilestore используется для хранения записных книжек и скриптов R, авторизованных с помощью вычислительного экземпляра.

    Примечание

    Конструктор машинного обучения Azure автоматически создаст хранилище данных с именем azureml_globaldatasets при открытии примера на домашней странице конструктора. В этом хранилище данных содержатся только примеры наборов данных. Не используйте это хранилище данных для доступа к конфиденциальным данным.

Поддерживаемые типы служб хранилища данных

В настоящее время хранилища данных поддерживают хранение сведений о подключении к службам хранилищ, указанных в следующей таблице.

Совет

При использовании неподдерживаемых решений для хранения (не перечисленных в таблице ниже) могут возникнуть проблемы с подключением и работой с данными. Мы рекомендуем переместить данные в поддерживаемое решение службы хранилища Azure. Это также может помочь в других сценариях, таких как экономия затрат на исходящий трафик данных во время экспериментов машинного обучения.

Тип хранилища Authentication type (Тип проверки подлинности) Студия машинного обучения Azure. Пакет SDK Python для Машинного обучения Azure Интерфейс командной строки службы "Машинное обучение Azure" REST API Машинного обучения Azure VS Code
Хранилище BLOB-объектов Azure Ключ учетной записи
Маркер SAS
файлового ресурса Azure. Ключ учетной записи
Маркер SAS
Azure Data Lake Storage 1-го поколения Субъект-служба
Azure Data Lake Storage 2-го поколения Субъект-служба
База данных SQL Azure Проверка подлинности SQL
Субъект-служба
Azure PostgreSQL Проверка подлинности SQL
База данных Azure для MySQL Проверка подлинности SQL ✓* ✓* ✓*
Файловая система Databricks без аутентификации; ✓** ✓ ** ✓**
  • MySQL поддерживается только для конвейера класса DataTransferStep.
  • Databricks поддерживается только для конвейера класса DatabricksStep.

Рекомендации по выбору хранилища

Рекомендуется создать хранилище данных для контейнера BLOB-объектов Azure. Для BLOB-объектов доступны хранилища класса Standard и Premium. Хотя хранилище класса Premium является более дорогим, за счет его высокой пропускной способности можно повысить скорость выполнения обучения, особенно при обучении на основе большого набора данных. О стоимости учетных записей хранения можно узнать на странице Калькулятор цен.

Azure Data Lake Storage 2-го поколения создано на основе хранилища BLOB-объектов Azure и предназначено для анализа больших данных в организации. Основная часть Data Lake Storage 2-го поколения — это добавление иерархического пространства имен в хранилище BLOB-объектов. Иерархическое пространство имен позволяет упорядочивать объекты и файлы в иерархии каталогов для эффективного доступа к данным.

Доступ к хранилищу и разрешения

Чтобы обеспечить безопасное подключение к службе хранилища Azure, Машинному обучению Azure требуется разрешение на доступ к соответствующему контейнеру хранилища. Этот доступ зависит от учетных данных проверки подлинности, используемых для регистрации хранилища данных.

Виртуальная сеть

Машинное обучение Azure требует дополнительных действий по настройке для связи с учетной записью хранения, которая находится за брандмауэром или в виртуальной сети. Если ваша учетная запись хранения находится за брандмауэром, можно добавить IP-адрес клиента в список разрешений с помощью портала Azure.

Машинное обучение Azure может принимать запросы от клиентов за пределами виртуальной сети. Чтобы обеспечить безопасность объекта, запрашивающего данные от службы, и включить отображение данных в рабочей области, используйте частную конечную точку с рабочей областью.

Для пользователей пакета SDK для Python: для доступа к данным с помощью сценария обучения в целевом объекте вычислений этот целевой объект вычислений должен находиться в одной виртуальной сети и подсети с хранилищем. Вычислительный экземпляр или кластер можно использовать в той же виртуальной сети.

Для пользователей Студии машинного обучения Azure некоторые функции, такие как предварительный просмотр наборов данных, профили и автоматизированное машинное обучение, зависят от возможности чтения данных из набора данных. Чтобы эти функции работали с хранилищем за пределами виртуальных сетей, с помощью управляемого удостоверения рабочей области в студии разрешите Машинному обучению Azure доступ к учетной записи хранения из-за пределов виртуальной сети.

Примечание

Если хранилище данных является Базой данных SQL Azure, расположенной за виртуальной сетью, не забудьте установить для параметра Запретить общий доступ значение Нет на портале Azure, чтобы разрешить Машинному обучению Azure доступ к учетной записи хранения.

Проверка доступа

Предупреждение

Кросс-клиентский доступ к учетным записям хранения не поддерживается. Если для вашего сценария требуется доступ между арендаторами, обратитесь к псевдониму группы поддержки данных Машинного обучения Azure по адресу amldatasupport@microsoft.com для получения помощи с пользовательским решением для кода.

В ходе создания и регистрации начального хранилища данных Машинное обучение Azure проверяет, существует ли базовая служба хранилища и имеет ли предоставленный пользователем субъект (имя пользователя, субъект-служба или маркер SAS) доступ к этому хранилищу.

После создания хранилища данных эта проверка осуществляется только для методов, которым требуется доступ к базовому контейнеру хранилища, а не при каждом извлечении объектов хранилища данных. Например, проверка выполняется, если требуется скачать файлы из хранилища данных. Но если вы просто хотите изменить хранилище данных по умолчанию, проверки не будет.

Чтобы проверить подлинность доступа к базовой службе хранилища, можно указать ключ учетной записи, подписанный URL-адрес (SAS) или субъект-службу в соответствующем методе register_azure_*() типа хранилища данных, который вы хотите создать. В таблице типов хранилища перечислены поддерживаемые типы проверки подлинности, соответствующие каждому типу хранилища данных.

Сведения о ключе учетной записи, маркере SAS и субъекте-службе можно найти на портале Azure.

  • Если для проверки подлинности вы планируете использовать ключ учетной записи или маркер SAS, выберите элемент Учетные записи хранения на панели слева и выберите учетную запись хранения, которую требуется зарегистрировать.

    • На странице Обзор приводятся такие сведения, как имя учетной записи, контейнер и имя общей папки.
      • Чтобы использовать ключи учетной записи, перейдите к элементу Ключи доступа на панели Параметры.
      • Чтобы использовать маркеры SAS, перейдите к элементу Подписанные URL-адреса на панели Параметры.
  • Если вы планируете использовать субъект-службу для проверки подлинности, перейдите в раздел регистраций приложений и выберите приложение, которое вы хотите использовать.

    • На соответствующей странице Обзор находятся такие необходимые сведения, как идентификаторы клиентов (tenant ID и client iD).

Важно!

Если необходимо изменить ключи доступа для учетной записи хранилища Azure (ключ учетной записи или маркер SAS), не забудьте синхронизировать новые учетные данные с рабочей областью и хранилищами данных, подключенными к ней. Узнайте, как синхронизировать обновленные учетные данные.

Разрешения

Для контейнера BLOB-объектов Azure и хранилища Azure Data Lake Gen 2 убедитесь, что учетные данные проверки подлинности имеют доступ роли читателя хранилища BLOB-объектов. Узнайте больше о роли читателя хранилища BLOB-объектов. По умолчанию маркер SAS учетной записи не имеет разрешений.

  • Для доступа на чтение данных учетные данные проверки подлинности должны иметь минимум из списка разрешений на чтение для контейнеров и объектов.

  • Для доступа на запись данных также требуются разрешения на запись и добавление.

Создание и регистрация хранилищ данных

При регистрации решения для хранилища Azure в качестве хранилища данных вы автоматически создаете и регистрируете хранилище данных в определенной рабочей области. Дополнительные сведения о сценариях виртуальной сети и о том, где найти необходимые учетные данные для проверки подлинности, см. в разделе Доступ к хранилищу и разрешения.

В этом разделе приведены примеры создания и регистрации хранилища данных с помощью пакета SDK для Python для следующих типов хранилищ. Параметры, приведенные в этих примерах, являются обязательными для создания и регистрации хранилища данных.

Сведения о создании хранилищ данных для других поддерживаемых служб хранилища см. в справочной документации по соответствующим методам register_azure_*.

Если вы предпочитаете немного поработать с кодом, см. статью Подключение к данным с помощью Студии машинного обучения Azure.

Важно!

Если вы отмените регистрацию и попытаетесь повторно зарегистрировать хранилище данных с тем же именем, но эта операция завершится неудачно, обратимое удаление в Azure Key Vault для вашей рабочей области может быть не включено. По умолчанию обратимое удаление включается для экземпляра хранилища ключей, созданного рабочей областью, но оно может не включиться, если использовалось существующее хранилище ключей, или рабочая область была создана до октября 2020 г. Сведения о том, как включить обратимое удаление, см. в разделе Включение обратимого удаления для существующего хранилища ключей.

Примечание

Имя хранилища данных должно содержать только строчные буквы, цифры и символы подчеркивания.

Контейнер BLOB-объектов Azure

Чтобы зарегистрировать контейнер BLOB-объектов в качестве хранилища данных, используйте register_azure_blob_container().

Следующий код создает и регистрирует хранилище данных blob_datastore_name в рабочей области ws. Это хранилище данных обращается к контейнеру BLOB-объектов my-container-name в учетной записи хранения my-account-name с помощью предоставленного ключа доступа учетной записи. Дополнительные сведения о сценариях виртуальной сети и о том, где найти необходимые учетные данные для проверки подлинности, см. в разделе Доступ к хранилищу и разрешения.

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

Чтобы зарегистрировать общую папку Azure в качестве хранилища данных, используйте register_azure_file_share().

Следующий код создает и регистрирует хранилище данных file_datastore_name в рабочей области ws. Это хранилище данных обращается к общей папке my-fileshare-name в учетной записи хранения my-account-name с помощью предоставленного ключа доступа учетной записи. Дополнительные сведения о сценариях виртуальной сети и о том, где найти необходимые учетные данные для проверки подлинности, см. в разделе Доступ к хранилищу и разрешения.

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 2-го поколения

Для хранилища данных Azure Data Lake Storage 2-го поколения (ADLS 2-го поколения) используйте register_azure_data_lake_gen2() для регистрации базы данных учетных данных, подключенной к хранилищу Azure DataLake 2-го поколения, с разрешениями субъекта-службы.

Для использования субъекта-службы необходимо зарегистрировать приложение и предоставить доступ к данным субъекта-службы с помощью управления доступом на основе ролей (Azure RBAC) или списков управления доступом (ACL). Узнайте больше о контроле доступа в ADLS 2-го поколения.

Следующий код создает и регистрирует хранилище данных adlsgen2_datastore_name в рабочей области ws. Это хранилище данных обращается к файловой системе test в учетной записи хранения account_name с помощью предоставленных учетных данных субъекта-службы. Дополнительные сведения о сценариях виртуальной сети и о том, где найти необходимые учетные данные для проверки подлинности, см. в разделе Доступ к хранилищу и разрешения.

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

Создание хранилищ данных с помощью других средств Azure

Помимо создания хранилищ данных с помощью пакета SDK для Python и студии, можно также использовать шаблоны Azure Resource Manager или расширение VS Code Машинного обучения Azure.

Azure Resource Manager

В https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices существует множество шаблонов, которые можно использовать для создания хранилищ данных.

Сведения об использовании этих шаблонов см. в разделе Использование шаблона Azure Resource Manager для создания рабочей области для Машинного обучения Azure.

Расширения VS Code

Если вы предпочитаете создавать хранилища данных и управлять ими с помощью расширения VS Code Машинного обучения Azure, ознакомьтесь с руководством по управлению ресурсами VS Code.

Использование данные в хранилищах данных

После создания хранилища данных создайте набор данных Машинного обучения Azure для взаимодействия с данными. Наборы данных упаковывают ваши данные в потребляемый объект с отложенной оценкой для задач машинного обучения, таких как обучение.

С помощью наборов данных можно загружать или подключать файлы любого формата из служб хранилища Azure для обучения модели в целевом объекте вычислений. Узнайте больше об обучении моделей машинного обучения с помощью наборов данных.

Получение хранилищ данных из рабочей области

Чтобы получить конкретное хранилище данных, зарегистрированное в текущей рабочей области, используйте статический метод get() в классе Datastore:

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

Чтобы получить список хранилищ данных, зарегистрированных в определенной рабочей области, можно использовать свойство datastores в объекте рабочей области:

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

Чтобы получить хранилище данных рабочей области по умолчанию, используйте следующую строку:

datastore = ws.get_default_datastore()

С помощью следующего кода можно изменить хранилище данных по умолчанию. Эта возможность поддерживается только в пакете SDK.

 ws.set_default_datastore(new_default_datastore)

Доступ к данным во время оценки

Машинное обучение Azure предоставляет несколько способов использования моделей для оценки. Некоторые из этих методов не предоставляют доступ к хранилищам данных. В следующей таблице приводятся методы, позволяющие получить доступ к хранилищам данных во время оценки.

Метод Доступ к хранилищу данных Описание
Прогнозирование в пакетном режиме Асинхронное создание прогнозов на основе больших объемов данных.
Веб-служба   Развертывание моделей в качестве веб-служб.

В случаях, когда пакет SDK не предоставляет доступ к хранилищам данных, можно создать пользовательский код для доступа к данным с помощью соответствующего пакета SDK Azure Например, пакет SDK для хранилища Azure для Python является клиентской библиотекой, подходящей для доступа к данным, хранящимся в BLOB-объектах или файлах.

Перемещение данных в поддерживаемые решения хранилища Azure

Машинное обучение Azure поддерживает доступ к данным из хранилища BLOB-объектов Azure, Файлов Azure, Azure Data Lake Storage 1-го поколения, Azure Data Lake Storage 2-го поколения, базы данных SQL Azure и базы данных Azure для PostgreSQL. Если вы используете неподдерживаемое хранилище, рекомендуется переместить данные в поддерживаемые решения хранилища Azure с помощью фабрики данных Azure и следующих действий. Перемещение данных в поддерживаемое хранилище поможет сократить расходы на исходящие данные во время экспериментов машинного обучения.

Фабрика данных Azure обеспечивает эффективную и стабильную передачу данных с помощью более чем 80 предварительно подготовленных соединителей без дополнительных затрат. К этим соединителям относятся службы данных Azure, локальные источники данных, Amazon S3, Redshift и Google BigQuery.

Дальнейшие действия