Implantación de modelos con REST
Aprenda a usar Azure Machine Learning API REST para implementar modelos
La API REST utiliza verbos HTTP estándar para crear, recuperar, actualizar y eliminar recursos. La API REST funciona con cualquier lenguaje o herramienta que pueda hacer solicitudes HTTP. La estructura sencilla de REST hace que sea una buena opción en entornos de scripting y en la automatización de MLOps.
En este artículo, aprenderá a usar las nuevas API REST para:
- Crear recursos de aprendizaje automático
- Crear un trabajo de entrenamiento básico
- Crear un trabajo de barrido de ajuste de hiperparámetros
Prerequisites
- Una suscripción de Azure en la que tenga derechos administrativos Si no tiene este tipo de suscripción, pruebe la suscripción personal gratis o de pago.
- Un área de trabajo de Azure Machine Learning.
- Una entidad de servicio en el área de trabajo. Las solicitudes administrativas de REST usan la autenticación de entidad de servicio.
- Un token de autenticación de entidad de servicio. Para recuperar este token, siga los pasos que se describen en la sección Recuperación de un token de autenticación de entidad de servicio.
- La utilidad curl. El programa curl está disponible en el subsistema de Windows para Linux o en cualquier distribución de UNIX. En PowerShell, curl es un alias de Invoke-WebRequest y
curl -d "key=val" -X POST uri
se convierte enInvoke-WebRequest -Body "key=val" -Method POST -Uri uri
.
Establecimiento de un nombre de punto de conexión
Nota
Los nombres de los puntos de conexión deben ser únicos en el nivel de región de Azure. Por ejemplo, solo puede haber un punto de conexión con el nombre my-endpoint in westus2.
export ENDPOINT_NAME=endpt-rest-`echo $RANDOM`
Puntos de conexión en línea de Azure Machine Learning
Los puntos de conexión en línea permiten implementar el modelo sin tener que crear ni administrar la infraestructura subyacente ni clústeres de Kubernetes. En este artículo, creará un punto de conexión en línea y una implementación, y lo validará invocándolo. Pero primero tendrá que registrar los recursos necesarios para la implementación, incluidos el modelo, el código y el entorno.
Hay muchas formas de crear puntos de conexión en línea de Azure Machine Learning, incluida la CLI de Azure, y visualmente con Studio. En el ejemplo siguiente se muestra un punto de conexión en línea con la API REST.
Crear recursos de aprendizaje automático
En primer lugar, configure los recursos Azure Machine Learning para configurar el trabajo.
En las siguientes llamadas de API REST, usamos SUBSCRIPTION_ID
, RESOURCE_GROUP
, LOCATION
y WORKSPACE
como marcadores de posición. Reemplace los marcadores de posición por sus propios valores.
Las REST administrativa solicita un token de autenticación de entidad de servicio. Reemplace TOKEN
por su propio valor. Este token se puede recuperar con el siguiente comando:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
El proveedor de servicios utiliza el argumento api-version
para garantizar la compatibilidad. El argumento api-version
varía de un servicio a otro. Establezca la versión de la API como una variable para dar cabida a versiones futuras:
API_VERSION="2022-05-01"
Obtención de los detalles de una cuenta de almacenamiento
Para registrar el modelo y el código, primero deben cargarse en una cuenta de almacenamiento. Los detalles de la cuenta de almacenamiento están disponibles en el almacén de datos. En este ejemplo, se obtiene el almacén de datos predeterminado y la cuenta de Azure Storage del área de trabajo. Consulte el área de trabajo con una solicitud GET para obtener un archivo JSON con la información.
Puede usar la herramienta jq para analizar el resultado de JSON y obtener los valores necesarios. También puede usar Azure Portal para buscar la misma información:
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
Carga y registro del código
Ahora que tiene el almacén de datos, puede cargar el script de puntuación. Use Azure Storage CLI para cargar un blob en el contenedor predeterminado:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s endpoints/online/model-1/onlinescoring
Sugerencia
Para realizar dicha carga también se pueden usar otros métodos, como Azure Portal o el Explorador de Azure Storage.
Una vez que cargue el código, puede especificarlo con una solicitud PUT y hacer referencia al almacén de datos con datastoreId
:
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score\"
}
}"
Carga y registro del modelo
De forma similar al código, cargue los archivos del modelo:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s endpoints/online/model-1/model
Ahora, registre el modelo:
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"modelUri\":\"azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model\"
}
}"
Creación del entorno
La implementación debe ejecutarse en un entorno que tenga las dependencias necesarias. Cree el entorno con una solicitud PUT. Use una imagen de Docker desde Microsoft Container Registry. La imagen de Docker se puede configurar con Docker
y agregar dependencias de Conda con condaFile
.
En el siguiente fragmento de código, el contenido de un entorno de Conda (archivo YAML) se ha leído en una variable de entorno:
ENV_VERSION=$RANDOM
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\":{
\"condaFile\": \"$CONDA_FILE\",
\"image\": \"mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1\"
}
}"
Creación de un punto de conexión
Cree el punto de conexión en línea:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"identity\": {
\"type\": \"systemAssigned\"
},
\"properties\": {
\"authMode\": \"AMLToken\"
},
\"location\": \"$LOCATION\"
}")
Creación de una implementación
Cree una implementación debajo del punto de conexión:
response=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" \
--data-raw "{
\"location\": \"$LOCATION\",
\"sku\": {
\"capacity\": 1,
\"name\": \"Standard_DS2_v2\"
},
\"properties\": {
\"endpointComputeType\": \"Managed\",
\"scaleSettings\": {
\"scaleType\": \"Default\"
},
\"model\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1\",
\"codeConfiguration\": {
\"codeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/score-sklearn/versions/1\",
\"scoringScript\": \"score.py\"
},
\"environmentId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION\"
}
}")
Invocación del punto de conexión para puntuar los datos con el modelo
Se necesitan el identificador URI de la puntuación y el token de acceso para invocar el punto de conexión. En primer lugar, obtenga el identificador URI de la puntuación:
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN")
scoringUri=$(echo $response | jq -r '.properties.scoringUri')
Obtenga el token de acceso del punto de conexión:
response=$(curl -H "Content-Length: 0" --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/token?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN")
accessToken=$(echo $response | jq -r '.accessToken')
Ahora, utilice curl para invocar el punto de conexión:
curl --location --request POST $scoringUri \
--header "Authorization: Bearer $accessToken" \
--header "Content-Type: application/json" \
--data-raw @endpoints/online/model-1/sample-request.json
Comprobación de los registros
Compruebe los registros de implementación:
curl --location --request POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME/deployments/blue/getLogs?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{ \"tail\": 100 }"
Eliminación del punto de conexión
Si no va a usar la implementación, debe eliminarla con el siguiente comando (se elimina el punto de conexión y todas las implementaciones subyacentes):
curl --location --request DELETE "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/onlineEndpoints/$ENDPOINT_NAME?api-version=$API_VERSION" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $TOKEN" || true
Pasos siguientes
- Aprenda a implementar el modelo mediante la CLI de Azure.
- Aprenda a implementar el modelo mediante Studio.
- Aprenda sobre la Solución de problemas de implementación y puntuación de puntos de conexión en línea
- Aprenda sobre el Acceso a recursos de Azure con un punto de conexión en línea e identidad administrada
- Aprenda a supervisar los puntos de conexión en línea.
- Aprenda sobre la Implementación segura para puntos de conexión en línea.
- Visualización de los costos de un punto de conexión en línea administrado de Azure Machine Learning.
- Lista de SKU de puntos de conexión en línea administrados.
- Obtenga información sobre los límites de los puntos de conexión en línea.