Интеграция OneLake с Машинное обучение Azure

OneLake — это открытый слой хранения Fabric с доступом, совместимым с служба хранилища Azure. Он предоставляет доступ к данным Fabric через onelake.dfs.fabric.microsoft.com для доступа к ADLS Gen2/DFS и через onelake.blob.fabric.microsoft.com для доступа к Blob API. В этой статье описывается, как Машинное обучение Azure может использовать эти возможности через хранилища данных AML, входные и выходные данные пакетных конечных точек, а также прямой abfss:// доступ из ноутбуков или скриптов.

Машинное обучение Azure предоставляет три основные точки интеграции с OneLake:

  1. Хранилища данных — регистрация расположения Fabric Lakehouse Files в качестве хранилища данных Машинное обучение Azure и ссылки на него из заданий и ресурсов данных. Машинное обучение Azure также поддерживает прямое связывание с таблицами Fabric Lakehouse, но эта схема предполагает копирование в ADLS Gen2 и не рассматривается в этом документе.
  2. Пакетные конечные точки — для вызова пакетных развертываний с входными и выходными данными, которые хранятся в OneLake (на сегодняшний день — через зарегистрированное хранилище данных или через хранилище данных Blob/ADLS на основе ярлыков).
  3. API OneLake / прямой доступ через ABFSS — чтение и запись данных в OneLake напрямую из ноутбуков и скриптов, работающих в средах выполнения Машинное обучение Azure.
Точка интеграции в Машинное обучение Azure Поверхность OneLake поверхность Машинное обучение Azure Копируются ли данные в ADLS 2-го поколения? Основной URI для использования в Машинное обучение Azure
Хранилище данных OneLake Раздел «Lakehouse»/Files. CLI/ SDK (YAML) No azureml://datastores/<name>/paths/<path>
Таблица OneLake lakehouse (связанная с пользовательским интерфейсом) Раздел «Lakehouse»/Tables. Студия машинного обучения Azure (пользовательский интерфейс) Да — скопировано через конвейер Fabric в ADLS Gen2, а затем зарегистрировано azureml://datastores/<adls_ds>/paths/<path>
Входные и выходные данные пакетной конечной точки Lakehouse /Files (через ярлык ADLS). CLI/ SDK / REST Optional azureml://datastores/<name>/paths/<path> или abfss://...
Direct OneLake API / ABFSS /Files и /Tables. Записные книжки и скрипты для вычислений Машинное обучение Azure No abfss://<workspace>@onelake.dfs.fabric.microsoft.com/<lakehouse>.Lakehouse/Files/...

Note

azureml://— это схема URI Машинное обучение Azure, а не протокол хранения. Плоскость управления Машинное обучение Azure и среда выполнения данных используют его для определения фактического расположения базового хранилища (Blob, ADLS Gen2, OneLake и т. д.) на основе метаданных подключения и учетных данных, зарегистрированных в именованном хранилище данных.

OneLake в качестве хранилища данных Машинное обучение Azure

