Я очень хорошо следил за документацией, как указано здесь.
Я настроил свою среду машинного обучения Azure следующим образом:
from azureml.core import Workspace
# Connect to the workspace
ws = Workspace.from_config()
from azureml.core import Environment
from azureml.core import ContainerRegistry
myenv = Environment(name = "myenv")
myenv.inferencing_stack_version = "latest" # This will install the inference specific apt packages.
# Docker
myenv.docker.enabled = True
myenv.docker.base_image_registry.address = "myazureregistry.azurecr.io"
myenv.docker.base_image_registry.username = "myusername"
myenv.docker.base_image_registry.password = "mypassword"
myenv.docker.base_image = "4fb3..."
myenv.docker.arguments = None
# Environment variable (I need python to look at folders
myenv.environment_variables = {"PYTHONPATH":"/root"}
# python
myenv.python.user_managed_dependencies = True
myenv.python.interpreter_path = "/opt/miniconda/envs/myenv/bin/python"
from azureml.core.conda_dependencies import CondaDependencies
conda_dep = CondaDependencies()
conda_dep.add_pip_package("azureml-defaults")
myenv.python.conda_dependencies=conda_dep
myenv.register(workspace=ws) # works!
У меня есть файл score.py, настроенный для вывода (не имеет отношения к проблеме, с которой я столкнулся) ...
Затем я настраиваю конфигурацию вывода
from azureml.core.model import InferenceConfig
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
Я настраиваю свой вычислительный кластер:
from azureml.core.compute import ComputeTarget, AksCompute
from azureml.exceptions import ComputeTargetException
# Choose a name for your cluster
aks_name = "theclustername"
# Check to see if the cluster already exists
try:
aks_target = ComputeTarget(workspace=ws, name=aks_name)
print('Found existing compute target')
except ComputeTargetException:
print('Creating a new compute target...')
prov_config = AksCompute.provisioning_configuration(vm_size="Standard_NC6_Promo")
aks_target = ComputeTarget.create(workspace=ws, name=aks_name, provisioning_configuration=prov_config)
aks_target.wait_for_completion(show_output=True)
from azureml.core.webservice import AksWebservice
# Example
gpu_aks_config = AksWebservice.deploy_configuration(autoscale_enabled=False,
num_replicas=3,
cpu_cores=4,
memory_gb=10)
Все удается; затем я пытаюсь развернуть модель для вывода:
from azureml.core.model import Model
model = Model(ws, name="thenameofmymodel")
# Name of the web service that is deployed
aks_service_name = 'tryingtodeply'
# Deploy the model
aks_service = Model.deploy(ws,
aks_service_name,
models=[model],
inference_config=inference_config,
deployment_config=gpu_aks_config,
deployment_target=aks_target,
overwrite=True)
aks_service.wait_for_deployment(show_output=True)
print(aks_service.state)
И он не говорит, что не может найти окружающую среду. В частности, моя версия среды - версия 11, но она продолжает попытки найти среду с номером версии, который на 1 выше (т. Е. версия 12), чем текущая среда. :
FailedERROR - Service deployment polling reached non-successful terminal state, current service state: Failed
Operation ID: 0f03a025-3407-4dc1-9922-a53cc27267d4
More information can be found here:
Error:
{
"code": "BadRequest",
"statusCode": 400,
"message": "The request is invalid",
"details": [
{
"code": "EnvironmentDetailsFetchFailedUserError",
"message": "Failed to fetch details for Environment with Name: myenv Version: 12."
}
]
}
Я попытался вручную отредактировать JSON среды в соответствии с версией, которую пытается получить azureml, но ничего не работает. Может ли кто-нибудь увидеть что-то не так с этим кодом?
Обновлять
Изменение имени среды (например, my_inference_env
) и передача его InferenceConfig
, похоже, на правильном пути. Однако теперь ошибка меняется на следующее
Running..........
Failed
ERROR - Service deployment polling reached non-successful terminal state, current service state: Failed
Operation ID: f0dfc13b-6fb6-494b-91a7-de42b9384692
More information can be found here: https://some_long_http_address_that_leads_to_nothing
Error:
{
"code": "DeploymentFailed",
"statusCode": 404,
"message": "Deployment not found"
}
Решение
Ответ Андерса, приведенный ниже, действительно правильный относительно использования сред Azure ML. Однако последняя ошибка, которую я получал, была связана с тем, что я устанавливал образ контейнера, используя значение дайджеста (a sha), а НЕ имя и тег изображения (например, imagename:tag
). Обратите внимание на строку кода в первом блоке:
myenv.docker.base_image = "4fb3..."
Я ссылаюсь на значение дайджеста, но его следует изменить на
myenv.docker.base_image = "imagename:tag"
Как только я внес это изменение, развертывание прошло успешно! :)
.py
или.ipynb
? Или куски разбиты на несколько файлов? - person Anders Swanson   schedule 18.08.2020