Solucionar problemas de implantação de modelo

Concluído

Há muitos elementos para uma implantação de serviço, incluindo o modelo treinado, a configuração do ambiente de tempo de execução, o script de pontuação, a imagem do contêiner e o host do contêiner. A resolução de problemas de uma implementação falhada, ou de um erro ao consumir um serviço implementado pode ser complexa.

Verificar o estado do serviço

Como passo inicial de resolução de problemas, pode verificar o estado de um serviço ao analisar o respetivo estado:

from azureml.core.webservice import AksWebservice

# Get the deployed service
service = AksWebservice(name='classifier-service', workspace=ws)

# Check its state
print(service.state)

Nota

Para ver o estado de um serviço, tem de utilizar o tipo de serviço específico para computação (por exemplo, AksWebservice) e não um objeto WebService genérico.

Para um serviço operacional, o estado deve ser Bom estado de funcionamento.

Revisar logs de serviço

Se um serviço não apresentar bom estado de funcionamento, ou se estiver a obter erros ao utilizá-lo, pode rever os respetivos registos:

print(service.get_logs())

Os registos incluem informações detalhadas sobre o aprovisionamento do serviço e os pedidos que processou; e, muitas vezes, pode fornecer informações sobre a causa dos erros inesperados.

Implantar em um contêiner local

Os erros de implementação e runtime podem ser mais fáceis de diagnosticar ao implementar o serviço como um contentor numa instância local do Docker, do seguinte modo:

from azureml.core.webservice import LocalWebservice

deployment_config = LocalWebservice.deploy_configuration(port=8890)
service = Model.deploy(ws, 'test-svc', [model], inference_config, deployment_config)

Em seguida, pode testar o serviço implementado localmente através do SDK:

print(service.run(input_data = json_data))

Posteriormente, pode resolver problemas de runtime ao fazer alterações ao ficheiro de classificação que é referenciado na configuração da inferência, e ao recarregar o serviço sem voltar a implementá-lo (algo que só pode fazer com um serviço local):

service.reload()
print(service.run(input_data = json_data))