问题描述
我的 BlobStorage 中有几千个视频文件,我将其设置为数据存储。 这个 blob 存储每晚都会收到新文件,我需要拆分数据并将每个拆分注册为 AzureML 数据集的新版本。
这就是我进行数据拆分的方式,只需获取 blob 路径并将其拆分即可。
http://example.com/public
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)
只是包含 blob 存储路径和类的 nx2 numpy 数组。
这是我尝试创建数据集的新版本时:
train_set,test_set,valid_set
即使只有 4 条路径,数据集创建似乎也无限期挂起,这怎么可能?
我在 doc 中看到提供 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)
的列表非常好。你知道为什么吗?
谢谢
解决方法
您的 Azure 机器学习工作区和 Azure 存储帐户是否位于不同的 Azure 区域?如果这是真的,则延迟可能是 validate=True
的一个促成因素。
如果您在同一个笔记本/脚本中运行数据集创建代码两次,我很想看看会发生什么。第二次会更快吗?我问是因为这可能是 .NET 核心运行时启动的问题(这只会在您第一次运行代码时发生)
,另一种可能是解析数据存储路径的方式缓慢。这是一个正在改进的领域。
作为实验,您可以尝试使用 url 而不是数据存储来创建数据集吗?让我们知道这是否会对性能产生影响,以及它是否可以在短期内解决您当前的问题。
像这样:
dataset_train = Dataset.File.from_files(path="https://bloburl/**/*.mp4?accesstoken",validate=True,partition_format='**/{class_label}/*.mp4')
dataset_train.register(workspace,'train_video_clips',create_new_version=True)