O blog da AWS
Pipeline de rotulagem de dados em tempo real para fluxos de trabalho ML usando o Amazon SageMaker Ground Truth
Por Talia Chopra, Escritora Técnica e Priyanka Gopalakrishna, Engenheira de Software
Os modelos de aprendizado de máquina (ML) de alta qualidade dependem de dados de treinamento, validação e teste rotulados com precisão. À medida que os modelos de ML e deep learning estão cada vez mais integrados em ambientes de produção, está se tornando mais importante do que nunca ter pipelines personalizáveis e em tempo real de rotulagem de dados que possam receber e processar continuamente dados não rotulados.
Por exemplo, você pode querer criar um aplicativo voltado para o consumidor que coleta e envia regularmente novos objetos de dados para um pipeline de rotulagem de dados, que produz rótulos e cria um conjunto de dados para treinamento ou reciclagem de modelos. Esse pipeline cria um loop de feedback positivo que leva a modelos mais precisos e sofisticados.
Os trabalhos fornecem infraestrutura e recursos para criar um trabalho de rotulagem em execução contínua que recebe novos objetos de dados sob demanda e os envia para trabalhadores humanos para serem rotulados. Você pode encadear vários trabalhos de rotulagem de streaming juntos para criar pipelines de rotulagem de dados mais intrincados e refinados.
Use esta postagem no blog para aprender a configurar e personalizar trabalhos de rotulagem de streaming da verdade do solo.
Visão geral passo a passo
Além de discutir os benefícios de usar um trabalho de rotulagem de streaming, como eliminar atrasos, aplicar idempotência e personalizar fontes de dados de entrada, esta publicação apresenta dois notebooks Jupyter que você pode usar para configurar trabalhos de rotulagem de streaming. Você pode usar esses notebooks ou seguir as instruções do console nesta publicação para criar um trabalho de rotulagem de streaming usando um AWS Software Development Kit (SDK) compatível e específico do idioma de sua escolha.
O primeiro caderno mostra como criar trabalhos de rotulagem de streaming da verdade do solo. Este notebook suporta tipos de tarefas incorporados e personalizados, que permitem criar rapidamente pipelines de rotulagem de dados para vários tipos de dados, como imagem, texto, vídeo, quadro de vídeo, nuvem de pontos 3D e muito mais. Este passo a passo demonstra como usar o Amazon Simple Notification Service (Amazon SNS) para enviar mensagens seguras e em tempo real para um trabalho de rotulagem de streaming para alimentar novos objetos de dados para trabalhadores humanos para rotulagem. Você aprende como configurar notificações para receber os dados de saída dessa tarefa de rotulagem em tempo real, assim que os trabalhadores terminarem de rotular um objeto de dados.
Ao criar um trabalho de rotulagem de streaming, você pode rotear os dados de saída desse trabalho para outro trabalho de rotulagem de streaming para criar pipelines de rotulagem de dados mais complexos e para verificação e ajuste de etiquetas de dados. Isso é referido como trabalhos de rotulagem de encadeamento. Você pode usar o segundo caderno com este post para aprender a encadear dois trabalhos de rotulagem de streaming juntos.
Você pode executar ambos os notebooks no modo padrão, exigindo pouca ou nenhuma entrada. O modo padrão cria trabalhos de rotulagem de detecção de objetos de imagem (caixa delimitadora) e demonstra como enviar objetos de dados para esses trabalhos de rotulagem. Se você tiver seus próprios objetos de dados que deseja usar, você pode desativar o modo padrão.
Para começar, conclua os Pré-requisitos e Iniciando uma instância de notebook e configurando as seções do notebook de demonstração nesta publicação para coletar os recursos necessários para concluir este tutorial e, opcionalmente, configure os notebooks Jupyter ground_truth_create_streaming_labeling_job.ipynb e ground_truth_create_chained_streaming_labeling_job.ipynb em uma instância de notebook do Amazon SageMaker.
O diagrama a seguir ilustra a arquitetura da solução.
Vantagens dos trabalhos de rotulagem de streaming
O primeiro caderno mostra como criar trabalhos de rotulagem de streaming da verdade do solo.
Canal de entrada em tempo real
Você pode alimentar objetos em tempo real e continuamente para um trabalho de rotulagem. O Amazon SNS permite configurar tópicos para alimentar objetos em tempo real para um trabalho de rotulagem em execução.
Fluxos de trabalho prolongados
Você pode iniciar trabalhos de rotulagem que podem ser executados por um longo tempo se eles estão sendo alimentados ativamente objetos. Os trabalhos de streaming são projetados para serem fluxos de trabalho de longa duração que continuam em execução até que você opte por impedi-los.
A Verdade do Solo irá parar o trabalho se estiver ocioso por um longo tempo. Um trabalho é definido como ocioso se Ground Truth não detectar nenhum objeto esperando para ser rotulado no sistema durante um determinado número de dias. Por exemplo, se Ground Truth não receber novos objetos de dados do tópico de entrada SNS e todos os objetos alimentados ao sistema já estiverem rotulados, um temporizador para o tempo ocioso será iniciado. Se o temporizador ocioso atingir um determinado número, a Verdade do Ground interrompe o trabalho de rotulagem.
Em suma, se os objetos estão fluindo ativamente pelo sistema em cadência regular, e você pode obter um fluxo de trabalho de longa duração. Para obter mais informações sobre como configurar temporizadores ociosos, consulte Interromper um trabalho de rotulagem de streaming.
Eliminar atrasos
Com os trabalhos de rotulagem de streaming, os objetos podem fluir pelo pipeline de rotulagem de dados mais rapidamente. Os trabalhos de streaming funcionam de forma janela deslizante, onde a Ground Truth continua enviando objetos para rotulagem, desde que os slots estejam disponíveis. Os slots são definidos pelo parâmetro maxConcurrentTaskCount, que define o número máximo de objetos (slots) que podem ser preenchidos por objetos a serem enviados para rotulagem. Quando maxConcurrentTaskCount for atingido, você pode visualizar o número de objetos de dados enfileirados no Amazon Simple Queue Services (Amazon SQS).
Por exemplo, se maxConcurrentTaskCount
for 10 e 25 objetos forem enviados por meio do tópico SNS de entrada, Ground Truth enviará um máximo de 10 objetos para os trabalhadores por vez e um máximo de 15 objetos restantes estiverem na fila do Amazon Simple Queue Service (Amazon SQS). Se um trabalhador trabalha e envia 2 objetos dos 10 que foram enviados, apenas 8 slots são preenchidos no momento, e mais 2 são enviados aos trabalhadores dos 15 objetos restantes. Dessa forma, os trabalhadores têm um fluxo constante de objetos provenientes de suas entradas, até um máximo de 10 objetos. Não há atrasos resultantes de lotes de objetos. À medida que os trabalhadores trabalham em objetos, novos objetos são bombeados constantemente e você pode obter rotulagem de dados com maior velocidade.
Limitação de taxa
Você pode limitar e controlar como e quando você alimenta dados aos trabalhadores. Quando você alimenta objetos para o tópico SNS de entrada, eles são coletados em uma fila SQS em sua conta, chamada GroundTruth
-<labeling-job-name>. Se mais objetos forem enviados para o trabalho de rotulagem do que o maxConcurrentTaskCount
, eles permanecerão na fila SQS. Caso contrário, eles são enviados aos trabalhadores para serem rotulados. Qualquer objeto na fila SQS está disponível por um máximo de 14 dias.
Por exemplo, se maxConcurrentTaskCount
for 1000 e 2.500 objetos forem enviados para um trabalho de rotulagem de streaming por meio de um tópico SNS de entrada, Ground truth enviará um máximo de 1.000 objetos para os trabalhadores de cada vez e, inicialmente, 1.500 permanecerão na fila SQS. A velocidade dos trabalhadores determina a rapidez com que os 1.500 objetos na fila são enviados para rotulagem. Se esses objetos permanecerem na fila por mais tempo do que o esperado, isso serve como um indicador que você enviou mais objetos do que pode ser trabalhado por trabalhadores em um determinado período de tempo. Se os objetos de dados demorarem mais do que o esperado para rotular, você poderá ajustar a entrada para alimentar objetos ao Amazon SNS em um ritmo mais lento. Você também pode alterar o valor de maxConcurrentTaskCount
para se adequar ao ritmo do trabalhador.
Para monitorar a velocidade e a quantidade de objetos de dados que estão sendo alimentados na fila SQS associada a um trabalho de rotulagem de streaming, você pode configurar alarmes para a fila com o Amazon CloudWatch. Para obter mais informações, consulte Métricas disponíveis do CloudWatch para o Amazon SQS. Por exemplo, você pode configurar um alarme na métrica ApproximateAgeOfOldestMessage
para ver o quão próximo o objeto de dados mais antigo está do limite de 14 dias. Quando esse alarme é acionado, você pode executar as ações apropriadas, como reenviar o objeto para o tópico SNS de entrada ou notificar os trabalhadores de que as tarefas expirarão se não forem concluídas dentro de um determinado período de tempo.
Notificação de saída
Um novo canal SNS é adicionado como um canal de saída para o seu trabalho de rotulagem. Quando um trabalhador conclui uma tarefa de rotulagem de streaming do Ground truth, ele usa o tópico de saída para publicar dados de saída em um ou mais endpoints especificados por você. Para receber notificações quando um trabalhador terminar uma tarefa de rotulagem, você deve assinar um endpoint no tópico de saída do SNS. Por exemplo, você pode assinar um e-mail, uma função do AWS Lambda ou uma fila SQS para o tópico de saída SNS usado para rotulagem de trabalho, e qualquer objeto rotulado por meio do Ground Truth aparece em tempo real após a rotulagem.
Além do tópico de saída do SNS, você também pode usar as atualizações frequentes do arquivo de saída do Amazon Simple Storage Service (Amazon S3) no caminho de saída do Amazon S3. Todos os rótulos são adicionados a um arquivo de manifesto de saída no Amazon S3. Você pode fazer referência a este arquivo se, por exemplo, as notificações de saída em tempo real foram perdidas. Se o bucket do S3 for versionado, você poderá visualizar e acessar diferentes versões do arquivo manifesto de saída.
Idempotência
Você pode usar um identificador exclusivo para distinguir os objetos que você alimenta para um trabalho de rotulagem e rastreá-los na saída. Você pode trazer seu próprio identificador exclusivo ou tirar proveito de um identificador gerado automaticamente ou Ground Truth cria se você não fornecer um.
Quando você envia um objeto de dados para o trabalho de rotulagem de streaming usando uma mensagem do Amazon SNS, você pode especificar sua chave de desduplicação e ID de desduplicação. O identificador exclusivo ajuda a garantir que cada objeto enviado para rotulagem seja exclusivo. Se você enviar dois objetos com o mesmo identificador exclusivo, o último objeto será considerado uma duplicata. Isso evita a injeção acidental de objetos que não foram pretendidos e também fornece um ID para rastrear os dados de saída quando os rótulos são gerados. Para obter mais informações, consulte Tratamento de mensagens duplicadas.
Solte objetos no Amazon S3
Você pode configurar seus buckets do S3 para publicar automaticamente solicitações de rotulagem de dados no tópico de entrada do SNS sempre que um objeto de dados for adicionado ao bucket. Com essa configuração, você pode soltar objetos no bucket do S3 e eles são enviados automaticamente para o trabalho de rotulagem de streaming.
Para obter mais informações sobre como configurar seu bucket e notificações do S3, consulte Enviar objetos de dados para seu trabalho de rotulagem usando um bucket do S3.
Visão geral da solução
Para concluir esse caso de uso, use o notebook ground_truth_create_streaming_labeling_job.ipynb no repositório do Amazon SageMaker Examples GitHub.
Depois de concluir os pré-requisitos, você pode usar este passo a passo para fazer o seguinte:
- Inicie uma instância de notebook e configure o notebook de demonstração
- Iniciar um trabalho de streaming
- Monitorar o trabalho
- Enviar objetos para um trabalho em andamento
- Parar o trabalho de rotulagem
Os trabalhos de rotulagem de streaming são iniciados usando a operação da API do Ground Truth CreateLabelingJob em um AWS SDK específico de idioma compatível.
Pré-requisitos
Se você é um novo usuário de trabalhos de rotulagem de streaming de verdade do solo, é recomendável que você revise os trabalhos de rotulagem de transmissão de verdade no terreno antes de concluir este passo a passo.
Para completar este passo a passo, você precisa do seguinte:
- Uma conta da AWS.
- Um bucket do S3 na mesma região da AWS que você usa para iniciar seu trabalho de rotulagem de streaming. Se você estiver usando um notebook de demonstração, esse intervalo também deve estar na mesma região da instância de notebook do Amazon SageMaker. Você pode especificar esse intervalo na variável de notebook BUCKET ou usar o intervalo padrão na Região na qual você cria a instância do notebook. Para obter mais informações, consulte Como criar um bucket do S3?
- Uma função de execução do AWS Identity and Access Management (IAM) com permissões necessárias. O jupyter notebook usa automaticamente a função para criar a instância do jupyter notebook (consulte o próximo item nesta lista). Adicione as seguintes permissões a esta função do IAM:
- Anexar políticas gerenciadas AmazonSageMakerGroundTruthExecution. O GIF a seguir demonstra como anexar essa política à função no console do IAM.
-
-
-
- Ao criar sua função, você especifica as permissões do Amazon S3. Você pode permitir que essa função acesse todos os seus recursos no Amazon S3 ou especificar buckets específicos. Certifique-se de que sua função do IAM tenha acesso ao bucket do S3 que você planeja usar. Esse intervalo deve estar na mesma região da instância do notebook.
- Uma equipe de trabalho. Uma equipe de trabalho é um grupo de pessoas que você seleciona para rotular seus dados. Uma equipe de trabalho é um grupo de trabalhadores de uma força de trabalho, que é composta por trabalhadores envolvidos no Amazon Mechanical Turk, funcionários gerenciados por fornecedores ou seus próprios trabalhadores privados que você convida para trabalhar em suas tarefas. Seja qual for o tipo de força de trabalho que você escolher, a Ground Truth cuida do envio de tarefas aos trabalhadores. Para visualizar a interface do usuário do trabalhador, use uma força de trabalho privada e adicione-se à equipe de trabalho que você usa no bloco de notas.
- Para usar uma força de trabalho privada ou de fornecedor, registre o Amazon Resource Name (ARN) da equipe de trabalho que você usa — você precisa dele nos notebooks Jupyter que acompanham. O GIF a seguir demonstra como criar rapidamente uma equipe de trabalho privada no console do Amazon SageMaker.
-
-
-
-
-
- Se você não especificar uma força de trabalho privada ou de fornecedor, o notebook usará automaticamente a força de trabalho do Mecânico Turk. Ao criar o job de rotulagem, você pode especificar a quantia total paga a um trabalhador individual pela rotulagem de um objeto de dados. Para saber mais, consulte a definição de preço do Amazon SageMaker Ground Truth.
- Se você não estiver usando o modo padrão nos notebooks, você deve fornecer um modelo de tarefa de trabalho HTML. Esse modelo é usado para renderizar a interface do usuário de tarefas humanas que seus trabalhadores usam para concluir tarefas. Você pode copiar seu modelo diretamente para os notebooks, que fornece lógica para gravar o modelo no Amazon S3, ou adicionar o modelo ao bucket do S3 e registrar o modelo URI do Amazon S3. Para obter mais informações sobre modelos de exemplo, consulte Tipos de tarefa incorporados. Para obter mais informações sobre fluxos de trabalho de rotulagem personalizada, consulte Etapa 2: Criando seu modelo de tarefa de rotulagem personalizada.
- Uma lista de categorias de rótulos. Os notebooks usam essa lista para criar um arquivo de configuração de categoria de rótulo e enviá-lo para o Amazon S3. Quando você usa o modo padrão nos notebooks, esta lista é fornecida.
- Se você não estiver usando os notebooks, precisará de duas funções do Lambda para pré-processar seus dados de entrada (PrehumantAskLambdaarn) e dados de saída (annotationConsolidationLambdaarn). Se você usar um dos tipos de tarefa internos, Ground Truth fornece essas funções.
-
-
Iniciando uma instância de notebook e configurando o notebook de demonstração
-
- Para usar os notebooks, você pode executar uma instância de notebook do Amazon SageMaker. Para obter mais informações, consulte Criar uma instância de notebook. Quando a instância do notebook estiver ativa, execute as seguintes etapas para usar os notebooks:
- No console do Amazon SageMaker em instâncias do Notebook, localize sua instância de notebook.
- Escolha Abrir Jupyter ou Open Jupyter Lab.
- No Jupyter, escolha os exemplos do SageMaker no Jupyter Lab, escolha o ícone do Amazon SageMaker para ver uma lista de notebooks de exemplo.
- Na seção Trabalhos de rotulagem da verdade do solo, selecione um dos seguintes cadernos a serem usados ao lado desta publicação. No Jupyter, escolha Usar ao lado de um caderno para começar a usá-lo. No Jupyter Lab, selecione o caderno e escolha criar cópia.
- Para usar os notebooks, você pode executar uma instância de notebook do Amazon SageMaker. Para obter mais informações, consulte Criar uma instância de notebook. Quando a instância do notebook estiver ativa, execute as seguintes etapas para usar os notebooks:
Iniciando um trabalho de streaming
Os trabalhos de rotulagem de streaming são criados usando a mesma operação de API, CreateLabelingJob
, como trabalhos de rotulagem que não sejam streaming. Para criar um trabalho de rotulagem de streaming, especifique um tópico de entrada como fonte de dados de entrada e um tópico de saída como fonte de dados de saída. Novos objetos de dados são enviados continuamente para o trabalho de rotulagem por meio do tópico de entrada, e os dados de saída são enviados para o tópico de saída assim que os trabalhadores concluírem as tarefas de rotulagem. Você pode configurar o tópico de saída para enviar uma notificação ou acionar um evento sempre que os dados de saída forem recebidos.
Quando você cria um trabalho de rotulagem de streaming, o arquivo de manifesto de entrada é opcional.
Você pode usar a operação de API do Amazon SNS CreateTopic
para criar seus tópicos de entrada e saída, ou você pode usar o console do Amazon SNS. A resposta a uma solicitação bem-sucedida para CreateTopic
inclui o ARN tópico. Você usa o tópico ARNs de seus tópicos de entrada e saída em CreateLabelingJob
nos parâmetros.
Se o nome do tópico contiver GroundTruth
(não diferencia maiúsculas e minúsculas) ou SageMaker (não diferencia maiúsculas de minúsculas), a política AmazonSageMakerGroundTruthExecution concederá permissões suficientes para publicar mensagens em seu trabalho de rotulagem. Caso contrário, certifique-se de conceder a sua função do IAM permissão para executar as ações SNS:Publish e SNS:Assine seus tópicos SNS.
Criação de um tópico SNS usando o SDK do Amazon Python (Boto3)
O notebook ground_truth_create_streaming_labeling_job.ipynb cria tópicos SNS usando o SDK do AWS Python (Boto3). No código a seguir, substitua LABELING_JOB_NAME pelo nome do job de rotulagem:
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']
Criação de um tópico SNS no console do Amazon SNS
Para criar um tópico do SNS no console do Amazon SNS, execute as seguintes etapas:
- No console do Amazon SNS, escolha Tópicos.
- Escolha Criar tópico.
3. Em Nome, insira um nome.
4. Em Nome de exibição, insira um nome de exibição opcional.
5. Se necessário, adicione configurações adicionais para o tópico, como Criptografia, Política de acesso, Políticade repetição de entrega, Registro de statusde entrega e
Depois que os tópicos forem criados, alimente o ARN do tópico de entrada para LabelingJobsNsDataSource.snStopicarn e o ARN do tópico de saída para outputConfig.snStopicarn.
Criando um trabalho de rotulagem de streaming usando CreateLabelingJob
Você deve criar trabalhos de rotulagem de streaming do Ground Truth com a operação de API do Amazon SageMaker CreateLabelingJob.
O bloco de anotações ground_truth_create_streaming_labeling_job.ipynb orienta você através da criação dos recursos necessários e da configuração da solicitação.
Se você não estiver usando este notebook, use um AWS SDK compatível com CreateLabelingJob. Para obter mais informações sobre como usar uma solicitação de API para criar um job de rotulagem de streaming, consulte Exemplo: Usar a API do SageMaker para criar Job de rotulagem de streaming. Se você é um novo usuário do Ground Truth, é recomendável usar um dos tipos de tarefa incorporados baseados em imagem ou texto para se familiarizar com os trabalhos de rotulagem de streaming do Ground Truth.
Depois de preencher os parâmetros da solicitação, envie a solicitação para criar um trabalho de rotulagem. Consulte a seção Usar a API CreateLabelingJob para criar uma tarefa de rotulagem de streaming no jupyter notebookground_truth_create_streaming_labeling_job.ipynb . Você também pode usar a AWS Command Line Interface (AWS CLI) ou o AWS SDK. Para obter mais informações, consulte Exemplo: Usar a API do SageMaker para criar Job de rotulagem de streaming.
Monitorando o trabalho
Você pode chamar DescribeBelingJob após a criação do trabalho. Consulte a seção Usar a API DescribeBelingJob para descrever uma tarefa de rotulagem de streaming no bloco de anotações ground_truth_create_streaming_labeling_job.ipynb .
Verifique se o LabelingJobStatus é InProgress antes de alimentar objetos através do canal SNS. O código a seguir é um exemplo de como você pode usar DescribeBelingJob (usando o AWS Python (Boto3) SDK) para recuperar o status do trabalho de rotulagem:
sagemaker = boto3.client('sagemaker')
sagemaker.describe_labeling_job(LabelingJobName=LABELING_JOB_NAME)['LabelingJobStatus']
Se você especificou o campo opcional s3DataSource.manifests3uri
na solicitação CreateLabelingJob
, os objetos no arquivo do Amazon S3 serão enviados automaticamente aos workers assim que o trabalho de rotulagem for iniciado. O elemento LabelCounters
da resposta à sua solicitação DescribelabelingJob
mostra esses objetos como Unlabeled
inicialmente e, em seguida, HumanLabeled
depois que eles foram anotados e os workers foram enviados seu trabalho.
O Amazon SQS oferece uma fila hospedada segura, durável e disponível. Os trabalhos de rotulagem de streaming criam uma fila SQS na sua conta. Você pode verificar a fila pelo nome GroundTruth-labeling_job_name
. O código a seguir é um exemplo de como você pode usar GetQueueUrl (usando o AWS Python (Boto3) SDK) para recuperar o status do trabalho de rotulagem:
sqs = boto3.client('sqs')
response = sqs.get_queue_url(QueueName='GroundTruth-' + LABELING_JOB_NAME.lower())
Envio de objetos para um trabalho em andamento
Após o início do trabalho de rotulagem, os objetos de dados podem ser alimentados por meio do console ou da API do Amazon SNS. Para obter mais informações, consulte Enviar objetos de dados usando o Amazon SNS. O formato da mensagem SNS que você usa para enviar um objeto de dados para o trabalho de rotulagem é o mesmo que o formato de manifesto aumentado.
Por exemplo, para enviar um novo objeto de imagem para um trabalho de rotulagem de classificação de imagem, sua mensagem pode parecer semelhante à seguinte:
{"source-ref»: «s3: //awsexamplebucket/example-image.jpg"}
Se você criar um trabalho de rotulagem baseado em texto, sua solicitação poderá parecer semelhante à seguinte:
{"source»: «Lorem ipsum dolor sit amet"}
Publicação de uma solicitação no console do Amazon SNS
Para publicar uma solicitação em seu trabalho de rotulagem no console do Amazon SNS, execute as seguintes etapas:
- No console do Amazon SNS, escolha Tópicos.
- Escolha o tópico de entrada.
- Escolha Publicar mensagem.
Publicar uma solicitação usando a operação Publicar API
Você pode usar a operação de API do Amazon SNS Publish para enviar uma solicitação para rotular um objeto de dados para seu trabalho de rotulagem de streaming por meio de um AWS SDK compatível.
O jupyter notebookdemonstra como publicar uma mensagem usando esta operação.
O código a seguir é um exemplo de como você pode usar o AWS Python (Boto3) SDK para enviar uma solicitação para Publicar
. Substitua INPUT_TOPIC_ARN pelo ARN do tópico de entrada e substitua REQUEST por uma solicitação semelhante aos exemplos anteriores.
sns = boto3.client ('sns') published_message = sns.publish (TopicArn=INPUT_TOPIC_ARN, Mensaje=SOLICITUD)
Depois de publicar uma solicitação, uma chamada para DescribelabelingJob mostra Unlabeled incrementada por 1:
"LabelCounters" : {
'TotalLabeled': 0,
'HumanLabeled': 0,
'MachineLabeled': 0,
'FailedNonRetryableError': 0,
'Unlabeled': 1
}
Visualizando a tarefa do trabalhador
Se você usou uma força de trabalho privada e se tornou um trabalhador na equipe de trabalho usada para criar o trabalho de rotulagem, poderá navegar até o portal do trabalhador para visualizar a tarefa do trabalhador. Você pode encontrar o link do portal do trabalhador na página Rotulagem de forças de trabalho no console Ground Truth (no console do Amazon SageMaker) na região usada para iniciar o trabalho de rotulagem. Este link também está incluído no e-mail de boas-vindas enviado para você quando você foi adicionado à equipe de trabalho.
Quando um worker envia um objeto de dados depois de rotulá-lo, ele é enviado para o tópico de saída. Além disso, os resultados são adicionados periodicamente ao bucket de saída do S3 especificado ao criar seu trabalho de rotulagem no S3OutputPath
.
Parando o trabalho de rotulagem
Você pode usar trabalhos de rotulagem de streaming em fluxos de trabalho de longa duração e eles são executados até que você os impeça. Isso permite que você alimente continuamente objetos para o trabalho de rotulagem.
No entanto, se o sistema detectar que nenhum objeto está disponível no sistema para ser rotulado e estiver ocioso continuamente por mais de um certo número de dias, o GroundTruth tentará interromper o trabalho. Para obter mais informações, consulte Interrompendo trabalhos de streaming.
Você pode interromper seu trabalho de rotulagem no console Ground Truth ou usando a operação da API Ground Truth StopLabelingJob. Para usar o console, execute as seguintes etapas:
- No console do Amazon SageMaker, escolha Ground Truth. Certifique-se de usar a Região que você usou para iniciar seu trabalho de rotulagem.
- Selecione o trabalho de rotulagem que deseja interromper.
- No menu suspenso Ações , escolha Parar trabalho .
As células finais do notebook demonstram como você pode interromper um trabalho de rotulagem usando o AWS Python (Boto3) SDK:
sagemaker = boto3.client('sagemaker')
sagemaker.stop_labeling_job(LabelingJobName=LABELING_JOB_NAME)
Quando um trabalho de rotulagem foi interrompido com êxito, seu status é exibido como Parado
.
Outras características dos trabalhos de rotulagem de streaming
As seções a seguir abordam recursos adicionais dos trabalhos de rotulagem de streaming: enviar objetos para o trabalho de rotulagem soltando-os em um bucket do S3 e encadeando vários trabalhos de rotulagem juntos.
Enviando objetos de dados para o trabalho de rotulagem usando um bucket do S3
Você pode configurar seus buckets do S3 para publicar automaticamente solicitações de rotulagem de dados no tópico de entrada do SNS sempre que um objeto de dados for adicionado ao bucket. Com essa configuração, você pode soltar objetos no bucket do S3 e eles são enviados automaticamente para o trabalho de rotulagem de streaming.
Para configurar um bucket do S3 para enviar automaticamente objetos de dados para o tópico de entrada do SNS, você precisa adicionar uma política de acesso ao tópico de entrada para permitir que o Amazon S3 adicione um evento a ele. O código a seguir ilustra o tipo de política a ser anexada ao seu tópico ARN (substituir 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 seu bucket do S3 para enviar objetos de dados para o trabalho de rotulagem de streaming no console do Amazon S3, execute as seguintes etapas:
- No console do Amazon S3, escolha o bucket que você deseja usar para enviar objetos de dados para o trabalho de rotulagem.
- Na guia Propriedades , em Configurações avançadas , escolha Eventos .
- Escolha Adicionar notificação.
- Dê um nome à sua notificação.
- Selecione Todos os eventos de criação de objetos.
- Opcionalmente, insira um prefixo se quiser soltar objetos de dados em um prefixo dentro do bucket do S3.
- Se você quiser enviar apenas tipos específicos de objetos de dados para o tópico de entrada do SNS, especifique um sufixo. Por exemplo, para garantir que apenas os arquivos de imagem sejam enviados para o tópico de entrada do SNS, você pode inserir .jpg, .png, .jpeg.
- Do menu suspenso Enviar ao , escolha o tópico SNS .
- Escolha o tópico de entrada do SNS que você usou ou usará para criar seu trabalho de rotulagem.
- Escolha Salvar.
O GIF a seguir demonstra como configurar essa configuração no console do Amazon S3
Encadeamento
Para criar pipelines de rotulagem de dados sofisticados, persistentes e em tempo real que permitem adicionar vários tipos de anotações a objetos de dados, auditar e verificar rótulos e muito mais, você pode encadear vários trabalhos de rotulagem de streaming.
O encadeamento permite que você envie a saída de um trabalho de rotulagem de streaming para outro trabalho de rotulagem de streaming. Por exemplo, os dados de saída do Job 1 podem ser enviados para o Job 2 como entrada, os dados de saída do Job 2 podem fluir para o Job n-1 e os dados do Job n-1 podem fluir para o Job n em tempo real.
Como exemplo de caso de uso, você pode usar o Job 1 para adicionar uma máscara de segmentação semântica a uma sequência de quadros de vídeo. Em seguida, use o Job 2 para adicionar caixas delimitadoras para identificar e localizar objetos de dados em cada quadro. Finalmente, você usa o Job 3 para verificar e ajustar rótulos conforme necessário.
Para configurar isso, use o tópico SNS de saída do Job 1 como o tópico SNS de entrada do Job 2. Da mesma forma, você usa o tópico SNS de saída do Job 2 como o tópico SNS de entrada do Job 3, e assim por diante. O diagrama a seguir ilustra essa arquitetura.
Depois de configurar seus trabalhos dessa maneira, um objeto de dados que flui pelo Job 1 faz seu caminho para o Job 2 automaticamente depois de passar pelo Job 1. A seguir estão algumas possibilidades de encadeamento com dois trabalhos:
- Especifique diferentes nomes de atributo de rótulo para trabalhos com um tipo de tarefa semelhante. Por exemplo, o Job 1 (dados de rótulo) se encadeia para o Job 2 (ajustar, revisar e verificar anotações do Job 1).
- Use nomes de atributo de rótulo diferentes para trabalhos com diferentes tipos de tarefa. Por exemplo, o Trabalho 1 (rotulagem para classificação de imagem) se encadeia para o Job 2 (rotulagem para detecção de objetos).
- Use os mesmos nomes de atributo de rótulo para ambos os trabalhos. Por exemplo, o Job 1 (rotulagem) se encadeia para o Job 2 (dados parciais rotulados do Job 1 fluem para o Job 2).
Você pode usar o notebook ground_truth_create_chained_streaming_labeling_job.ipynb para aprender a encadear dois trabalhos de rotulagem de streaming. Este exemplo demonstra o primeiro caso de uso na lista anterior (nomes de atributo de rótulo diferentes para trabalhos com tipos de tarefa semelhantes). Quando usado no modo padrão, este notebook encadeia uma tarefa de caixa delimitadora (detecção de objeto) (Job 1) a um trabalho de auditoria de caixa delimitadora. Todas as caixas delimitadoras anotadas no Trabalho 1 podem ser ajustadas no Job 2 em tempo real. Você pode generalizar esse caso de uso para configurar fluxos de trabalho de verificação de qualidade, nos quais uma equipe de trabalho analisa as anotações de outra equipe de trabalho.
Você também pode usar o notebook para configurar qualquer tipo de trabalhos de streaming encadeados para alcançar várias configurações de encadeamento de trabalho.
Conclusão
Este post aborda os benefícios de usar o recurso de streaming do Ground Truth e como criar e encadear trabalhos de rotulagem de streaming. Este post apenas arranha a superfície do que o streaming do Ground Truth pode fazer.
Para começar, use um dos notebooks incluídos nesta publicação para iniciar e experimentar trabalhos de rotulagem de streaming ou consulte Criar um trabalho de rotulagem de streaming.
Deixe-nos saber o que você pensa nos comentários.
Este artígo foi traduzido do Blog de AWS em Inglês
Sobre os autores
Priyanka Gopalakrishna é engenheira de software da Amazon AI. Seu foco é resolver problemas de rotulagem usando aprendizado de máquina e criação de soluções de IA escaláveis usando sistemas distribuídos.
Talia Chopra é escritora técnica na AWS especializada em aprendizado de máquina e inteligência artificial. Ela trabalha com várias equipes na AWS para criar documentação técnica e tutoriais para clientes que usam o Amazon SageMaker, MXNet e AutoGluon.
Revisor