即使有 4 个文件,AzureML Dataset.File.from_files 创建速度也非常慢

3no*_*mis 5 azure-sdk-python azure-machine-learning-service

我的 BlobStorage 中有几千个视频文件,我将其设置为数据存储。此 Blob 存储每天晚上都会收到新文件,我需要拆分数据并将每个拆分注册为新版本的 AzureML 数据集。

这就是我进行数据分割的方式,只需获取 blob 路径并分割它们即可。

container_client = ContainerClient.from_connection_string(AZ_CONN_STR,'keymoments-clips')
blobs = container_client.list_blobs('soccer')
blobs = map(lambda x: Path(x['name']), blobs)
train_set, test_set = get_train_test(blobs, 0.75, 3, class_subset={'goal', 'hitWoodwork', 'penalty', 'redCard', 'contentiousRefereeDecision'})
valid_set, test_set = split_data(test_set, 0.5, 3)
Run Code Online (Sandbox Code Playgroud)

train_set, test_set, valid_set只是包含 blob 存储路径和类的 nx2 numpy 数组。

这是我尝试创建数据集的新版本时的情况:

datastore = Datastore.get(workspace, 'clips_datastore')

dataset_train = Dataset.File.from_files([(datastore, b) for b, _ in train_set[:4]], validate=True, partition_format='**/{class_label}/*.mp4')
dataset_train.register(workspace, 'train_video_clips', create_new_version=True)
Run Code Online (Sandbox Code Playgroud)

即使只有 4 个路径,数据集创建似乎也会无限期挂起,这怎么可能?我在文档中看到提供一个列表Tuple[datastore, path]是完全可以的。你知道为什么吗?

谢谢

And*_*son 0

我很想知道如果您在同一个笔记本/脚本中运行数据集创建代码两次会发生什么。第二次会更快吗?我问这个问题是因为这可能是 .NET core 运行时启动的问题(这种情况只会在第一次运行代码时发生)

编辑 2020 年 9 月 16 日

虽然在没有数据移动时调用 .NET core 似乎没有意义,但怀疑它是validate=True参数中需要检查所有数据的部分(这在计算上可能会很昂贵)。我有兴趣看看如果该参数是会发生什么False