Comenzando con los Puntos de Extremo de Inferencia de Hugging Face

'Inicio de los Puntos de Extremo de Inferencia de Hugging Face'

Entrenar modelos de aprendizaje automático se ha vuelto bastante simple, especialmente con el aumento de modelos pre-entrenados y transfer learning. OK, a veces no es tan simple, pero al menos, entrenar modelos nunca romperá aplicaciones críticas y hará que los clientes estén descontentos con la calidad de su servicio. Sin embargo, implementar modelos… Sí, todos hemos estado ahí.

Implementar modelos en producción generalmente requiere superar una serie de obstáculos. Empaquetar su modelo en un contenedor, aprovisionar la infraestructura, crear su API de predicción, asegurarla, escalarla, monitorearla y más. Seamos realistas: construir toda esta infraestructura consume un tiempo valioso que podría destinarse a hacer trabajo de aprendizaje automático real. Desafortunadamente, también puede salir terriblemente mal.

Nos esforzamos por solucionar este problema con el recién lanzado Hugging Face Inference Endpoints . En el espíritu de hacer que el aprendizaje automático sea cada vez más simple sin comprometer la calidad de vanguardia, hemos construido un servicio que le permite implementar modelos de aprendizaje automático directamente desde el centro de Hugging Face a la infraestructura administrada en su nube favorita con solo unos pocos clics. Simple, seguro y escalable: puedes tenerlo todo.

¡Permítanme mostrarles cómo funciona esto!

Implementando un modelo en Inference Endpoints

Al observar la lista de tareas que admiten los Inference Endpoints, decidí implementar un modelo de clasificación de imágenes Swin que recientemente ajusté con AutoTrain en el conjunto de datos food101. Si está interesado en cómo construí este modelo, este video le mostrará todo el proceso.

Comenzando desde mi página de modelo , hago clic en Implementar y selecciono Inference Endpoints .

Esto me lleva directamente a la página de creación de endpoints.

Decido implementar la última revisión de mi modelo en una instancia de GPU única, alojada en AWS en la región eu-west-1. Opcionalmente, podría configurar el escalado automático e incluso implementar el modelo en un contenedor personalizado .

A continuación, debo decidir quién puede acceder a mi endpoint. De menos seguro a más seguro, las tres opciones son:

  • Público: el endpoint se ejecuta en una subred pública de Hugging Face, y cualquier persona en Internet puede acceder a él sin autenticación. Piense dos veces antes de seleccionar esto.
  • Protegido: el endpoint se ejecuta en una subred pública de Hugging Face, y cualquier persona en Internet con el token de organización correspondiente puede acceder a él.
  • Privado: el endpoint se ejecuta en una subred privada de Hugging Face. No es accesible en Internet. Solo está disponible en su cuenta de AWS a través de un Endpoint de VPC creado con AWS PrivateLink . Puede controlar qué VPC y subnet(s) en su cuenta de AWS tienen acceso al endpoint.

Comencemos implementando un endpoint protegido y luego implementaremos uno privado.

Implementando un Endpoint de Inferencia Protegido

Simplemente selecciono Protegido y hago clic en Crear Endpoint .

Después de unos minutos, el endpoint está en funcionamiento y su URL es visible.

Puedo probarlo de inmediato cargando una imagen en el widget de inferencia.

Por supuesto, también puedo invocar el endpoint directamente con unas pocas líneas de código Python, y me autentico con mi token de API de Hugging Face (encontrarás el tuyo en la configuración de tu cuenta en el hub).

import requests, json

API_URL = "https://oncm9ojdmjwesag2.eu-west-1.aws.endpoints.huggingface.cloud"

headers = {
  "Authorization": "Bearer MI_TOKEN_DE_API",
  "Content-Type": "image/jpg"
}

def query(filename):
    with open(filename, "rb") as f:
        data = f.read()
    response = requests.request("POST", API_URL, headers=headers, data=data)
    return json.loads(response.content.decode("utf-8"))

output = query("food.jpg")

Como era de esperar, el resultado predicho es idéntico.

[{'score': 0.9998438358306885,    'label': 'hummus'},
 {'score': 6.674625183222815e-05, 'label': 'falafel'}, 
 {'score': 6.490697160188574e-06, 'label': 'escargots'}, 
 {'score': 5.776922080258373e-06, 'label': 'deviled_eggs'}, 
 {'score': 5.492902801051969e-06, 'label': 'shrimp_and_grits'}]

Al moverme a la pestaña de Analytics, puedo ver las métricas del punto final. Algunas de mis solicitudes fallaron porque omití deliberadamente el encabezado Content-Type.

Para obtener más detalles, puedo verificar los registros completos en la pestaña de Logs.

5c7fbb4485cd8w7 2022-10-10T08:19:04.915Z 2022-10-10 08:19:04,915 | INFO | POST / | Duración: 142,76 ms
5c7fbb4485cd8w7 2022-10-10T08:19:05.860Z 2022-10-10 08:19:05,860 | INFO | POST / | Duración: 148,06 ms
5c7fbb4485cd8w7 2022-10-10T09:21:39.251Z 2022-10-10 09:21:39,250 | ERROR | Tipo de contenido "None" no soportado. Los tipos de contenido admitidos son: application/json, text/csv, text/plain, image/png, image/jpeg, image/jpg, image/tiff, image/bmp, image/gif, image/webp, image/x-image, audio/x-flac, audio/flac, audio/mpeg, audio/wave, audio/wav, audio/x-wav, audio/ogg, audio/x-audio, audio/webm, audio/webm;codecs=opus
5c7fbb4485cd8w7 2022-10-10T09:21:44.114Z 2022-10-10 09:21:44,114 | ERROR | Tipo de contenido "None" no soportado. Los tipos de contenido admitidos son: application/json, text/csv, text/plain, image/png, image/jpeg, image/jpg, image/tiff, image/bmp, image/gif, image/webp, image/x-image, audio/x-flac, audio/flac, audio/mpeg, audio/wave, audio/wav, audio/x-wav, audio/ogg, audio/x-audio, audio/webm, audio/webm;codecs=opus

Ahora, aumentemos nuestro nivel de seguridad y despleguemos un punto final privado.

Desplegando un Punto Final de Inferencia Privado

Repitiendo los pasos anteriores, selecciono Privado esta vez.

Esto abre una nueva ventana que me pide el identificador de la cuenta de AWS en la cual el punto final será visible. Ingreso el ID correspondiente y hago clic en Crear Punto Final.

¿No estás seguro acerca del ID de tu cuenta de AWS? Aquí tienes un comando de una sola línea para la CLI de AWS: aws sts get-caller-identity --query Account --output text

Después de unos minutos, la interfaz de usuario de Inference Endpoints muestra el nombre del servicio VPC. El mío es com.amazonaws.vpce.eu-west-1.vpce-svc-07a49a19a427abad7.

A continuación, abro la consola de AWS y voy a la página de Puntos de Extremo de VPC. Luego, hago clic en Crear punto final para crear un punto final de VPC, lo cual permitirá que mi cuenta de AWS acceda a mi Punto Final de Inferencia a través de AWS PrivateLink.

En resumen, necesito completar el nombre del servicio VPC mostrado arriba, seleccionar la(s) VPC y subred(es) permitidas para acceder al punto final, y adjuntar un Grupo de Seguridad apropiado. Nada complicado: simplemente sigo los pasos enumerados en la documentación de Inference Endpoints.

Una vez que haya creado el punto final de VPC, mi configuración se verá así.

Volviendo a la interfaz de usuario de los puntos finales de inferencia, el punto final privado se ejecuta uno o dos minutos más tarde. ¡Vamos a probarlo!

Lanzando una instancia de Amazon EC2 en una de las subredes permitidas para acceder al punto final de la VPC, uso la URL del punto final de inferencia para predecir mi imagen de prueba.

curl https://oncm9ojdmjwesag2.eu-west-1.aws.endpoints.huggingface.cloud \
-X POST --data-binary '@food.jpg' \
-H "Authorization: Bearer MI_TOKEN_DE_API" \
-H "Content-Type: image/jpeg"

[{"score":0.9998466968536377,     "label":"hummus"},
 {"score":0.00006414744711946696, "label":"falafel"},
 {"score":6.4065129663504194e-6,  "label":"escargots"},
 {"score":5.819705165777123e-6,   "label":"deviled_eggs"},
 {"score":5.532585873879725e-6,   "label":"shrimp_and_grits"}]

Esto es todo. Una vez que haya terminado de probar, elimino los puntos finales que he creado para evitar cargos no deseados. También elimino el punto final de VPC en la consola de AWS.

Los clientes de Hugging Face ya están utilizando los puntos finales de inferencia. Por ejemplo, Phamily, la plataforma de gestión en el hogar número 1 en cuidados crónicos y atención proactiva, nos dijo que los puntos finales de inferencia les están ayudando a simplificar y acelerar las implementaciones de Transformer compatibles con HIPAA.

¡Ahora te toca a ti!

Gracias a los puntos finales de inferencia, puedes implementar puntos finales escalables y seguros de calidad de producción en minutos, con solo unos pocos clics. ¿Por qué no lo pruebas?

Tenemos muchas ideas para mejorar aún más el servicio, y nos encantaría conocer tus comentarios en el foro de Hugging Face.

¡Gracias por leer y diviértete con los puntos finales de inferencia!