OneLake と Azure Machine Learning の統合

OneLakeはFabricのオープンレイクストレージレイヤーで、Azure Storage互換アクセスが可能です。 ADLS Gen2/DFS アクセス用のonelake.dfs.fabric.microsoft.comと BLOB API アクセス用のonelake.blob.fabric.microsoft.comを介して、Fabricデータを公開します。 この記事では、Azure Machine Learning AML データストア、バッチ エンドポイントの入力と出力、ノートブックまたはスクリプトから直接abfss://アクセスを介してこれらのサーフェスを使用する方法について説明します。

Azure Machine Learningでは、OneLake に次の 3 つの主要な統合ポイントが提供されます。

  1. データストア - Fabric Lakehouse Filesの場所をAzure Machine Learningデータストアとして登録し、ジョブとデータ資産から参照します。 Azure Machine Learningでは、Fabric Lakehouse テーブルへの直接リンクもサポートされていますが、このパターンには ADLS Gen2 へのコピーが含まれており、このドキュメントでは説明しません。
  2. バッチ エンドポイント - OneLake に存在する入力と出力を使用してバッチ デプロイを呼び出します (現在、登録済みのデータストアまたはショートカットに基づく BLOB/ADLS データストアを使用)。
  3. OneLake API/ダイレクト ABFSS アクセス - Azure Machine Learningランタイム環境で実行されているノートブックとスクリプトから OneLake を直接読み書きします。
Azure Machine Learningの統合ポイント OneLake 画面 Azure Machine Learning 画面 データは ADLS Gen2 にコピーされますか? Azure Machine Learningで使用するプライマリ URI
OneLake データストア Lakehouse /Files セクション。 CLI / SDK(YAML) いいえ azureml://datastores/<name>/paths/<path>
OneLake レイクハウス テーブル (UI にリンクされた) Lakehouse /Tables セクション。 Azure Machine Learning スタジオ (UI) はい - 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 Machine Learning コンピューティング上のノートブック/スクリプト いいえ abfss://<workspace>@onelake.dfs.fabric.microsoft.com/<lakehouse>.Lakehouse/Files/...

Note

azureml://はAzure Machine Learning固有の URI スキームであり、ストレージ プロトコルではありません。 Azure Machine Learning のコントロール プレーンとデータ ランタイムでは、名前付きデータストアに登録された接続メタデータと資格情報を使用して、基になるストレージの場所 (Blob、ADLS Gen2、OneLake など) を解決します。

Azure Machine Learning データストアとしての OneLake

