Невозможно построить локальную среду AMLS с частным колесом - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь написать небольшую программу, используя AzureML Python SDK (v1.0.85), чтобы зарегистрировать Среду в AMLS и использовать это определение для построения локальной среды Conda во время проведения экспериментов (для предварительно обученных модель). Код прекрасно работает для простого сценария ios, где все зависимости загружаются из Conda / publi c PyPI, но когда я ввожу частную зависимость (например, библиотеку утилит), я получаю InternalServerError с сообщением «Ошибка получения спецификаций рецепта» ".

Код, который я использую для регистрации среды, (после аутентификации в 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

Кто-нибудь видел эту ошибку раньше или мог предоставить какое-либо руководство вокруг чего может быть проблема?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Проблема заключалась в том, что брандмауэр блокировал требуемые запросы между AMLS и контейнером хранения (я предполагаю получить определения среды / частные колеса).

Мы решили эту проблему, обновив брандмауэр соответствующими правилами ALLOW для сервис AMLS для связи и чтения из прикрепленного контейнера для хранения.

0 голосов
/ 03 марта 2020

Предполагая, что вы хотите запустить сценарий на удаленном компьютере, я бы предложил передать среду, которую вы только что "получили". на 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

Проверьте остальную часть ноутбука здесь .

Если вы ищете локальный прогон , этот ноутбук может помочь.

...