Хранилище данных — это абстракция в пределах рабочей области Машинное обучение Azure для внешнего расположения хранилища (OneLake, Azure Blob Storage, ADLS Gen2, Файлы Azure). Он сохраняет метаданные подключения для существующего ресурса хранилища, конечной точки, контейнера, файловой системы или элемента, а также учетных данных или конфигурации удостоверений, без подготовки или копирования самих данных. Различные возможности в Машинное обучение Azure могут ссылаться на хранилища данных с помощью стабильного URI (azureml://datastores/<name>/paths/<path>).

Note

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

Метаданные подключения, необходимые для Microsoft Fabric

На странице «Свойства» элемента Lakehouse в Fabric запишите:

  • Конечная точка — для OneLake используйте onelake.dfs.fabric.microsoft.com или onelake.blob.fabric.microsoft.com в зависимости от протокола, который требуется использовать.
  • GUID рабочей области
  • GUID элемента (GUID Lakehouse)

Создание хранилища данных в Машинное обучение Azure

onelake-datastore.yml:

$schema: https://azuremlschemas.azureedge.net/latest/oneLakeDatastore.schema.json
name: <name_of_datastore>
type: onelake
description: Datastore pointing to a Microsoft Fabric lakehouse.
onelake_workspace_name: <workspace_guid>
endpoint: onelake.dfs.fabric.microsoft.com
artifact:
  type: lakehouse
  name: <item_guid>/Files   # Include /Files in the name to point at the lakehouse Files layer; omit it to point at the root of the item.

С помощью Azure CLI создайте хранилище данных в целевой Машинное обучение Azure рабочей области. Замените <name_of_AML_workspace><name_of_datastore> заполнители соответствующими значениями.

az ml datastore create --file ./onelake-datastore.yml \
    --resource-group rg-amlonelake \
    --workspace-name <name_of_AML_workspace>

Использование хранилища данных в заданиях Машинное обучение Azure

После регистрации хранилища данных Машинное обучение Azure его URI azureml:// становится доступен для использования в различных интерфейсах. В этом примере показано, как ссылаться на хранилище данных OneLake в задании Машинное обучение Azure. Следующий унифицированный идентификатор ресурса (URI) допустим для задания Input/Output, в определениях ресурсов данных и везде, где Машинное обучение Azure принимает путь к хранилищу данных, за исключением пакетных конечных точек, которые в настоящее время не поддерживают OneLake в качестве типа хранилища данных для входных или выходных данных.

Следующий пример задания копирует файл из одного места в другое в одном хранилище OneLake. Вы можете использовать сочетание различных поддерживаемых целевых объектов хранения (BLOB-объектов, ADLS 2-го поколения, OneLake) в качестве входных и выходных данных в одном задании.

type: command
command: cp ${{inputs.input_data}} ${{outputs.output_data}}
compute: azureml:<replace_with_aml_compute_target>
environment: azureml://registries/azureml/environments/sklearn-1.1/versions/4
inputs:
  input_data:
    mode: ro_mount
    path: azureml://datastores/<name_of_datastore>/paths/<folder-path>/<file-name> # Do not include /Files in the <file-name> portion of the path. Reason being that the datastore is already pointed at the /Files layer of the lakehouse via the artifact name in the datastore definition.
    type: uri_file
outputs:
  output_data:
    mode: rw_mount
    path: azureml://datastores/<name_of_datastore>/paths/<folder-path>/<file-name> # Do not include /Files in the <file-name> portion of the path. Reason being that the datastore is already pointed at the /Files layer of the lakehouse via the artifact name in the datastore definition.
    type: uri_file
    # optional: if you want to create a data asset from the output, 
    # then uncomment `name` (`name` can be set without setting `version`, and in this way, we will set `version` automatically for you)
    # name: <name_of_data_asset> # use `name` and `version` to create a data asset from the output
    # version: <version_of_data_asset>

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

# поверхность / интерфейс Машинное обучение Azure Направление Адресация OneLake Source
1 задания Машинное обучение Azure — Input / Output (CLI версии 2, пакет SDK версии 2 command, , pipeline) sweep R / W azureml://datastores/<onelake_ds>/paths/... Доступ к данным в задании
2 Ресурсы данных (uri_file, uri_folder), зарегистрированные для пути к хранилищу данных OneLake R (ассеты — ссылки, доступные только для чтения) azureml://datastores/<onelake_ds>/paths/... с поддержкой версионирования Создание ресурсов данных
3 Среда выполнения данных Машинное обучение Azure через azureml-fsspec в записных книжках и сценариях на вычислительных ресурсах Машинное обучение Azure R / W azureml://datastores/<onelake_ds>/paths/... открыт с помощью fsspec.open(...) или AzureMachineLearningFileSystem Доступ к данным из OneLake во время интерактивной разработки

OneLake с конечными точками для пакетной обработки

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

В этом шаблоне архитектурная цель состоит в том, чтобы сохранить единую физическую копию входных данных функций и прогнозов выходных данных, доступных для обеих платформ — Fabric и Машинное обучение Azure. Файл в ADLS имеет два допустимых адреса — URI azureml://datastores/..., который конечные точки пакетной обработки Машинное обучение Azure принимают в качестве входных и выходных данных, и путь к lakehouse (доступный через ярлык ADLS), к которому могут обращаться с запросами записные книжки, конвейеры и конечные точки аналитики SQL в Fabric. Этот шаблон не включает в себя копию, не запланированную синхронизацию, ни второй источник истины. Представление Lakehouse и представление Машинное обучение Azure являются проекциями одной учетной записи хранения.

Конечные точки пакетной обработки находятся между двумя папками, видимыми в OneLake:

  • Входные данные — подготовленное расположение данных (/Files зона первичной загрузки необработанных данных, оценённые запросы, ежедневные партиции), подготовленное инженерами данных Fabric. Машинное обучение Azure считывает его через хранилище данных ADLS 2-го поколения, которое указывает на то же хранилище, что и ярлык.
  • Выходные данные — путь к прогнозам/Files, записываемым пакетным заданием в ту же учетную запись ADLS Gen2; он отображается в Lakehouse через shortcut и сразу доступен для записных книжек Fabric, потоков данных или шага загрузки в таблицу Delta.

Более широко этот шаблон хорошо подходит для сценариев, где у вас уже есть данные, размещенные в ADLS 2-го поколения. Например, существующее озеро данных, обеспечивающее аналитические нагрузки или нагрузки машинного обучения. Вместо переноса или дедупликации данных в OneLake ярлык OneLake отображает существующее расположение ADLS в Fabric lakehouse, в то время как та же учетная запись остается зарегистрированной в качестве хранилища данных.

Доступ к OneLake SDK или API из записных книжек и скриптов Машинное обучение Azure

Если код выполняется в вычислительной среде Машинное обучение Azure (вычислительный экземпляр, вычислительный кластер или бессерверные вычислительные ресурсы), он может напрямую читать и записывать данные в OneLake через путь abfss:// или через путь к хранилищу данных OneLake. SDK и API OneLake предоставляют гибкую точку интеграции и могут использоваться для исследования в записных книжках, пользовательских сценариев обучения и компонентов, которым требуется доступ как через /Files, так и через /Tables с использованием вычислительных ресурсов Машинное обучение Azure.

OneLake использует URI abfss:// для файлов в OneLake, и его можно использовать как допустимый входной путь задания для аутентификации на основе удостоверения или субъекта службы:

abfss://<workspace_guid>@<endpoint>/<item_guid>/Files/<path>

Производительность и масштабируемость— выбор правильного средства чтения в Машинное обучение Azure

fsspec (а также серверная часть OneLake adlfs, которую он оборачивает) — это абстракция файловой системы уровня Python. Это удобно для записных книжек, но не является параллельным обработчиком данных. Его параллелизм ограничен одним процессом Python. Поэтому производительность зависит от модуля чтения и движка, работающих поверх него. В документации по среде выполнения для работы с данными Машинное обучение Azure явно рекомендуется использовать среду выполнения для работы с данными Машинное обучение Azure вместо загрузки данных для обучения на стороне клиента с помощью Python, при этом отмечается, что наблюдались ограничения пропускной способности хранилища «когда клиентский код использует Python для загрузки данных из хранилища из-за проблем, связанных с глобальной блокировкой интерпретатора (GIL)».

Использование Машинное обучение Azure Spark для крупномасштабной обработки данных в OneLake

OneLake спроектирован как аналитическое озеро данных, а конечная точка abfss:// предназначена для параллельного секционированного чтения, используемого Spark. Для ETL на уровне терабайт, проектирования признаков или распределенной подготовки обучающих данных используйте Машинное обучение Azure Spark поверх fsspec, в идеале в кластере с несколькими узлами:

  • Бессерверный Spark в Машинное обучение Azure или присоединенном пуле Synapse Spark — выполнение заданий и записных книжек Spark внутри Машинное обучение Azure и чтение OneLake напрямую с помощьюabfss://. См. раздел Apache Spark в Машинное обучение Azure.

  • Fabric Spark — записные книжки и задания Spark, выполняемые в Fabric, имеют прямой доступ к тому же Lakehouse и могут передавать подготовленные результаты в Машинное обучение Azure через хранилище данных OneLake.

В следующем примере показано чтение Delta-таблицы Lakehouse из сеанса Spark в вычислительной среде Машинное обучение Azure:

df = (
    spark.read.format("delta")
        .load(
            "abfss://<workspace_guid>@onelake.dfs.fabric.microsoft.com/"
            "<item_guid>/Tables/<table-name>"
        )
)

OneLake и Машинное обучение Azure mltable

В настоящее время чтение данных в OneLake через mltable не выполняется при потоковом чтении файла. Наблюдаемые ошибки включают ScriptExecution.StreamAccess.NotFound и Invalid argument (os error 22). Вычислительные ресурсы Машинное обучение Azure могут обращаться к OneLake и считывать данные из него через azureml-fsspec, pyarrow или пакет SDK служба хранилища Azure Озеро данных с тем же хранилищем данных и удостоверением.

Вместо таблицы машинного обучения рассмотрите один из следующих вариантов:

  • При чтении из OneLake предпочтительно использовать ресурсы данных uri_file / uri_folder и загружать их с помощью azureml-fsspec + pyarrow / pandas / polars / DuckDB (один узел) или с помощью Spark в abfss:// (распределённо). Документация Microsoft Learn mltable сама помечает, что для простой папки Parquet или CSV-файла рекомендуется uri_file / uri_folder использовать.
  • Если семантика mltable действительно необходима — чаще всего в качестве входных данных для AutoML, для которого требуется type: mltable — сначала поместите данные в учетную запись ADLS Gen2 и создайте mltable для этого расположения. mltable надежно работает с ADLS Gen2 на данный момент.
  • Шаблон ярлыка OneLake (обсуждаемый в контексте пакетных конечных точек) естественно подходит для ML Table: один и тот же физический файл хранится в ADLS Gen2 (где работает mltable) и отображается в lakehouse Fabric через ярлык (где его видят инструменты Fabric), без копирования данных.

mltable объединяет несколько возможностей, которые uri_file / uri_folder не предоставляют из коробки. В следующей таблице перечислены ближайшие эквиваленты при чтении OneLake напрямую.

mltable Возможность Альтернатива
Декларативная переносимая схема чтения (разделитель, кодировка, заголовок, размер секции, типы столбцов) сохранялась в виде MLTable файла вместе с данными. Закрепите параметры чтения в Python (pyarrow.parquet.ParquetDataset, pandas.read_csv(...), polars.scan_parquet(...), duckdb.read_parquet(...)) и храните этот модуль загрузки в системе контроля версий
Встроенные преобразования во время чтения (filter, , drop_columns, convert_column_typestake_random_sample) Примените эквиваленты в выбранной вами среде выполнения — polars / duckdb ленивые фреймы аналогичным образом проталкивают фильтры и проекции вниз; Spark на abfss:// делает то же самое в крупном масштабе
Состав пути с несколькими источниками — одна таблица с несколькими файлами, папками, шаблонами глобов и даже учетными записями хранения Используйте fs.glob(...) из azureml-fsspec, pyarrow.dataset.dataset(paths) или Spark spark.read.parquet(*paths), чтобы считать список путей как один логический набор данных
eval_mount / eval_download режимы в заданиях Машинное обучение Azure (разрешение путей из файла MLTable при отправке задания, подключаются только объекты, на которые есть ссылки) Материализуйте специально отобранное подмножество на вышестоящем этапе (блокнот Fabric или задание предварительной обработки в Машинное обучение Azure записывает его в выделенную папку /Files/curated/...) и укажите путь к нему: uri_folder
Управление версиями рецепта чтения данных (а не только самих данных) с помощью ресурса данных типа mltable Версионируйте скрипт загрузчика вместе с кодом модели в Git или свяжите ресурс данных uri_folder с небольшим модулем загрузчика, зафиксированным в репозитории рядом со скриптом обучения
**Входные данные для AutoML — требуется type: mltable (Настройка обучения AutoML) Поместите данные в ADLS Gen2 (ярлык из хранилища lakehouse позволяет сохранить одну физическую копию) и создайте mltable там

Для настраиваемого обучения и скоринга в OneLake используйте uri_file / uri_folder вместе со средой выполнения по вашему выбору (pyarrow / polars / duckdb один узел или распределенный Spark в Машинное обучение Azure). Эти параметры предоставляют те же функциональные возможности, что mltable и с сравнимой или лучшей пропускной способностью. Для AutoML используйте маршрутизацию через ADLS Gen2, пока не будет поддерживаться mltable через OneLake. Вы можете использовать ярлык OneLake, чтобы избежать дублирования данных и по-прежнему иметь данные, доступные в Fabric для других вариантов использования.

Considerations

  • Модель идентификации. OneLake использует модель идентификации SaaS, поэтому не раскрывает Subscription ID. Вместо управления доступом на основе ролей Azure (Azure RBAC) для учетной записи хранения доступ регулируется ролями рабочей области Fabric (Администратор, Участник, Соавтор, Читатель) в целевом лейкхаусе. Хранилище данных OneLake поддерживает два режима учетных данных, которые описаны в разделе "Создание хранилищ данных". Чтобы настроить хранилище данных и получить доступ к Fabric lakehouse, вам потребуется пользователь с ролью участника Fabric рабочей области и ролью администратора рабочей области Машинное обучение Azure.

  • Одна копия данных. Хранилище данных OneLake и прямой доступ ABFSS сохраняют принцип "единой копии" OneLake. Шаблон ярлыка для пакетных конечных точек логически следует этому принципу, но требует учетную запись ADLS Gen2 в качестве базового физического хранилища данных.

  • Совместное расположение региона. Поместите рабочую область Машинное обучение Azure, вычислительные ресурсы и Fabric или регион OneLake в том же регионе, чтобы избежать исходящего трафика между регионами.