データストアは、外部ストレージの場所 (OneLake、Azure Blob、ADLS Gen2、Azure Files) に対するAzure Machine Learningワークスペース スコープの抽象化です。 データ自体をプロビジョニングまたはコピーすることなく、既存のストレージ リソース、エンドポイント、コンテナー/ファイルシステム/項目、資格情報または ID 構成の接続メタデータが格納されます。 Azure Machine Learning内のさまざまなエクスペリエンスでは、安定した URI (azureml://datastores/<name>/paths/<path>) を使用してデータストアを参照できます。

Note

Azure Machine Learning スタジオ現在、UI では OneLake をデータストア型として一覧表示していませんが、CLI と SDK では、YAML 定義を使用した OneLake データストアの作成と管理がサポートされています。

Microsoft Fabricから必要な接続メタデータ

Fabricの lakehouse アイテムの [プロパティ] ページから、次の情報をキャプチャします。

  • エンドポイント - OneLake の場合は、使用するプロトコルに応じて onelake.dfs.fabric.microsoft.com または onelake.blob.fabric.microsoft.com を使用します。
  • ワークスペース GUID
  • 項目 GUID(レイクハウスの GUID)

Azure Machine Learningでデータストアを作成する

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 Machine Learning ワークスペースにデータストアを作成します。 <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 Machine Learning ジョブでデータストアを使用する

Azure Machine Learning データストアが登録されると、そのazureml:// URI をさまざまなエクスペリエンスで使用できるようになります。 このサンプルでは、Azure Machine Learning ジョブで OneLake データストアを参照する方法を示します。 次の URI は、ジョブ Input/Output、データ資産の定義、および Azure Machine Learning でデータストア パスを受け入れるすべての箇所で有効です。ただし、バッチ エンドポイントは除きます。バッチ エンドポイントでは現在、入力または出力のデータストアの種類として OneLake がサポートされていません。

次のジョブ サンプルでは、同じ OneLake データストア内のある場所から別の場所にファイルをコピーします。 同じジョブの入力と出力として、サポートされているさまざまなストレージ ターゲット (BLOB、ADLS Gen2、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>

OneLake データストアを直接参照できるAzure Machine Learning エクスペリエンス

# Azure Machine Learningサーフェス/インターフェイス 向き OneLake のアドレス指定 Source
1 Azure Machine Learning ジョブ - Input / Output (CLI v2、SDK v2 command、pipeline、sweep) R / W azureml://datastores/<onelake_ds>/paths/... ジョブ内のデータにアクセスする
2 OneLake データストア パスに対して登録されたデータ資産 (uri_file、uri_folder) R(アセットは読み取り専用です) azureml://datastores/<onelake_ds>/paths/... バージョン管理で囲まれた データ資産の作成
3 Azure Machine Learning コンピューティング上のノートブックまたはスクリプトにおけるazureml-fsspecを介した Azure Machine Learning データ ランタイム R / W azureml://datastores/<onelake_ds>/paths/... fsspec.open(...)またはAzureMachineLearningFileSystemで開きました 対話型開発中に OneLake からデータにアクセスする

バッチ エンドポイントを使用した OneLake

Azure Machine Learningを使用すると、Fabricを使用して、機械学習モデルとパイプラインを使用した実行時間の長い非同期推論のモデル デプロイ バッチ エンドポイントにアクセスできます。

このパターンでは、アーキテクチャの目標は、入力特徴データと出力予測の両方の 1 つの物理コピーを、FabricとAzure Machine Learningの両方のプラットフォームからアクセスできるようにすることです。 ADLS 内のファイルは、2 つの有効なアドレスを持ちます。1 つは Azure Machine Learning のバッチ エンドポイントが入力/出力として受け入れる azureml://datastores/... URI、もう 1 つは Fabric のノートブック、パイプライン、SQL 分析エンドポイントからクエリできるレイクハウス パス(ADLS ショートカットを介して有効)です。 このパターンには、コピー、スケジュールされた同期、第 2 の信頼のソースはありません。 レイクハウス ビューと Azure Machine Learning ビューは、同じストレージ アカウントのプロジェクションです。

バッチ エンドポイントは、2 つの OneLake に表示されるフォルダーの間に配置されます。

  • 入力データ - Fabric データ エンジニアリングによって準備された、整理済みの/Files格納場所(未加工データのランディング領域、スコアリング済みリクエスト、日次パーティション)。 Azure Machine Learningは、ショートカットと同じストレージを指す ADLS Gen2 データストアを介して読み取ります。
  • 出力 - バッチ ジョブによって同じ ADLS Gen2 アカウントに書き込まれる予測結果の保存先/Filesです。これはショートカットを介して Lakehouse に表示され、Fabric ノートブック、データフロー、または Delta テーブルの読み込みステップですぐに利用できます。

より大まかに言えば、このパターンは、既に ADLS Gen2 にデータが配置されているシナリオに適しています。 たとえば、既存のデータ レイクフィード分析や ML ワークロードなどです。 OneLake ショートカットは、そのデータを OneLake に移行または複製するのではなく、Fabric lakehouse 内の既存の ADLS の場所を表示しますが、同じアカウントはデータストアとして登録されたままです。

Azure Machine Learningノートブックとスクリプトからの OneLake SDK または API アクセス

Azure Machine Learning コンピューティング (コンピューティング インスタンス、コンピューティング クラスター、またはサーバーレス コンピューティング) でコードを実行すると、abfss:// パスまたはその OneLake データストア パスを使用して OneLake に直接読み書きできます。 OneLake SDK と API は柔軟な統合ポイントを提供し、ノートブック駆動型の探索、カスタム トレーニング スクリプト、Azure Machine Learning コンピューティング経由の/Filesと/Tablesアクセスの両方を必要とするコンポーネントに使用できます。

OneLake では、OneLake 上のファイルに対して abfss:// URI が使用され、ID またはサービス プリンシパル ベースの認証に有効なジョブ入力パスとして使用できます。

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

パフォーマンスとスケーラビリティ - Azure Machine Learningで適切なリーダーを選択する

fsspec(およびラップする OneLake adlfs バックエンド) は、Python レベルのファイルシステム抽象化です。 ノートブックには便利ですが、それ自体は並列データ エンジンではありません。コンカレンシーは 1 つのPython プロセスによって制限されます。 したがって、パフォーマンスはリーダーとその上に座っているエンジンによって異なります。 Azure Machine Learning データ ランタイムのドキュメントでは、トレーニング データ用のクライアント側のPythonダウンロードに対してAzure Machine Learning データ ランタイムを使用することを明示的に推奨しています。「クライアント コードでPythonを使用する場合」で観察されるストレージ スループットの制約に関する説明があります。グローバル インタープリター ロック (GIL) の問題が原因で、ストレージからデータをダウンロードする場合。

OneLake での大規模なデータ処理に Azure Machine Learning Spark を使用する

OneLake は分析レイクとして設計されており、 abfss:// エンドポイントは Spark が使用する並列のパーティション分割読み取りパターン用に構築されています。 TB 規模の ETL、特徴エンジニアリング、または分散トレーニング データ準備の場合は、fsspec上Azure Machine Learning Spark を使用します。理想的には、マルチノード クラスターで使用します。

  • Azure Machine Learning のサーバーレス Spark または アタッチされた Synapse Spark プール - Azure Machine Learning 内で Spark ジョブ/ノートブックを実行し、abfss://経由で OneLake から直接読み取ります。 Azure Machine Learningの Apache Spark を参照してください。

  • Fabric Spark - Fabric内で実行されている Spark ノートブック/ジョブは、同じ lakehouse にファースト クラスのアクセス権を持ち、厳選された出力を OneLake データストア経由でAzure Machine Learningに渡すことができます。

次の例では、Azure Machine Learning コンピューティング上の Spark セッションでレイクハウスの Delta テーブルを読み取る方法を示します。

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

OneLake と Azure Machine Learning mltable

現在、ファイルのストリーミング時に、 mltable を介した OneLake に基づくデータの読み取りは失敗します。 観察されたエラーには、 ScriptExecution.StreamAccess.NotFound と Invalid argument (os error 22)が含まれます。 Azure Machine Learningコンピューティングでは、同じデータストアと ID に対して、azureml-fsspec、pyarrow、または Azure Storage Data Lake SDK を介して OneLake を解決して読み取ることができます。

ML テーブルの代わりに、次のいずれかの代替手段を検討してください。

  • OneLake の読み取りでは、uri_file / uri_folder データ アセットを優先し、azureml-fsspec + pyarrow / pandas / polars / DuckDB(単一ノード)、または abfss:// 上の Spark(分散)を使用して読み込んでください。 Microsoft Learn mltableドキュメント自体は、単純な Parquet フォルダーまたは CSV ファイルの場合は、uri_file / uri_folderが推奨される選択肢であることを示しています。
  • mltableセマンティクスが本当に必要な場合 (最も一般的には、を要求する type: mltableとして) データを最初に ADLS Gen2 アカウントにステージングし、その場所に対してmltableを構築します。 mltable は現在、ADLS Gen2 で信頼できます。
  • OneLake ショートカット パターン(バッチ エンドポイントの一部として説明)は、ML Table に自然に適しています。同じ物理ファイルが ADLS Gen2(mltable が機能する場所)に存在し、ショートカットを介して 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_types、take_random_sample) 選択したエンジンで相当するものを適用します ― polars / duckdb LazyFrame も同様にフィルターと射影をプッシュダウンし、abfss:// 上の Spark でも大規模環境で同じことを行います
マルチソース パス構成 - 複数のファイル、フォルダー、glob パターン、さらにはストレージ アカウントにまたがる 1 つのテーブル fs.glob(...)、azureml-fsspec、または Spark のpyarrow.dataset.dataset(paths)のspark.read.parquet(*paths)を使用して、パスの一覧を 1 つの論理データセットとして読み取ります
Azure Machine Learning ジョブのeval_mount / eval_downloadモード (ジョブの送信時にMLTable ファイルからのパスを解決し、参照されているもののみをマウントする) アップストリームで厳選されたサブセットを実体化し(Fabric ノートブックまたは Azure Machine Learning の前処理ジョブが専用の /Files/curated/... フォルダーに書き込む)、それを uri_folder に指定します
読み取りレシピ(データだけでなく)を、mltable 型のデータアセットを介してバージョン管理すること ローダー スクリプトを Git のモデル コードでバージョン管理するか、トレーニング スクリプトの横にチェックインされた小さなローダー モジュールと uri_folder データ資産をペアリングします
**AutoML 入力— AutoML は type: mltable を要求します (AutoML トレーニングを設定する) ADLS Gen2 にデータをステージングし (lakehouse からのショートカットは 1 つの物理コピーを保持します)、そこに mltable を作成します

OneLake のカスタム トレーニングとスコアリングには、uri_file / uri_folderに加えて、選択したエンジン (単一ノードpyarrow / polars / duckdb、または Azure Machine Learning に分散された Spark) を使用します。 これらのオプションは、同等以上のスループットで mltable と同じ機能を提供します。 AutoML の場合、OneLake 経由でmltableがサポートされるまで ADLS Gen2 経由でルーティングします。 OneLake へのショートカットを使用すると、データの重複を回避し、他のユース ケースでFabricでデータを使用できます。

Considerations

  • ID モデル。 OneLake では SaaS ID モデルが使用されるため、サブスクリプション ID は公開されません。 アクセスは、ストレージ アカウントに対する Azure ロールベースのアクセス制御 (Azure RBAC) ではなく、ターゲット lakehouse 上の Fabric ワークスペース ロール (Admin、Member、Contributor、Viewer) によって制御されます。 OneLake データストアでは、データストアの作成に関する記事に記載されている 2 つの資格情報モード がサポートされています。 データストアを設定して Fabric lakehouse にアクセスするには、Fabric ワークスペース共同作成者ロールと Azure Machine Learning ワークスペース管理者ロールを持つユーザーが必要です。

  • データの単一コピー。 OneLake データストアとダイレクト ABFSS アクセスでは、OneLake の "単一コピー" 原則が保持されます。 バッチ エンドポイントのショートカット パターンでは、この原則は論理的に保持されますが、基になる物理ストアとして ADLS Gen2 アカウントが必要です。

  • リージョンの共同場所。 リージョン間のエグレスを回避するために、Azure Machine Learning ワークスペース、コンピューティング、Fabric容量または OneLake リージョンを同じリージョンに配置します。