无法使用私有轮构建本地 AMLS 环境

Unable to build local AMLS environment with private wheel

我正在尝试使用 AzureML Python SDK (v1.0.85) 编写一个小程序来在 AMLS 中注册一个环境,并在进行实验时使用该定义构建本地 Conda 环境 运行(对于预训练模型)。该代码适用于从 Conda/public PyPI 加载所有依赖项的简单场景,但是当我引入私有依赖项(例如 utils 库)时,我收到一个 InternalServerError 消息 "Error getting recipe specifications".

我用来注册环境的代码是(在对 Azure 进行身份验证并连接到我们的工作区之后):

environment_name = config['environment']['name']
py_version = "3.7"
conda_packages = ["pip"]
pip_packages = ["azureml-defaults"]
private_packages = ["./env-wheels/utils-0.0.3-py3-none-any.whl"]

print(f"Creating environment with name {environment_name}")
environment = Environment(name=environment_name)
conda_deps = CondaDependencies()

print(f"Adding Python version: {py_version}")
conda_deps.set_python_version(py_version)

for conda_pkg in conda_packages:
    print(f"Adding Conda denpendency: {conda_pkg}")
    conda_deps.add_conda_package(conda_pkg)

for pip_pkg in pip_packages:
    print(f"Adding Pip dependency: {pip_pkg}")
    conda_deps.add_pip_package(pip_pkg)

for private_pkg in private_packages:
    print(f"Uploading private wheel from {private_pkg}")
    private_pkg_url = Environment.add_private_pip_wheel(workspace=ws, file_path=Path(private_pkg).absolute(), exist_ok=True)
    print(f"Adding private Pip dependency: {private_pkg_url}")
    conda_deps.add_pip_package(private_pkg_url)

environment.python.conda_dependencies = conda_deps
environment.register(workspace=ws)

我用来创建本地 Conda 环境的代码是:

amls_environment = Environment.get(ws, name=environment_name, version=environment_version)

print(f"Building environment...")
amls_environment.build_local(workspace=ws)

调用 build_local(...) 时返回的确切错误消息是:

Traceback (most recent call last):
  File "C:\Anaconda\envs\AMLSExperiment\lib\site-packages\azureml\core\environment.py", line 814, in build_local
    raise error
  File "C:\Anaconda\envs\AMLSExperiment\lib\site-packages\azureml\core\environment.py", line 807, in build_local
    recipe = environment_client._get_recipe_for_build(name=self.name, version=self.version, **payload)
  File "C:\Anaconda\envs\AMLSExperiment\lib\site-packages\azureml\_restclient\environment_client.py", line 171, in _get_recipe_for_build
    raise Exception(message)
Exception: Error getting recipe specifications. Code: 500
: {
  "error": {
    "code": "ServiceError",
    "message": "InternalServerError",
    "detailsUri": null,
    "target": null,
    "details": [],
    "innerError": null,
    "debugInfo": null
  },
  "correlation": {
    "operation": "15043e1469e85a4c96a3c18c45a2af67",
    "request": "19231be75a2b8192"
  },
  "environment": "westeurope",
  "location": "westeurope",
  "time": "2020-02-28T09:38:47.8900715+00:00"
}

Process finished with exit code 1

有没有人以前见过这个错误或者能够提供一些关于问题可能的指导?

假设您希望在远程计算的脚本中 运行,那么我的建议是传递您刚刚 "got" 的环境。到 RunConfiguration,然后将其传递到 ScriptRunConfigEstimatorPythonScriptStep

from azureml.core import ScriptRunConfig
from azureml.core.runconfig import DEFAULT_CPU_IMAGE

src = ScriptRunConfig(source_directory=project_folder, script='train.py')

# Set compute target to the one created in previous step
src.run_config.target = cpu_cluster.name

# Set environment
amls_environment = Environment.get(ws, name=environment_name, version=environment_version)
src.run_config.environment = amls_environment

run = experiment.submit(config=src)
run

查看笔记本的其余部分 here

如果您正在寻找本地 运行 this notebook 可能会有所帮助。

问题是没有防火墙阻止 AMLS 和存储容器之间所需的请求(我想得到环境定义/专用轮)。

我们通过使用适当的 ALLOW 规则更新防火墙来解决此问题,以便 AMLS 服务联系并读取附加的存储容器。