Solucionar problemas de implantação de modelo
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))