无法使用私有轮构建本地 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
,然后将其传递到 ScriptRunConfig
、Estimator
或 PythonScriptStep
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 服务联系并读取附加的存储容器。
我正在尝试使用 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
,然后将其传递到 ScriptRunConfig
、Estimator
或 PythonScriptStep
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 服务联系并读取附加的存储容器。