创建数据资产
作为数据科学家,你希望专注于训练机器学习模型。 尽管你需要将数据作为机器学习模型的输入进行访问,但你不希望顾虑如何获取访问权限。 若要简化对要使用的数据的访问,可以使用数据资产。
了解数据资产
在 Azure 机器学习中,数据资产是对数据存储位置、如何获取访问权限以及任何其他相关元数据的引用。 可以创建数据资产来访问数据存储、Azure 存储服务、公共 URL 中的数据或存储在本地设备上的数据。
使用数据资产的好处包括:
- 可以与团队其他成员共享和重复使用数据,这样他们就无需记住文件位置。
- 可以在模型训练期间(在任何受支持的计算类型上)无缝访问数据,而无需担心连接字符串或数据路径。
- 可以对数据资产的元数据进行版本控制。
可以使用三种主要类型的数据资产:
- URI 文件:指向特定文件。
- URI 文件夹:指向文件夹。
- MLTable:指向文件夹或文件,并包含要读取为表格数据的架构。
注意
URI 代表统一资源标识符,表示本地计算机上的存储位置、Azure Blob 或 Data Lake Storage、公开可用的 https 位置,甚至是附加数据存储。
何时使用数据资产
在将机器学习任务作为 Azure 机器学习作业执行时,数据资产最有用。 作为作业,你可以运行接受输入并生成输出的 Python 脚本。 可将数据资产分析为 Azure 机器学习作业的输入或输出。
让我们看看每种类型的数据资产、它们的创建方式以及如何在作业中使用数据资产。
创建 URI 文件数据资产
URI 文件数据资产指向特定文件。 Azure 机器学习仅存储文件路径,这意味着可以指向任何类型的文件。 使用数据资产时,请指定读取数据的方式,具体取决于要连接到的数据类型。
创建 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 机器学习工作区访问数据。
若要创建 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 机器学习作业中的输入时,首先需要读取数据,然后才能使用它。
假设你创建了一个要作为作业运行的 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 代码来读取数据。 例如,如果使用的是 JSON 文件,而不是 CSV 文件,则改用 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 机器学习作业中的输入时,首先需要读取数据,然后才能使用它。
假设你创建了一个要作为作业运行的 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 机器学习中的某些功能(如自动化机器学习),需要使用 MLTable 数据资产,因为 Azure 机器学习需要知道如何读取数据。
若要定义架构,可以将 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 机器学习作业运行的 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 数据帧来更好地满足你的工作负载。