Blog de Amazon Web Services (AWS)
Canalización de etiquetado de datos en tiempo real para flujos de trabajo de ML mediante Amazon SageMaker Ground Truth
Por Talia Chopra, Escritora Técnica y Priyanka Gopalakrishna, Ingeniera de Software
Los modelos de machine learning (ML) de alta calidad dependen de datos de capacitación, validación y prueba de alta calidad con etiquetas precisas. A medida que los modelos ML y deep learning se integran cada vez más en entornos de producción, es cada vez más importante que nunca contar con canalizaciones de etiquetado de datos personalizables y en tiempo real que puedan recibir y procesar continuamente datos sin etiquetar.
Por ejemplo, puede que desee crear una aplicación orientada al consumidor que recopila y envíe regularmente nuevos objetos de datos a una canalización de etiquetado de datos, que produce etiquetas y crea un dataset para la capacitación o el reciclaje de modelos. Esta tubería crea un bucle de retroalimentación positiva que conduce a modelos más precisos y sofisticados.
Los trabajos ofrecen infraestructura y recursos para crear un trabajo de etiquetado en ejecución continua que recibe nuevos objetos de datos a petición y los envía a los trabajadores humanos para que los etiqueten. Puede encadenar varios trabajos de etiquetado de streaming juntos para crear canalizaciones de etiquetado de datos más complejas y refinadas.
Utilice esta entrada de blog para aprender cómo configurar y personalizar los trabajos de etiquetado de streaming de Ground Truth.
Descripción general del tutorial
Además de discutir los beneficios de usar un trabajo de etiquetado de streaming, como la eliminación de retrasos, la aplicación de la idempotencia y la personalización de fuentes de datos de entrada, esta publicación incluye dos Jupyter notebooks Jupyter que puede utilizar para configurar trabajos de etiquetado de streaming. Puede utilizar estos portátiles o seguir las instrucciones de la consola de esta publicación para crear un trabajo de etiquetado por streaming utilizando un kit de desarrollo de software (SDK) de AWS (SDK) compatible y específico del idioma de su elección.
El primer notebook muestra cómo crear trabajos de etiquetado en streaming de Ground Truth. Este Jupyter Notebook admite tipos de tareas integradas y personalizadas, que le permiten crear rápidamente canalizaciones de etiquetado de datos para varios tipos de datos, como imagen, texto, vídeo, fotograma de vídeo, nube de puntos 3D y mucho más. Este tutorial muestra cómo utilizar Amazon Simple Notification Service (Amazon SNS) para enviar mensajes seguros y en tiempo real a un trabajo de etiquetado por streaming para alimentar nuevos objetos de datos a los trabajadores humanos para el etiquetado. Aprenderá a configurar notificaciones para recibir los datos de salida de esa tarea de etiquetado en tiempo real, tan pronto como los trabajadores terminen de etiquetar un objeto de datos.
Al crear un trabajo de etiquetado de transmisión, puede enrutar los datos de salida de ese trabajo a otro trabajo de etiquetado de transmisión para crear canalizaciones de etiquetado de datos más complejas y para la verificación y ajuste de etiquetas de datos. Esto se conoce como encadenamiento de trabajos de etiquetado. Puede usar el segundo notebook con esta publicación para aprender a encadenar dos trabajos de etiquetado de streaming juntos.
Puede ejecutar ambos en modo predeterminado, lo que requiere poca o ninguna entrada. El modo predeterminado crea trabajos de etiquetado de detección de objetos de imagen (cuadro delimitador) y muestra cómo enviar objetos de datos a estos trabajos de etiquetado. Si tiene sus propios objetos de datos que desea utilizar, puede desactivar el modo predeterminado.
Para empezar, complete los Requisitos previos e Inicie una instancia de Jupyter Notebook y configure las secciones del Jupyter Notebook de demostración en esta publicación para reunir los recursos necesarios para completar este tutorial y, opcionalmente, configurar los Jupyter notebooks Jupyter ground_truth_create_streaming_labeling_job.ipynb y ground_truth_create_chained_streaming_labeling_job.ipynb en una instancia de notebook de Amazon SageMaker.
El siguiente diagrama ilustra la arquitectura de la solución.
Ventajas de los trabajos de etiquetado por streaming
El primer Jupyter notebook muestra cómo crear trabajos de etiquetado en streaming de Ground Truth.
Canal de entrada en tiempo real
Puede alimentar objetos en tiempo real y continuamente a un trabajo de etiquetado. Amazon SNS le permite configurar temas para alimentar objetos en tiempo real a un trabajo de etiquetado en ejecución.
Flujos de trabajo de larga ejecución
Puede iniciar trabajos de etiquetado que pueden ejecutarse durante mucho tiempo si se alimentan activamente objetos. Los trabajos de streaming están diseñados para ser flujos de trabajo de larga duración que siguen ejecutándose hasta que decida detenerlos.
Amazon Ground Truth detendrá el trabajo si está inactivo durante mucho tiempo. Un trabajo se define como inactivo si Ground Truth no detecta ningún objeto que espera ser etiquetado en el sistema durante un cierto número de días. Por ejemplo, si Ground Truth no recibe nuevos objetos de datos desde el tema de entrada SNS y todos los objetos alimentados al sistema ya están etiquetados, se inicia un temporizador para el tiempo de inactividad. Si el temporizador de inactividad alcanza cierto número, Ground Truth detiene el trabajo de etiquetado.
En resumen, si los objetos fluyen activamente a través del sistema con una cadencia regular se puede lograr un flujo de trabajo de larga duración. Para obtener más información acerca de la configuración de temporizadores inactivos, vea Detener un trabajo de etiquetado de transmisión.
Eliminar retrasos
Con los trabajos de etiquetado por streaming, los objetos pueden fluir a través de su canalización de etiquetado de datos más rápido. Los trabajos de streaming funcionan de una manera de ventana deslizante , donde Ground Truth sigue enviando objetos para etiquetarlos siempre y cuando haya slots disponibles. Los slots se definen mediante el parámetro maxConcurrentTaskCount, que define el número máximo de objetos (slots) que pueden ser rellenados por objetos que se enviarán para su etiquetado. Cuando se alcanza MaxConcurrentTaskCount, puede ver el número de objetos de datos en cola en Amazon Simple Queue Services (Amazon SQS).
Por ejemplo, si MaxConcurrentTaskCount es 10 y se envían 25 objetos a través del tema SNS de entrada, Ground Truth envía un máximo de 10 objetos a los trabajadores a la vez y un máximo de 15 objetos restantes se encuentran en la cola de Amazon Simple Queue Service (Amazon SQS). Si un trabajador trabaja y envía 2 objetos de los 10 enviados, sólo se llenan 8 ranuras y 2 más se envían a los trabajadores de los 15 objetos restantes. De esta manera, los trabajadores tienen un flujo constante de objetos procedentes de sus entradas, hasta un máximo de 10 objetos. No hay retrasos como resultado del proceso de lotes de objetos. A medida que los trabajadores trabajan en objetos, los nuevos objetos se bombean constantemente y se puede lograr el etiquetado de datos con mayor velocidad.
Limitación de la tasa
Puede limitar y controlar cómo y cuándo se alimentan los datos a los trabajadores. Cuando alimenta objetos a su tema SNS de entrada, se recopilan en una cola SQS en su cuenta, denominada GroundTruth-<labeling-job-name>. Si se envían más objetos al trabajo de etiquetado que el MaxConcurrentTaskCount, permanecen en la cola SQS. De lo contrario, se envían a los trabajadores para ser etiquetados. Cualquier objeto de la cola SQS está disponible durante un máximo de 14 días.
Por ejemplo, si MaxConcurrentTaskCount es 1000y 2.500 objetos se envían a un trabajo de etiquetado de transmisión a través de un tema SNS de entrada, Ground Truth envía un máximo de 1.000 objetos a los trabajadores a la vez , inicialmente, 1.500 permanecen en la cola SQS. La velocidad de los trabajadores determina la rapidez con la que los 1.500 objetos de la cola se envían para el etiquetado. Si estos objetos permanecen en la cola durante más tiempo de lo esperado, esto sirve como indicador de que ha enviado más objetos de los que pueden trabajar los trabajadores en un período de tiempo determinado. Si los objetos de datos tardan más de lo esperado en etiquetarse, puede ajustar la entrada para alimentar objetos a Amazon SNS a un ritmo más lento. También puede cambiar el valor de MaxConcurrentTaskCount para que se ajuste al ritmo del trabajador.
Para supervisar la velocidad y la cantidad de objetos de datos que se introducen en la cola SQS asociada a un trabajo de etiquetado de transmisión, puede configurar alarmas para la cola con Amazon CloudWatch. Para obtener más información, consulte Métricas disponibles de CloudWatch para Amazon SQS. Por ejemplo, puede configurar una alarma en la métrica AproximateAgeOfoldestMessage para ver qué tan cerca está el objeto de datos más antiguo del límite de 14 días. Cuando se activa esta alarma, puede realizar las acciones apropiadas, como volver a enviar el objeto al tema SNS de entrada o notificar a los trabajadores que las tareas caducarán si no se completan dentro de un período de tiempo determinado.
Notificación de salida
Se agrega un nuevo canal SNS como canal de salida para su trabajo de etiquetado. Cuando un trabajador completa una tarea de trabajo de etiquetado desde un trabajo de etiquetado de transmisión de Ground Truth, Ground Truth utiliza el tópico de salida para publicar datos de salida en uno o más extremos que se especifique. Para recibir notificaciones cuando un trabajador finaliza una tarea de etiquetado, debe suscribir un endpoint al tópico de salida SNS. Por ejemplo, puede suscribir un correo electrónico, una función de AWS Lambda o una cola SQS al tópico de salida SNS utilizado para etiquetar trabajo, y cualquier objeto etiquetado a través de Ground Truth aparece en tiempo real después del etiquetado.
Además del tópico de salida SNS, también puede utilizar las actualizaciones frecuentes de archivos de salida de Amazon Simple Storage Service (Amazon S3) en la ruta de salida de Amazon S3. Todas las etiquetas se agregan a un archivo de manifiesto de salida en Amazon S3. Puede hacer referencia a este archivo si, por ejemplo, se perdieron las notificaciones de salida en tiempo real. Si el bucket de S3 está versionado, puede ver y acceder a diferentes versiones del archivo de manifiesto de salida.
Idempotencia
Puede utilizar un identificador único para distinguir los objetos que alimenta a un trabajo de etiquetado y realizar un seguimiento de ellos en la salida. Puede traer su propio identificador único, o aprovechar un identificador generado automáticamente Ground Truth si no proporciona uno.
Cuando envía un objeto de datos a su trabajo de etiquetado de transmisión mediante un mensaje de Amazon SNS, puede especificar la clave de deduplicación y el ID de deduplicación. El identificador único ayuda a asegurarse de que cada objeto enviado para el etiquetado es único. Si envía dos objetos con el mismo identificador único, este último objeto se considera un duplicado. Esto evita la inyección accidental de objetos que no fueron diseñados y también proporciona un ID para realizar un seguimiento de los datos de salida cuando se generan etiquetas. Para obtener más información, vea Gestión de mensajes duplicados.
Coloque objetos en Amazon S3
Puede configurar los buckets de S3 para publicar automáticamente solicitudes de etiquetado de datos en el tema de entrada SNS cada vez que se agrega un objeto de datos al bucket. Con esta configuración, puede colocar objetos en el bucket de S3 y se envían automáticamente a su trabajo de etiquetado de streaming.
Para obtener más información acerca de cómo configurar el bucket de S3 y las notificaciones, vea Enviar objetos de datos a su trabajo de etiquetado mediante un bucket de S3.
Resumen de la solución
Para completar este caso de uso, utilice el Jupyter Notebook ground_truth_create_streaming_labeling_job.ipynb en el repositorio GitHub de ejemplos de Amazon SageMaker .
Después de completar los requisitos previos, puede utilizar este tutorial para hacer lo siguiente:
- Iniciar una instancia de portátil y configurar el portátil de demostración
- Iniciar un trabajo de transmisión
- Supervisar el trabajo
- Enviar objetos a un trabajo en curso
- Detener el trabajo de etiquetado
Los trabajos de etiquetado por streaming se inician mediante la operación de la API Ground Truth Truth CreateLabelingJob en un SDK de AWS específico del idioma compatible.
Requisitos previos
Si eres un nuevo usuario de los trabajos de etiquetado por streaming de Ground Truth, te recomendamos que revises los trabajos de etiquetado por streaming de Ground Truth antes de completar este tutorial.
Para completar este tutorial, necesita lo siguiente:
- Una cuenta de AWS.
- Un bucket de S3 en la misma región de AWS que utiliza para iniciar su trabajo de etiquetado de streaming. Si utiliza un Jupyter notebook de demostración, este bucket también debe estar en la misma región que su instancia de notebook de Amazon SageMaker. Puede especificar este bucket en la variable BUCKET del Jupyter Notebook o utilizar el bucket predeterminado en la región en la que se crea la instancia de bloc de notas. Para obtener más información, consulte ¿Cómo puedo crear un bucket de S3?
- Un rol de ejecución de AWS Identity and Access Management (IAM) con los permisos necesarios. El Jupyter Notebook utiliza automáticamente el rol que utilizó para crear la instancia de Jupyter Notebook (consulte el siguiente elemento de esta lista). Agregue los siguientes permisos a esta función de IAM:
- Adjuntar políticas gestionadas
AmazonsageMakerGroundTruthExecution
. El siguiente GIF muestra cómo asociar esta directiva al rol en la consola de IAM.
- Adjuntar políticas gestionadas
-
- Cuando cree su rol, especifique los permisos de Amazon S3. Puede permitir que ese rol acceda a todos sus recursos en Amazon S3 o puede especificar buckets concretos. Asegúrese de que su rol de IAM tenga acceso al bucket de S3 que planea utilizar. Este bucket debe estar en la misma región que la instancia del portátil.
- Un equipo de trabajo. Un equipo de trabajo es un grupo de personas que usted selecciona para etiquetar sus datos. Un equipo de trabajo es un grupo de trabajadores de una fuerza de trabajo, que está formado por trabajadores contratados a través de Amazon Mechanical Turk, trabajadores gestionados por proveedores o sus propios trabajadores privados a los que usted invita a trabajar en sus tareas. Cualquiera que sea el tipo de fuerza de trabajo que elija, Ground Truth se encarga de enviar tareas a los trabajadores. Para obtener una vista previa de la interfaz de usuario del trabajador, utilice una plantilla privada y agréguese al equipo de trabajo que utilice en el bloc de notas.
- Para utilizar una plantilla privada o de proveedor, registre el nombre de recurso de Amazon (ARN) del equipo de trabajo que utilice, lo necesita en los Jupyter notebooks Jupyter adjuntos. El siguiente GIF muestra cómo crear rápidamente un equipo de trabajo privado en la consola de Amazon SageMaker.
-
- Si no especifica una plantilla privada o de proveedor, el portátil utiliza automáticamente la plantilla de Mechanical Turk. Al crear el trabajo de etiquetado, puede especificar el importe total que paga a un trabajador individual por etiquetar un objeto de datos. Para obtener más información, consulte los precios de Amazon SageMaker Ground Truth.
- Si no está utilizando el modo predeterminado en los Jupyter notebooks, debe proporcionar una plantilla de tarea de trabajador HTML. Esta plantilla se utiliza para representar la interfaz de usuario de tareas humanas que utilizan los trabajadores para completar las tareas. Puede copiar la plantilla directamente en los Jupyter notebooks, lo que proporciona una lógica para escribir la plantilla en Amazon S3, o puede agregar la plantilla a su bucket de S3 y registrar el URI de la plantilla de Amazon S3. Para obtener más información acerca de las plantillas de ejemplo, vea Tipos de tareas integrados. Para obtener más información acerca de los flujos de trabajo de etiquetado personalizado, consulte Paso 2: Creación de la plantilla de tarea de etiquetado personalizado.
- Una lista de categorías de etiquetas. Los Jupyter notebooks utilizan esta lista para crear un archivo de configuración de categoría de etiquetas y cargarlo en Amazon S3. Cuando se utiliza el modo predeterminado en los Jupyter notebooks, se proporciona esta lista.
- Si no está utilizando los Jupyter notebooks, necesita dos funciones Lambda para preprocesar sus datos de entrada (PrehumanTaskLambdaarn) y datos de salida (AnnotationConsolidationLambdaArn). Si utiliza uno de los tipos de tareas integrados, Ground Truth proporciona estas funciones.
Iniciar una instancia de notebook y configurar el portátil de demostración
Para utilizar los portátiles, puede iniciar una instancia de Jupyter Notebook de Amazon SageMaker. Para obtener más información, consulte Crear una instancia de bloc de notas. Cuando la instancia de Jupyter Notebook esté activa, siga los pasos siguientes para utilizar los Jupyter notebooks:
- En la consola de Amazon SageMaker en instancias de Notebook, busque la instancia del portátil.
- Elija Abrir Jupyter o Abrir laboratorio de Jupyter.
- En Jupyter, elija los ejemplos de SageMaker en Jupyter Lab, elija el icono de Amazon SageMaker para ver una lista de Jupyter notebooks de ejemplo.
- En la sección Trabajos de etiquetado de Ground Truth , seleccione uno de los siguientes Jupyter notebooks para usarlos junto a esta publicación. En Jupyter, selecciona Usar junto a un Jupyter Notebook para empezar a usarlo. En Jupyter Lab, seleccione el Jupyter Notebook y, a continuación, elija Crear copia.
Iniciar un trabajo de streaming
Los trabajos de etiquetado por streaming se crean utilizando la misma operación API, CreateLabelingJob, que los trabajos de etiquetado sin transmisión. Para crear un trabajo de etiquetado de transmisión, especifique un tema de entrada como origen de datos de entrada y un tema de salida como origen de datos de salida. Los nuevos objetos de datos se envían continuamente al trabajo de etiquetado a través del tema de entrada y los datos de salida se envían al tema de salida tan pronto como los trabajadores completan las tareas de etiquetado. Puede configurar el tema de salida para enviar una notificación o desencadenar un evento en cualquier momento en que se reciban los datos de salida.
Cuando se crea un trabajo de etiquetado de transmisión, el archivo de manifiesto de entrada es opcional.
Puede utilizar la operación CreateTopic API de Amazon SNS para crear sus temas de entrada y salida, o bien puede utilizar la consola de Amazon SNS. La respuesta a una solicitud correcta de CreateTopic incluye el ARN del tema. Utilice los ARN de tema de los temas de entrada y salida en CreateLabelingJob en los parámetros.
Si el nombre del tema contiene GroundTruth (no distingue mayúsculas y minúsculas) o SageMaker (no distingue entre mayúsculas y minúsculas), la política AmazonsageMakerGroundTruthExecution concede permisos suficientes para publicar mensajes en su trabajo de etiquetado. Si no es así, asegúrese de otorgar permiso a su rol de IAM para realizar las acciones SNS: Publicar y SNS: Suscribirse para los temas de SNS.
Creación de un tema SNS mediante el SDK de Amazon Python (Boto3)
El Jupyter Notebook ground_truth_create_streaming_labeling_job.ipynb crea temas de SNS mediante el SDK de AWS Python (Boto3). En el código siguiente, reemplace LABELING_JOB_NAME por el nombre del trabajo de etiquetado:
sns = boto3.client('sns')
# Create Input Topic
input_response = sns.create_topic(Name= LABELING_JOB_NAME + '-Input')
INPUT_SNS_TOPIC_ARN = input_response['TopicArn']
# Create Output Topic
output_response = sns.create_topic(Name= LABELING_JOB_NAME + '-Output')
OUTPUT_SNS_TOPIC_ARN = output_response['TopicArn']
Creación de un tema SNS en la consola de Amazon SNS
Para crear un tema SNS en la consola de Amazon SNS, siga estos pasos:
1. En la consola de Amazon SNS, elija Temas.
2. Elija Crear tema.
3. En Nombre, escriba un nombre.
4. En Nombre para mostrar, escriba un nombre para mostrar opcional.
5. Si es necesario, agregue configuraciones adicionales para el tema, como Cifrado, Directiva de acceso, Directiva de reintento de entrega, Registro de estado de entrega y
Después de crear los temas, alimente el tema de entrada ARN a LabelingJobsnsDataSource.snStoPicarn y el tema de salida ARN a OutputConfig.snStoPicarn.
Creación de un trabajo de etiquetado de transmisión mediante CreateLabelingJob
Debe crear trabajos de etiquetado por streaming de Ground Truth con la operación de API de Amazon SageMaker CreateLabelingJob.
El Jupyter Notebook ground_truth_create_streaming_labeling_job.ipynb le guiará a través de la creación de los recursos necesarios y la configuración de la solicitud.
Si no utiliza este bloc de notas, utilice un SDK de AWS compatible con CreateLabelingJob. Para obtener más información sobre el uso de una solicitud de API para crear un trabajo de etiquetado de transmisión, consulte Ejemplo: Usar la API de SageMaker para crear un trabajo de etiquetado de transmisión. Si eres un nuevo usuario de Ground Truth, te recomendamos que utilices uno de los tipos de tareas integrados basados en imágenes o texto para familiarizarte con los trabajos de etiquetado en streaming de Ground Truth.
Después de rellenar los parámetros de la solicitud, envíe la solicitud para crear un trabajo de etiquetado. Consulte la sección Usar la API CreateLabelingJob para crear un trabajo de etiquetado de transmisión en el Jupyter Notebook ground_truth_create_streaming_labeling_job.ipynb . También puede utilizar la interfaz de línea de comandos de AWS (CLI de AWS) o AWS SDK. Para obtener más información, consulte Ejemplo: Usar la API de SageMaker para crear un trabajo de etiquetado de transmisión.
Monitoreo del trabajo
Puede llamar a DescribeLabelingJob después de crear el trabajo. Consulte la sección Usar la API DescribelabelingJob para describir un trabajo de etiquetado de transmisión en el Jupyter Notebook ground_truth_create_streaming_labeling_job.ipynb .
Asegúrese de que LabelingJobStatus sea InProgress antes de alimentar objetos a través del canal SNS. El siguiente código es un ejemplo de cómo puede utilizar DescribeLabelingJob (utilizando AWS Python (Boto3) SDK) para recuperar el estado del trabajo de etiquetado:
sagemaker = boto3.client('sagemaker')
sagemaker.describe_labeling_job(LabelingJobName=LABELING_JOB_NAME)['LabelingJobStatus']
Si ha especificado el campo opcional s3DataSource.Manifests3uri
en la solicitud CreateLabelingJob
, los objetos del archivo de Amazon S3 se envían automáticamente a los trabajadores tan pronto como se inicia el trabajo de etiquetado. El elemento LabelCounters
de la respuesta a la solicitud DescribeBelingJob
muestra estos objetos como Unlabeled
inicialmente y, a continuación, HumanLabeleled
después de haber sido anotados y los trabajadores se han enviado su trabajo.
Amazon SQS ofrece una cola hospedada segura, duradera y disponible. Los trabajos de etiquetado por streaming crean una cola SQS en su cuenta. Puede comprobar la cola con el nombre GroundTruth-labeling_job_name
. El siguiente código es un ejemplo de cómo puede utilizar GetQueueURL (utilizando AWS Python (Boto3) SDK) para recuperar el estado del trabajo de etiquetado:
sqs = boto3.client('sqs')
response = sqs.get_queue_url(QueueName='GroundTruth-' + LABELING_JOB_NAME.lower())
Envío de objetos a un trabajo en curso
Una vez iniciado el trabajo de etiquetado, los objetos de datos se pueden enviar a él a través de la consola o la API de Amazon SNS. Para obtener más información, consulte Enviar objetos de datos mediante Amazon SNS. El formato del mensaje SNS que se utiliza para enviar un objeto de datos al trabajo de etiquetado es el mismo que el formato de manifiesto aumentado.
Por ejemplo, para enviar un nuevo objeto de imagen a un trabajo de etiquetado de clasificación de imágenes, el mensaje puede tener un aspecto similar al siguiente:
{"source-ref»: «s3: //awsexamplebucket/example-image.jpg"}
Si crea un trabajo de etiquetado basado en texto, la solicitud puede tener un aspecto similar al siguiente:
{"source»: «Lorem ipsum dolor sit amet"}
Publicación de una solicitud en la consola de Amazon SNS
Para publicar una solicitud en su trabajo de etiquetado en la consola de Amazon SNS, siga estos pasos:
- En la consola de Amazon SNS, elija Temas.
- Elija el tema de entrada.
- Elija Publicar mensaje.
Publicación de una solicitud mediante la operación Publicar API
Puede utilizar la operación Publicar API de Amazon SNS para enviar una solicitud para etiquetar un objeto de datos a su trabajo de etiquetado por streaming a través de un SDK de AWS compatible.
El Jupyter Notebook muestra cómo publicar un mensaje mediante esta operación.
El siguiente código es un ejemplo de cómo puede utilizar AWS Python (Boto3) SDK para enviar una solicitud a Publish
. Reemplace INPUT_TOPIC_ARN por el ARN del tema de entrada y reemplace REQUEST por una solicitud similar a los ejemplos anteriores.
sns = boto3.client ('sns') published_message = sns.publish (TopicArn=INPUT_TOPIC_ARN, Mensaje=SOLICITUD)
Después de publicar una solicitud, una llamada a DescribeBelingJob muestra Unlabeled incrementado en 1:
"LabelCounters" : {
'TotalLabeled': 0,
'HumanLabeled': 0,
'MachineLabeled': 0,
'FailedNonRetryableError': 0,
'Unlabeled': 1
}
Vista previa de la tarea de trabajador
Si ha utilizado una fuerza de trabajo privada y se ha convertido en trabajador del equipo de trabajo utilizado para crear el trabajo de etiquetado, puede navegar hasta el portal de trabajadores para obtener una vista previa de la tarea de trabajador. Puede encontrar el vínculo del portal de trabajo en la página Etiquetado de fuerzas de trabajo de la consola Ground Truth (en la consola de Amazon SageMaker) en la región que utilizó para iniciar el trabajo de etiquetado. Este enlace también se incluye en el correo electrónico de bienvenida que se le envió cuando fue agregado al equipo de trabajo.
Cuando un trabajador envía un objeto de datos después de etiquetarlo, se envía al tema de salida. Además, los resultados se agregan periódicamente al bucket de salida de S3 que especificó al crear el trabajo de etiquetado en S3OutputPath.
Detener el trabajo de etiquetado
Puede utilizar trabajos de etiquetado por streaming en flujos de trabajo de larga ejecución y se ejecutan hasta que los detenga. Esto le permite alimentar objetos continuamente al trabajo de etiquetado.
Sin embargo, si el sistema detecta que no hay objetos disponibles en el sistema para etiquetar y está inactivo continuamente durante más de un cierto número de días, GroundTruth intenta detener el trabajo. Para obtener más información, consulte Detener trabajos de transmisión.
Puede detener su trabajo de etiquetado en la consola Ground Truth o utilizando la operación StopLabelingJobde la API de Ground Truth. Para utilizar la consola, siga los pasos siguientes:
- En la consola de Amazon SageMaker, elija Ground Truth. Asegúrese de utilizar la región que utilizó para iniciar el trabajo de etiquetado.
- Seleccione el trabajo de etiquetado que desea detener.
- En el menú desplegable Acciones , elija Detener trabajo .
Las celdas finales del Jupyter Notebook demuestran cómo puede detener un trabajo de etiquetado con AWS Python (Boto3) SDK:
sagemaker = boto3.client('sagemaker')
sagemaker.stop_labeling_job(LabelingJobName=LABELING_JOB_NAME)
Cuando un trabajo de etiquetado se ha detenido correctamente, su estado se muestra como Detenido.
Otras características de los trabajos de etiquetado por streaming
Las siguientes secciones cubren las características adicionales de los trabajos de etiquetado por secuencias: enviar objetos al trabajo de etiquetado soltándolos en un bucket de S3 y encadenando varios trabajos de etiquetado juntos.
Envío de objetos de datos a su trabajo de etiquetado utilizando un bucket de S3
Puede configurar los buckets de S3 para publicar automáticamente solicitudes de etiquetado de datos en el tema de entrada SNS cada vez que se agrega un objeto de datos al bucket. Con esta configuración, puede colocar objetos en el bucket de S3 y se envían automáticamente a su trabajo de etiquetado de streaming.
Para configurar un bucket de S3 para que envíe automáticamente objetos de datos al tema de entrada de SNS, debe agregar una política de acceso al tema de entrada para permitir que Amazon S3 agregue un evento. El código siguiente ilustra el tipo de directiva que se va a adjuntar con el ARN del tema (reemplace SNS-Topic-ARN):
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"AWS":"*"
},
"Action": [
"SNS:Publish"
],
"Resource": "SNS-topic-ARN",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:<bucket-name>" },
"StringEquals": { "aws:SourceAccount": "<bucket-owner-account-id>" }
}
}
]
}
Para configurar el bucket de S3 para que envíe objetos de datos a su trabajo de etiquetado de transmisión en la consola de Amazon S3, siga estos pasos:
- En la consola de Amazon S3, elija el bucket que desea utilizar para enviar objetos de datos al trabajo de etiquetado.
- En la ficha Propiedades , en Configuración avanzada , elija Eventos .
- Elija Agregar notificación.
- Asigne un nombre a su notificación.
- Seleccione Todos los eventos de creación de objetos.
- Si lo desea, introduzca un prefijo si desea colocar objetos de datos en un prefijo dentro del bucket de S3.
- Si sólo desea enviar tipos específicos de objetos de datos al tema de entrada SNS, especifique un sufijo. Por ejemplo, para asegurarse de que sólo se envían archivos de imagen al tema de entrada SNS, puede escribir .jpg, .png, .jpeg.
- En el menú desplegable Enviar a , elija Tema SNS .
- Elija el tema de entrada SNS que usó o utilizará para crear su trabajo de etiquetado.
- Elija Guardar.
El siguiente GIF muestra cómo configurar esta configuración en la consola de Amazon S3.
Encadenamiento
Para crear canalizaciones de etiquetado de datos sofisticadas, persistentes y en tiempo real que le permitan agregar varios tipos de anotaciones a objetos de datos, auditar y verificar etiquetas, y mucho más, puede encadenar varios trabajos de etiquetado por secuencias.
El encadenamiento le permite enviar la salida de un trabajo de etiquetado de streaming a otro trabajo de etiquetado de streaming. Por ejemplo, los datos de salida del trabajo 1 se pueden enviar al trabajo 2 como entrada, los datos de salida del trabajo 2 pueden fluir al trabajo n-1 y los datos del trabajo n-1 pueden fluir al trabajo n en tiempo real.
Como caso de uso de ejemplo, podría usar Job 1 para agregar una máscara de segmentación semántica a una secuencia de fotogramas de vídeo. A continuación, utilice el trabajo 2 para agregar cuadros delimitadores para identificar y localizar objetos de datos en cada fotograma. Por último, utilice Job 3 para verificar y ajustar las etiquetas según sea necesario.
Para configurarlo, utilice el tema SNS de salida del trabajo 1 como tema SNS de entrada del trabajo 2. Del mismo modo, utilice el tema SNS de salida del trabajo 2 como el tema SNS de entrada del trabajo 3, etc. El siguiente diagrama ilustra esta arquitectura.
Después de configurar los trabajos de esta manera, un objeto de datos que fluye a través de Job 1 se abre camino a Job 2 automáticamente después de pasar por Job 1. Las siguientes son algunas posibilidades para encadenar con dos trabajos:
- Especifique diferentes nombres de atributos de etiqueta para trabajos con un tipo de tarea similar. Por ejemplo, el trabajo 1 (datos de etiqueta) enlazar al trabajo 2 (ajustar, revisar y verificar anotaciones desde el Trabajo 1).
- Utilice diferentes nombres de atributo de etiqueta para trabajos con diferentes tipos de tareas. Por ejemplo, el trabajo 1 (etiquetado para la clasificación de imágenes) enlazar al trabajo 2 (etiquetado para detección de objetos).
- Utilice los mismos nombres de atributo de etiqueta para ambos trabajos. Por ejemplo, el trabajo 1 (etiquetado) encadena al trabajo 2 (los datos parciales etiquetados del trabajo 1 fluyen a la tarea 2).
Puede utilizar el Jupyter Notebook ground_truth_create_chained_streaming_labeling_job.ipynb para aprender a encadenar dos trabajos de etiquetado de streaming. En este ejemplo se muestra el primer caso de uso de la lista anterior (diferentes nombres de atributos de etiqueta para trabajos con tipos de tareas similares). Cuando se utiliza en modo predeterminado, este Jupyter Notebook enlaza un trabajo de cuadro delimitador (detección de objetos) (trabajo 1) a un trabajo de auditoría de cuadro delimitador. Cualquier cuadro delimitador anotado en el trabajo 1 se puede ajustar en el trabajo 2 en tiempo real. Puede generalizar este caso de uso para configurar flujos de trabajo de comprobación de calidad, en los que un equipo de trabajo revisa las anotaciones de otro equipo de trabajo.
También puede utilizar el portátil para configurar cualquier tipo de trabajos de streaming encadenados para lograr múltiples configuraciones de encadenamiento de trabajos.
Conclusión
Este post cubre los beneficios de utilizar la función de streaming de Ground Truth y cómo crear y encadenar trabajos de etiquetado de streaming. Este post simplemente rasca la superficie de lo que Ground Truth Streaming puede hacer.
Para empezar, utilice uno de los Jupyter notebooks incluidos en esta publicación para iniciar y experimentar con trabajos de etiquetado por streaming, o consulte Crear un trabajo de etiquetado por streaming.
Háganos saber lo que piensa en los comentarios.
Este artículo fue traducido del Blog de AWS en Inglés
Sobre los autores
Priyanka Gopalakrishna es ingeniera de software en Amazon AI. Su enfoque se centra en resolver problemas de etiquetado mediante el aprendizaje automático y la creación de soluciones de IA escalables mediante sistemas distribuidos.
Talia Chopra es escritora técnica en AWS especializada en aprendizaje automático e inteligencia artificial. Trabaja con varios equipos en AWS para crear documentación técnica y tutoriales para clientes que utilizan Amazon SageMaker, MXNet y AutoGluon.
Revisor