0

我正在尝试在 Azure ML 中创建一个数据集,其中数据源是 Blob 存储中的多个文件(例如图像)。你如何正确地做到这一点?

这是我按照 UI 中记录的方法得到的错误

当我在 UI 中创建数据集并选择 blob 存储和目录时,dirname在资源管理dirname/**器选项卡中找不到文件时出现错误ScriptExecution.StreamAccess.NotFound: The provided path is not valid or the files could not be accessed.当我尝试在使用选项卡中使用代码片段下载数据时,我得到错误:

from azureml.core import Workspace, Dataset

# set variables 

workspace = Workspace(subscription_id, resource_group, workspace_name)
dataset = Dataset.get_by_name(workspace, name='teststar')
dataset.download(target_path='.', overwrite=False)
Error Message: ScriptExecutionException was caused by StreamAccessException.
  StreamAccessException was caused by NotFoundException.
    Found no resources for the input provided: 'https://mystoragename.blob.core.windows.net/data/testdata/**'

当我只选择一个文件而不是dirname或者dirname/**然后一切正常。AzureML 是否真的支持由多个文件组成的数据集?

这是我的设置:

我有一个带有一个容器的数据存储datatestdata里面有一个包含testfile1.txtand的目录testfile2.txt

在 AzureML 中,我创建了一个数据存储testdatastore,并在其中选择了data我的数据存储中的容器。

然后在 Azure ML 中,我从数据存储区创建一个数据集,选择文件数据集和上面的数据存储区。然后我可以浏览文件,选择一个文件夹并选择应该包含子目录中的文件。testdata/**然后,这会创建如上所述不起作用的路径。

在 python 中创建数据集和数据存储时,我遇到了同样的问题:

import azureml.core
from azureml.core import Workspace, Datastore, Dataset

ws = Workspace.from_config()

datastore = Datastore(ws, "mydatastore")

datastore_paths = [(datastore, 'testdata')]
test_ds = Dataset.File.from_files(path=datastore_paths)
test_ds.register(ws, "testpython")
4

2 回答 2

1

数据集肯定支持多个文件,因此您的问题几乎肯定出在创建“mydatastore”数据存储时给予的权限上(我怀疑您已使用 SAS 令牌创建此数据存储)。为了能够访问除单个文件之外的任何内容,您需要list授予对数据存储的权限。如果您使用帐户密钥注册数据存储,这将不是问题,但可能是访问令牌的限制。第二部分是the provided path is not valid or the files could not be accessed指潜在的权限问题。您还可以通过从使用 ml 工作区为您配置的 defaultblobstore 创建数据集来验证 folder/** 语法是否有效。

于 2021-04-15T06:21:53.427 回答
0

我用这个脚本上传并注册了文件,一切都按预期工作。

from azureml.core import Datastore, Dataset, Workspace

import logging

logger = logging.getLogger(__name__)
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)

datastore_name = "mydatastore"
dataset_path_on_disk = "./data/images_greyscale"
dataset_path_in_datastore = "images_greyscale"

azure_dataset_name = "images_grayscale"
azure_dataset_description = "dataset transformed into the coco format and into grayscale images"


workspace = Workspace.from_config()
datastore = Datastore.get(workspace, datastore_name=datastore_name)

logger.info("Uploading data...")
datastore.upload(
    src_dir=dataset_path_on_disk, target_path=dataset_path_in_datastore, overwrite=False
)
logger.info("Uploading data done.")

logger.info("Registering dataset...")
datastore_path = [(datastore, dataset_path_in_datastore)]
dataset = Dataset.File.from_files(path=datastore_path)
dataset.register(
    workspace=workspace,
    name=azure_dataset_name,
    description=azure_dataset_description,
    create_new_version=True,
)
logger.info("Registering dataset done.")

于 2021-04-19T17:05:44.877 回答