Solución de problemas con una implementación de modelo local
Pruebe una implementación de modelo local como primer paso para la solución de problemas de implementación en Azure Container Instances (ACI) o Azure Kubernetes Service (AKS). El uso de un servicio web local facilita la detección y corrección de errores comunes de implementación del servicio web de Docker para Azure Machine Learning.
Prerrequisitos
- Una suscripción de Azure. Pruebe la versión gratuita o de pago de Azure Machine Learning.
- Opción A (recomendada): depurar localmente en Instancia de proceso de Azure Machine Learning.
- Un área de trabajo de Azure Machine Learning con una instancia de proceso en ejecución.
- Opción B: depuración local en el proceso.
- El SDK de Azure Machine Learning.
- LaCLI de Azure.
- La extensión de la CLI para Azure Machine Learning.
- Disponga de una instalación de Docker en funcionamiento en el sistema local.
- Para comprobar la instalación de Docker, use el comando
docker run hello-world
desde un símbolo del sistema o terminal. Para obtener información sobre la instalación de Docker o la solución de problemas de Docker, consulte la Documentación de Docker.
- Opción C: habilitar la depuración local con el servidor HTTP de inferencia de Azure Machine Learning.
- El servidor HTTP de inferencia de Azure Machine Learning es un paquete de Python que permite validar fácilmente el script de entrada (
score.py
) en un entorno de desarrollo local. Si hay un problema con el script de puntuación, el servidor devolverá un error. También devolverá la ubicación en la que se produjo el error. - El servidor también se puede usar al crear puertas de validación en una canalización de integración e implementación continuas. Puede, por ejemplo, iniciar el servidor con el script candidato y ejecutar el conjunto de pruebas en el punto de conexión local.
- El servidor HTTP de inferencia de Azure Machine Learning es un paquete de Python que permite validar fácilmente el script de entrada (
Servidor HTTP de inferencia de Azure Machine Learning
El servidor de inferencia local permite depurar rápidamente el script de entrada (score.py
). En caso de que el script de puntuación subyacente tenga un error, el servidor no podrá inicializar ni atender el modelo. Se producirá una excepción con la ubicación donde se produjeron los problemas. Más información sobre el servidor HTTP de inferencia de Azure Machine Learning
Instale el paquete
azureml-inference-server-http
desde la fuente pypi:python -m pip install azureml-inference-server-http
Inicie el servidor y establezca
score.py
como script de entrada:azmlinfsrv --entry_script score.py
Envíe una solicitud de puntuación al servidor mediante
curl
:curl -p 127.0.0.1:5001/score
Nota:
Obtenga información sobre las preguntas frecuentes sobre el servidor HTTP de inferencia de Azure Machine Learning.
Depuración local
Puede encontrar un ejemplo de cuaderno de implementación local en el repositorio de MachineLearningNotebooks para explorar un ejemplo ejecutable.
Advertencia
No se admiten las implementaciones de servicios web locales en escenarios de producción.
Para implementar de forma local, modifique el código para usar LocalWebservice.deploy_configuration()
con el fin de crear una configuración de implementación. Luego use Model.deploy()
para implementar el servicio. En el ejemplo siguiente se implementa un modelo (incluido en la variable de modelo) como un servicio web local:
SE APLICA A: Azure ML del SDK de Python v1
from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import LocalWebservice
# Create inference configuration based on the environment definition and the entry script
myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
# Create a local deployment, using port 8890 for the web service endpoint
deployment_config = LocalWebservice.deploy_configuration(port=8890)
# Deploy the service
service = Model.deploy(
ws, "mymodel", [model], inference_config, deployment_config)
# Wait for the deployment to complete
service.wait_for_deployment(True)
# Display the port that the web service is available on
print(service.port)
Si va a definir su propio YAML de especificación de Conda, muestre azureml-defaults con la versión >= 1.0.45 como dependencia de PIP. Este paquete es necesario para hospedar el modelo como servicio web.
En este punto, se puede trabajar con el servicio de forma habitual. En el código siguiente se muestra cómo enviar datos al servicio:
import json
test_sample = json.dumps({'data': [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
]})
test_sample = bytes(test_sample, encoding='utf8')
prediction = service.run(input_data=test_sample)
print(prediction)
Para obtener más información sobre cómo personalizar el entorno de Python, consulte el tema sobre la creación y administración de entornos de entrenamiento e implementación.
Actualizar el servicio
Durante las pruebas locales, es posible que deba actualizar el archivo score.py
para agregar un registro o intentar resolver los problemas que haya descubierto. Para recargar los cambios realizados en el archivo score.py
, use reload()
. Por ejemplo, el código siguiente recarga el script para el servicio y luego envía datos. Los datos se puntúan con el archivo score.py
actualizado:
Importante
El método reload
solo está disponible para las implementaciones locales. Para información sobre cómo actualizar una implementación en otro destino de proceso, consulte cómo actualizar el servicio web.
service.reload()
print(service.run(input_data=test_sample))
Nota
El script se recarga desde la ubicación que especifica el objeto InferenceConfig
que usa el servicio.
Para cambiar el modelo, las dependencias de Conda o la configuración de implementación, use update(). En el siguiente ejemplo se actualiza el modelo que usa el servicio:
service.update([different_model], inference_config, deployment_config)
Eliminación del servicio
Para eliminar el servicio, use delete().
Inspección del registro de Docker
Puede imprimir los mensajes detallados de registro del motor de Docker desde el objeto de servicio. Puede ver el registro para ACI, AKS y las implementaciones locales. En el ejemplo siguiente se muestra cómo imprimir los registros.
# if you already have the service object handy
print(service.get_logs())
# if you only know the name of the service (note there might be multiple services with the same name but different version number)
print(ws.webservices['mysvc'].get_logs())
Si ve que la línea Booting worker with pid: <pid>
se produce varias veces en los registros, significa que no hay suficiente memoria para iniciar el trabajo.
Puede solucionar el error aumentando el valor de memory_gb
en deployment_config
.
Pasos siguientes
Más información acerca de la implementación: