Implementación de modelos de Hugging Face Hub en Azure Machine Learning puntos de conexión en línea para la inferencia en tiempo real

Microsoft asociado con Hugging Face para traer modelos de código abierto de Hugging Face Hub a Azure Machine Learning. Hugging Face es el creador de Transformers, una biblioteca muy popular para crear modelos de lenguaje grandes. El centro de modelos de Hugging Face tiene miles de modelos de código abierto. Mediante la integración con Azure Machine Learning, puede implementar modelos de código abierto de su elección para proteger y escalar la infraestructura de inferencia en Azure. Puede buscar desde miles de modelos de transformadores en el catálogo de modelos de Azure Machine Learning e implementar modelos en un punto de conexión en línea administrado con facilidad a través del asistente guiado. Al implementar el punto de conexión en línea administrado, proporciona una API REST segura para puntuar el modelo en tiempo real.

Note

Los modelos de Hugging Face están sujetos a los términos de licencia de terceros disponibles en la página de detalles del modelo de Hugging Face. Es su responsabilidad cumplir los términos de licencia del modelo.

Ventajas de usar puntos de conexión en línea para la inferencia en tiempo real

Los puntos de conexión en línea administrados de Azure Machine Learning le ayudan a implementar modelos en máquinas eficaces de CPU y GPU en Azure de forma inmediata. Los puntos de conexión en línea administrados se encargan de atender, escalar, proteger y supervisar los modelos, por lo que no es necesario configurar y administrar la infraestructura subyacente. Las máquinas virtuales se aprovisionan automáticamente al implementar modelos. Puede tener varias implementaciones y dividir el tráfico o reflejar el tráfico en esas implementaciones. El tráfico reflejado le ayuda a probar nuevas versiones de modelos en el tráfico de producción sin liberarlos en entornos de producción. La división del tráfico permite aumentar gradualmente el tráfico de producción a las nuevas versiones del modelo mientras observa el rendimiento. El Escalado automático permite aumentar o reducir dinámicamente los recursos en función de las cargas de trabajo. Puede configurar el escalado en función de las métricas de uso, una programación específica o una combinación de ambos. Un ejemplo de escalado basado en métricas de uso es agregar nodos si el uso de CPU supera el 70 %. Un ejemplo de escalado basado en programación es agregar nodos en función de las horas pico.

Implementación de modelos de Face Hub en hugging mediante Studio

Para buscar un modelo que se va a implementar, abra el catálogo de modelos en Estudio de Azure Machine Learning. Seleccione Todos los filtros y, a continuación, seleccione HuggingFace en la sección Filtrar por colecciones . Seleccione el icono del modelo para abrir la página del modelo.

Implementación del modelo

Elija la opción de implementación en tiempo real para abrir el cuadro de diálogo de implementación rápida. Especifique las opciones siguientes:

  • Seleccione la plantilla para GPU o CPU. Los tipos de instancia de CPU son adecuados para las pruebas y los tipos de instancia de GPU ofrecen un mejor rendimiento en producción. Los modelos grandes no caben en un tipo de instancia de CPU.
  • Seleccione el tipo de instancia. Esta lista de instancias se filtra para mostrar solo las que pueden implementar el modelo sin quedarse sin memoria.
  • Seleccione el número de instancias. Una instancia es suficiente para las pruebas, pero tenga en cuenta dos o más instancias de producción.
  • Opcionalmente, especifique un punto de conexión y un nombre de implementación.
  • Seleccione Implementar. A continuación, se le dirigirá a la página del punto de conexión, que puede tardar unos segundos. La implementación tarda varios minutos en completarse en función del tamaño del modelo y el tipo de instancia.

Nota: Si desea implementar en un punto de conexión existente, seleccione More options en el cuadro de diálogo de implementación rápida y use el Asistente para implementación completa.

Modelos controlados

Los modelos cerrados son modelos que requieren aprobación del autor del modelo antes de usarlo. Para usar estos modelos:

  1. Tener un token de lectura o de detalle de la cara de hugging.
  2. Solicitar acceso a través de la página del modelo en Hugging Face.
  3. Cree una conexión de clave personalizada denominada HuggingFaceTokenConnection con la clave HF_TOKEN y el valor es el token de Hugging Face marcado como un secreto.
  4. Cree un punto de conexión con establecido en enforce_access_to_default_secret_storesenabled.
  5. Implemente el modelo mediante el punto de conexión recién creado.

Prueba del modelo implementado

Cuando finalice la implementación, puede encontrar el punto de conexión REST del modelo en la página puntos de conexión . Use este punto de conexión para puntuar el modelo. Encontrará opciones para agregar más implementaciones, administrar el tráfico y escalar el centro de puntos de conexión. Use la pestaña Prueba de la página del punto de conexión para probar el modelo con entradas de ejemplo. Las entradas de ejemplo están disponibles en la página del modelo. Puede encontrar el formato de entrada, los parámetros y las entradas de ejemplo en la documentación de la API de inferencia de Hugging Face Hub.

Implementación de modelos de concentrador huggingFace mediante el SDK de Python

Configure el SDK de Python.

Busque el modelo que se va a implementar

Examine el catálogo de modelos en Estudio de Azure Machine Learning y busque el modelo que desea implementar. Copie el nombre del modelo que quiere implementar. Importe las bibliotecas necesarias. Los modelos que se muestran en el catálogo se enumeran en el registro de HuggingFace. Cree model_id con el nombre del modelo que copió del catálogo de modelos y del registro de HuggingFace. El modelo bert-base-uncased se implementa con la versión más reciente de este ejemplo.

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
)
from azure.identity import DefaultAzureCredential

ml_client = MLClient(
    credential=DefaultAzureCredential(),
    subscription_id="<your-subscription-id>",
    resource_group_name="<your-resource-group>",
    workspace_name="<your-workspace-name>"
)


registry_name = "HuggingFace"
model_name = "bert-base-uncased"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/labels/latest"

Implementación del modelo

Cree un punto de conexión en línea. A continuación, cree la implementación. Por último, establezca todo el tráfico para usar esta implementación. Para encontrar la CPU o GPU instance_type óptima para un modelo, abra el cuadro de diálogo de implementación rápida desde la página del modelo en el catálogo de modelos. Asegúrese de usar un instance_type para el que tiene cuota.

import time
endpoint_name="hf-ep-" + str(int(time.time())) # endpoint name must be unique per Azure region, hence appending timestamp 
ml_client.begin_create_or_update(ManagedOnlineEndpoint(name=endpoint_name) ).wait()
ml_client.online_deployments.begin_create_or_update(ManagedOnlineDeployment(
    name="demo",
    endpoint_name=endpoint_name,
    model=model_id,
    instance_type="Standard_DS2_v2",
    instance_count=1,
)).wait()
endpoint = ml_client.online_endpoints.get(endpoint_name)
endpoint.traffic = {"demo": 100}
ml_client.begin_create_or_update(endpoint).result()

Prueba del modelo implementado

Cree un archivo con entradas que pueda enviar al punto de conexión en línea para la puntuación. El ejemplo de código de esta sección permite una entrada para el fill-mask tipo desde que implementó el bert-base-uncased modelo. Puede encontrar el formato de entrada, los parámetros y las entradas de ejemplo en la documentación de la API de inferencia de Hugging Face Hub.

import json
scoring_file = "./sample_score.json"
with open(scoring_file, "w") as outfile:
    outfile.write('{"inputs": ["Paris is the [MASK] of France.", "The goal of life is [MASK]."]}')   
response = ml_client.online_endpoints.invoke(
    endpoint_name=endpoint_name,
    deployment_name="demo",
    request_file=scoring_file,
)
response_json = json.loads(response)
print(json.dumps(response_json, indent=2))

Implementación de modelos del centro de HuggingFace mediante la CLI

Configure la CLI.

Busque el modelo que se va a implementar

Examine el catálogo de modelos en Estudio de Azure Machine Learning y busque el modelo que desea implementar. Copie el nombre del modelo que quiere implementar. Los modelos que se muestran en el catálogo se enumeran en el registro de HuggingFace. El modelo bert-base-uncased se implementa con la versión más reciente de este ejemplo.

Implementación del modelo

Necesita los model valores y instance_type para implementar el modelo. Para encontrar la CPU o GPU instance_type óptima para un modelo, abra el cuadro de diálogo de implementación rápida desde la página del modelo en el catálogo de modelos. Asegúrese de usar un instance_type para el que tiene cuota.

Los modelos que se muestran en el catálogo se enumeran en el registro de HuggingFace. El modelo bert-base-uncased se implementa con la versión más reciente de este ejemplo. El ID del activo completamente calificado model basado en el nombre del modelo y el registro es azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest. Cree el deploy.yml archivo usado para el az ml online-deployment create comando insertado.

Cree un punto de conexión en línea. A continuación, cree la implementación.

# create endpoint
endpoint_name="hf-ep-"$(date +%s)
model_name="bert-base-uncased"
az ml online-endpoint create --name $endpoint_name 

# create deployment file. 
cat <<EOF > ./deploy.yml
name: demo
model: azureml://registries/HuggingFace/models/$model_name/labels/latest
endpoint_name: $endpoint_name
instance_type: Standard_DS3_v2
instance_count: 1
EOF
az ml online-deployment create --file ./deploy.yml --workspace-name $workspace_name --resource-group $resource_group_name

Prueba del modelo implementado

Cree un archivo con entradas que pueda enviar al punto de conexión en línea para la puntuación. Hugging Face proporciona una entrada de ejemplo de código para el fill-mask tipo del modelo implementado bert-base-uncased . Puede encontrar el formato de entrada, los parámetros y las entradas de ejemplo en la documentación de la API de inferencia de Hugging Face Hub.

scoring_file="./sample_score.json"
cat <<EOF > $scoring_file
{
  "inputs": [
    "Paris is the [MASK] of France.",
    "The goal of life is [MASK]."
  ]
}
EOF
az ml online-endpoint invoke --name $endpoint_name --request-file $scoring_file

Código de ejemplo de modelo para Hugging Face

Siga este vínculo para buscar código de ejemplo de modelo para Hugging Face para varios escenarios, como la clasificación de tokens, la traducción, la respuesta a preguntas y la clasificación de captura cero.

Solución de problemas: Errores de implementación y modelos no admitidos

El centro huggingFace tiene miles de modelos con cientos de modelos que se actualizan cada día. Solo se prueban los modelos más populares de la colección y otros pueden producir uno de los errores siguientes.

Modelos controlados

Los modelos cerrados requieren que los usuarios acepten compartir su información de contacto y acepten los términos y condiciones de los propietarios del modelo para acceder al modelo. Si intenta implementar estos modelos sin seguir correctamente los pasos anteriores, se produce un error con .KeyError

Modelos que necesitan ejecutar código remoto

Normalmente, los modelos usan código del SDK de transformadores, pero algunos modelos ejecutan código desde el repositorio de modelos. Para dichos modelos se debe establecer el parámetro trust_remote_code en True. Siga este vínculo para obtener más información sobre el uso de código remoto. Por motivos de seguridad, estos modelos no se admiten. Se produce un error al intentar implementar estos modelos con el siguiente error: ValueError: Loading <model> requires you to execute the configuration file in that repo on your local machine. Make sure you read the code to avoid malicious use, then set the option trust_remote_code=True to remove this error.

Modelos con tokenizadores incorrectos

El tokenizador especificado incorrectamente o que falta en el paquete de modelo puede producir un error OSError: Can't load tokenizer for <model>.

Bibliotecas que faltan

Algunos modelos necesitan bibliotecas de Python adicionales. Puede instalar bibliotecas que faltan al ejecutar modelos localmente. Los modelos que necesitan bibliotecas especiales más allá de las bibliotecas de transformadores estándar producen ModuleNotFoundError errores o ImportError errores.

Memoria suficiente

Si ve el OutOfQuota: Container terminated due to insufficient memory error, intente usar con instance_type más memoria.

Preguntas más frecuentes

¿Dónde se almacenan los pesos del modelo?

Los modelos de Face en el Azure Machine Learning catálogo de modelos aparecen en el HuggingFace registro. Hugging Face crea y administra este registro y lo pone a disposición de Azure Machine Learning como un Registro de comunidad. Los pesos del modelo no se hospedan en Azure. Al implementar estos modelos, los puntos de conexión en línea del área de trabajo descargan los pesos directamente desde hugging Face Hub. El HuggingFace registro de Azure Machine Learning funciona como un catálogo para ayudarle a detectar e implementar modelos de Hugging Face Hub en Azure Machine Learning.

¿Qué modelos se admiten?

Azure admite modelos de Hugging Face que cumplen los siguientes criterios:

  • El modelo tiene las Transformersetiquetas , Diffuserso Sentence-Transformers en Hugging Face Hub.
  • El modelo tiene una tarea admitida , como chat-completion, image-to-texto embeddings.
  • Los pesos del modelo están en el formato Safetensors y el modelo no requiere trust_remote_code.

¿Cómo se implementan los modelos para la inferencia por lotes? Actualmente, no puede implementar estos modelos en puntos de conexión por lotes para la inferencia por lotes.

¿Puedo usar modelos del HuggingFace Registro como entrada para trabajos para que pueda ajustar estos modelos mediante el SDK de transformadores? Dado que los pesos del modelo no se almacenan en el HuggingFace Registro, no se puede acceder a los pesos del modelo mediante el uso de estos modelos como entradas para los trabajos.

¿Cómo obtengo soporte técnico si se produce un error en las implementaciones o la inferencia no funciona según lo previsto?HuggingFace es un registro de la comunidad y Microsoft soporte técnico no lo cubre. Revise los registros de implementación para averiguar si el problema está relacionado con Azure Machine Learning plataforma o específico de los transformadores de Hugging Face. Póngase en contacto con el soporte técnico de Microsoft para cualquier problema de plataforma, como no poder crear un punto de conexión en línea o la autenticación en la API REST del punto de conexión no funciona. En el caso de los problemas específicos de los transformadores, cree un problema en GitHub, use el foro huggingFace o use la compatibilidad con HuggingFace.

¿Qué es un registro de la comunidad? Los asociados de Azure Machine Learning de confianza crean registros de comunidad como registros Azure Machine Learning. Todos los Azure Machine Learning los usuarios pueden acceder a ellos.

¿Dónde pueden los usuarios enviar preguntas y preocupaciones relacionadas con Hugging Face en Azure Machine Learning? Envíe sus preguntas en el foro de discusión de Azure Machine Learning o abra un problema de GitHub.

Disponibilidad regional

La colección Hugging Face únicamente está disponible actualmente en todas las regiones de la nube pública.