建立資料資產

已完成

身為資料科學家,您想要專注於定型機器學習模型。 雖然您需要存取資料做為機器學習模型的輸入,但您不想擔心如何取得存取權。 若要簡化對您想要使用資料的存取,您可以使用資料資產

了解資料資產

在 Azure Machine Learning 中,資料資產是資料的儲存位置、如何取得存取權,以及任何其他相關中繼資料的參考。 您可以建立資料資產,以存取在資料存放區、Azure 儲存體服務、公用 URL 中的資料或儲存在本機裝置上的資料。

使用資料資產的優點如下:

  • 您可以與小組的其他成員共用和重複使用資料,以便他們無需記住檔案位置。
  • 您可以在模型定型 (採用任何支援的計算類型) 期間順暢地存取資料,而不必擔心連接字串或資料路徑。
  • 您可以設定資料資產的中繼資料版本

您可以使用下列三個主要類型的資料資產:

Azure Machine Learning 中不同類型資料資產的圖表。

  • URI 檔案:指向特定檔案。
  • URI 資料夾:指向資料夾。
  • MLTable:指向資料夾或檔案,並包含要讀取為表格式資料的結構描述。

注意

URI 代表統一資源識別項,並代表本機電腦上的儲存體位置、Azure Blob 或 Data Lake Storage、公開可用的 https 位置,甚至是連結的資料存放區。

使用資料資產的時機

以 Azure Machine Learning 工作形式執行機器學習工作時,資料資產最有用。 以工作形式,您可以執行 Python 指令碼來取得輸入並產生輸出。 資料資產可以剖析為 Azure Machine Learning 工作的輸入或輸出。

讓我們看看每個類型的資料資產、如何建立,以及如何在工作中使用資料資產。

建立 URI 檔案資料資產

URI 檔案資料資產會指向特定檔案。 Azure Machine Learning 只會儲存檔案的路徑,這表示您可以指向任何類型的檔案。 使用資料資產時,您會指定讀取資料的方式,其取決於您要連線的資料類型。

建立 URI 檔案資料資產時可以使用的支援路徑如下:

  • 本機:./<path>
  • Azure Blob 儲存體:wasbs://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
  • Azure Data Lake Storage (Gen 2):abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>
  • 資料存放區:azureml://datastores/<datastore_name>/paths/<folder>/<file>

重要

建立資料資產並指向儲存在本機裝置上的檔案或資料夾時,會將檔案或資料夾的複本上傳至預設資料存放區 workspaceblobstore。 您可以在 LocalUpload 資料夾中找到該檔案或資料夾。 藉由上傳複本,您仍可以從 Azure Machine Learning 工作區存取資料,即使儲存資料所在的本機裝置無法使用亦然。

若要建立 URI 檔案資料資產,您可以使用下列程式碼:

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FILE,
    description="<description>",
    name="<name>",
    version="<version>"
)

ml_client.data.create_or_update(my_data)

當您將 URI 檔案資料資產剖析為 Azure Machine Learning 工作中的輸入時,您必須先讀取資料,才能使用資料。

想像一下,您要建立想要以工作形式執行的 Python 指令碼,並將輸入參數 input_data 的值設定為 URI 檔案資料資產 (指向一個 CSV 檔案)。 您可以在 Python 指令碼中包含下列程式碼來讀取資料:

import argparse
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

df = pd.read_csv(args.input_data)
print(df.head(10))

如果您的 URI 檔案資料資產指向不同類型的檔案,您必須使用適當的 Python 程式碼來讀取資料。 例如,如果您使用的不是 CSV 檔案,而是 JSON 檔案,則會改用 pd.read_json()

建立 URI 資料夾資料資產

URI 資料夾資料資產會指向特定資料夾。 其運作方式類似於 URI 檔案資料資產,並支援相同的路徑。

若要使用 Python SDK 來建立 URI 資料夾資料資產,您可以使用下列程式碼:

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FOLDER,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

當您將 URI 資料夾資料資產剖析為 Azure Machine Learning 工作中的輸入時,您必須先讀取資料,才能使用資料。

想像一下,您要建立想要以工作形式執行的 Python 指令碼,並將輸入參數 input_data 的值設定為 URI 資料夾資料資產 (指向多個 CSV 檔案)。 您可以讀取資料夾中的所有 CSV 檔案並串連它們,您可以在 Python 指令碼中包含下列程式碼來執行此動作:

import argparse
import glob
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

data_path = args.input_data
all_files = glob.glob(data_path + "/*.csv")
df = pd.concat((pd.read_csv(f) for f in all_files), sort=False)

根據您使用的資料類型,您用來讀取檔案的程式碼可能會變更。

建立 MLTable 資料資產

MLTable 資料資產可讓您指向表格式資料。 建立 MLTable 資料資產時,您會指定要用來讀取資料的結構描述定義。 由於結構描述已使用資料資產定義和儲存,因此您不需要指定使用它時如何讀取資料。

因此,當您的資料的結構描述複雜或經常變更時,您會想要使用 MLTable 資料資產。 您不需在使用資料的每個指令碼中變更讀取資料的方式,而只需在資料資產本身中變更。

若在建立 MLTable 資料資產時定義結構描述,您也可以選擇只指定資料的子集。

針對 Azure Machine Learning 中的某些功能,例如自動化機器學習,您必須使用 MLTable 資料資產,因為 Azure Machine Learning 必須知道如何讀取資料。

若要定義結構描述,您可以將 MLTable 檔案包含在您想要讀取的資料的相同資料夾中。 MLTable 檔案會包含指向您要讀取的資料路徑,以及如何讀取資料:

type: mltable

paths:
  - pattern: ./*.txt
transformations:
  - read_delimited:
      delimiter: ','
      encoding: ascii
      header: all_files_same_headers

若要使用 Python SDK 來建立 MLTable 資料資產,您可以使用下列程式碼:

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<path-including-mltable-file>'

my_data = Data(
    path=my_path,
    type=AssetTypes.MLTABLE,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

當您將 MLTable 資料資產剖析為要以 Azure Machine Learning 工作形式執行的 Python 指令碼輸入時,您可以包含下列程式碼來讀取資料:

import argparse
import mltable
import pandas

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

tbl = mltable.load(args.input_data)
df = tbl.to_pandas_dataframe()

print(df.head(10))

常見的方法是將表格式資料轉換成 Pandas 資料框架。 不過,您也可以將資料轉換成 Spark 資料框架 (如果其更符合您的工作負載)。