【问题标题】:Azureml : error "The SSL connection could not be established, see inner exception." while creating Tabular Dataset from Azure Blob Storage fileAzureml:从 Azure Blob 存储文件创建表格数据集时出现错误“无法建立 SSL 连接,请参阅内部异常。”
【发布时间】:2022-08-31 18:07:28
【问题描述】:

我在使用 Azure ML 时遇到了一个新错误,这可能是由于我昨天所做的 Ubuntu 升级到 22.04。

我有一个通过门户创建的工作区 azure ml,我可以使用 python SDK 访问它而没有任何问题

from azureml.core import Workspace
ws = Workspace.from_config("config/config.json")
ws.get_details()

输出

{'id': '/subscriptions/XXXXX/resourceGroups/gr_louis/providers/Microsoft.MachineLearningServices/workspaces/azml_lk',
 'name': 'azml_lk',
 'identity': {'principal_id': 'XXXXX',
  'tenant_id': 'XXXXX',
  'type': 'SystemAssigned'},
 'location': 'westeurope',
 'type': 'Microsoft.MachineLearningServices/workspaces',
 'tags': {},
 'sku': 'Basic',
 'workspaceid': 'XXXXX',
 'sdkTelemetryAppInsightsKey': 'XXXXX',
 'description': '',
 'friendlyName': 'azml_lk',
 'keyVault': '/subscriptions/XXXXX/resourceGroups/gr_louis/providers/Microsoft.Keyvault/vaults/azmllkXXXXX',
 'applicationInsights': '/subscriptions/XXXXX/resourceGroups/gr_louis/providers/Microsoft.insights/components/azmllkXXXXX',
 'storageAccount': '/subscriptions/XXXXX/resourceGroups/gr_louis/providers/Microsoft.Storage/storageAccounts/azmllkXXXXX',
 'hbiWorkspace': False,
 'provisioningState': 'Succeeded',
 'discoveryUrl': 'https://westeurope.api.azureml.ms/discovery',
 'notebookInfo': {'fqdn': 'ml-azmllk-westeurope-XXXXX.westeurope.notebooks.azure.net',
  'resource_id': 'XXXXX'},
 'v1LegacyMode': False}

然后,我使用此工作区ws 将文件(或目录)上传到 Azure Blob 存储,如下所示

from azureml.core import Dataset

ds = ws.get_default_datastore()

Dataset.File.upload_directory(
    src_dir="./data",
    target=ds,
    pattern="*dataset1.csv",
    overwrite=True,
    show_progress=True
)

再次工作正常并输出

Validating arguments.
Arguments validated.
Uploading file to /
Filtering files with pattern matching *dataset1.csv
Uploading an estimated of 1 files
Uploading ./data/dataset1.csv
Uploaded ./data/dataset1.csv, 1 files out of an estimated total of 1
Uploaded 1 files
Creating new dataset

{
  "source": [
    "('workspaceblobstore', '//')"
  ],
  "definition": [
    "GetDatastoreFiles"
  ]
}

我的文件确实已上传到 Blob 存储,我可以在 azure 门户或 azure ml studio (ml.azure.com) 上看到它。

当我尝试从上传的文件创建表格数据集时出现错误。以下代码不起作用:

from azureml.core import Dataset

data1 = Dataset.Tabular.from_delimited_files(
    path=[(ds, "dataset1.csv")]
)

它给了我错误:

ExecutionError: 
Error Code: ScriptExecution.DatastoreResolution.Unexpected
Failed Step: XXXXXX
Error Message: ScriptExecutionException was caused by DatastoreResolutionException.
  DatastoreResolutionException was caused by UnexpectedException.
    Unexpected failure making request to fetching info for Datastore 'workspaceblobstore' in subscription: 'XXXXXX', resource group: 'gr_louis', workspace: 'azml_lk'. Using base service url: https://westeurope.experiments.azureml.net. HResult: 0x80131501.
      The SSL connection could not be established, see inner exception.
| session_id=XXXXXX

经过一番研究,我认为这可能是由于 openssl 版本(现在是 1.1.1),但我不确定,我当然不知道如何修复它......有什么想法吗?

【问题讨论】:

  • 那么你在内部异常中看到了什么?
  • 事实是......我已经尝试过,但我无法弄清楚如何获得这个“内部异常”。我没有任何日志文件和尝试,除了总是返回相同的 ExecutionError

标签: ssl openssl azure-blob-storage azure-machine-learning-service azureml-python-sdk


【解决方案1】:

根据document,没有将文件数据集转换为表格数据集的直接程序。相反,我们可以创建一个工作区并创建两种存储方法(blobstorage 是默认存储,文件存储)。 SSL 将由工作区负责。 我们可以在工作区中创建一个数据存储并将其连接到 Blob 存储。

按照程序执行相同的操作。

创建工作区

如果我们愿意,我们可以创建一个数据集。

我们可以从数据存储的本地文件创建。

要选择数据存储,首先我们需要在数据存储中有一个文件

转到数据存储并单击创建数据集。注意名称是workspaceblobstorage(默认)。

填写详细信息,看到数据集类型是表格。

在路径中,我们将拥有本地文件路径,并且可以在选择或创建数据存储,它将默认存储显示为 blob。

上传后,我们可以看到这个部分的名称,它是一个数据存储和表格数据集。

在您创建的工作区中,检查公共访问是否为禁用或启用.如果禁用,则由于缺少 SSL 将不允许访问。看看下面的图片。启用后,使用与现在相同的程序。

【讨论】:

  • 感谢您的回复,虽然它不能完全回答我的问题...首先我需要使用 python SDK azureml,其次我确实有一个工作区,其中有一个关联的存储帐户,我可以在其上上传文件,但是尝试时会发生错误从分隔的上传文件生成表格数据集。但是,我尝试通过 azuml studio 门户创建数据集,它可以工作。这实际上让我更加困惑!
  • 在使用代码块之前,建议检查一下公共访问工作区和资源,在某些情况下默认情况下可能不会启用。我已经更新了显示的答案,我们可以在其中启用所有网络资源的公共访问。到现在为止使用的其余 python 过程将是相同的。
  • 我查了一下,公共访问已经启用...
  • 将现有代码 data1 = Dataset.Tabular.from_delimited_files(path=[(ds, "dataset1.csv")]) 替换为 data1= Dataset.Tabular.from_delimited_files(path=(datastore,'path_of_dataset')) 发生内部异常,因为在调用数据存储时使用列表而不是元组。
  • 好吧,我也试过了,但它没有改变任何东西......值得一提的是,这段代码在 ubuntu 22.04 升级之前完美运行,这就是为什么我认为它与 openssl 版本有关(ubuntu 22.04 中的 3.0.2 vs 1.1.1 在 ubuntu 20.04 中)
猜你喜欢
  • 1970-01-01
  • 2019-06-29
  • 2021-12-09
  • 1970-01-01
  • 2020-06-25
  • 2019-12-29
  • 1970-01-01
  • 2018-11-01
相关资源
最近更新 更多