Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Melhore a pesquisa de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker

Muitos de nossos clientes da AWS fornecem pesquisa, análise e inteligência de negócios como um serviço. Esse tipo de pesquisa e inteligência de negócios permite que seus clientes finais fiquem à frente dos mercados e concorrentes, identifiquem oportunidades de crescimento e resolvam problemas de forma proativa. Por exemplo, alguns de nossos clientes do setor de serviços financeiros fazem pesquisas de ações, fundos de hedge e empresas de gestão de investimentos para ajudá-los a entender tendências e identificar estratégias de portfólio. Na indústria da saúde, uma parcela cada vez maior da pesquisa em saúde é agora baseada em informações. Grande parte da pesquisa envolve a análise de dados que foram coletados inicialmente para diagnóstico, tratamento ou outros projetos de pesquisa, e agora estão sendo usados ​​para novos propósitos de pesquisa. Essas formas de pesquisa em saúde levaram à prevenção primária eficaz para evitar novos casos, prevenção secundária para detecção precoce e prevenção para melhor gerenciamento da doença. Os resultados da pesquisa não apenas melhoram a qualidade de vida, mas também ajudam a reduzir as despesas com saúde.

Os clientes tendem a digerir as informações de fontes públicas e privadas. Em seguida, eles aplicam modelos de processamento de linguagem natural (NLP) estabelecidos ou personalizados para resumir e identificar uma tendência e gerar insights com base nessas informações. Os modelos de PNL usados ​​para esses tipos de tarefas de pesquisa lidam com modelos grandes e geralmente envolvem artigos longos a serem resumidos considerando o tamanho do corpus – e endpoints dedicados, que não são otimizados em termos de custo no momento. Esses aplicativos recebem uma explosão de tráfego de entrada em diferentes momentos do dia.

Acreditamos que os clientes se beneficiariam muito com a capacidade de reduzir para zero e aumentar sua capacidade de inferência conforme necessário. Isso otimiza o custo da pesquisa e ainda não compromete a qualidade das inferências. Este post discute como Hugging Face junto com Amazon Sage Maker a inferência assíncrona pode ajudar a conseguir isso.

Você pode criar modelos de resumo de texto com várias estruturas de aprendizado profundo, como TensorFlow, PyTorch e Apache MXNet. Esses modelos normalmente têm uma grande carga útil de entrada de vários documentos de texto de tamanho variável. Modelos avançados de aprendizado profundo exigem pré-processamento intensivo de computação antes da inferência do modelo. Os tempos de processamento podem ser de alguns minutos, o que remove a opção de executar inferência em tempo real passando cargas úteis por uma API HTTP. Em vez disso, você precisa processar cargas úteis de entrada de forma assíncrona de um armazenamento de objetos como Serviço de armazenamento simples da Amazon (Amazon S3) com enfileiramento automático e um limite de simultaneidade predefinido. O sistema deve ser capaz de receber notificações de status e reduzir custos desnecessários limpando recursos quando as tarefas forem concluídas.

O SageMaker ajuda cientistas de dados e desenvolvedores a preparar, criar, treinar e implantar modelos de machine learning (ML) de alta qualidade rapidamente, reunindo um amplo conjunto de recursos criados especificamente para ML. O SageMaker fornece os contêineres de serviço de modelo de código aberto mais avançados para XGBoost (recipiente, SDK), Scikit-Learn (recipiente, SDK), PyTorch (recipiente, SDK), TensorFlow (recipiente, SDK) e Apache MXNet (recipiente, SDK).

O SageMaker oferece quatro opções para implantar modelos de ML treinados para gerar inferências em novos dados.
  1. Inferência em tempo real endpoints são adequados para cargas de trabalho que precisam ser processadas com requisitos de baixa latência na ordem de ms a segundos.
  2. Transformação em lote é ideal para previsões offline em grandes lotes de dados.
  3. Inferência sem servidor do Amazon SageMaker (no modo de visualização e não recomendado para cargas de trabalho de produção até o momento) é uma opção de inferência criada para fins específicos que facilita a implantação e o dimensionamento de modelos de ML. A inferência sem servidor é ideal para cargas de trabalho que têm períodos ociosos entre picos de tráfego e podem tolerar partidas a frio.
  4. Inferência assíncrona endpoints enfileiram solicitações de entrada. Eles são ideais para cargas de trabalho em que os tamanhos das solicitações são grandes (até 1 GB) e os tempos de processamento de inferência são da ordem de minutos (até 15 minutos). A inferência assíncrona permite economizar custos ao dimensionar automaticamente a contagem de instâncias para zero quando não há solicitações a serem processadas.

Visão geral da solução

Neste post, implantamos um Modelo PEGASUS que foi pré-treinado para fazer resumo de texto de Abraçando o rosto para Serviços de alojamento SageMaker. Usamos o modelo como é do Hugging Face para simplificar. No entanto, você pode ajustar o modelo com base em um conjunto de dados personalizado. Você também pode experimentar outros modelos disponíveis no Hub de modelo de rosto de abraço. Também provisionamos um endpoint de inferência assíncrona que hospeda esse modelo, do qual você pode obter previsões.

O manipulador de inferência do endpoint de inferência assíncrona espera um artigo como carga útil de entrada. O texto resumido do artigo é a saída. A saída é armazenada no banco de dados para análise das tendências ou alimentada a jusante para análises adicionais. Essa análise a jusante deriva insights de dados que ajudam na pesquisa.

Demonstramos como os endpoints de inferência assíncrona permitem que você tenha notificações de simultaneidade e conclusão definidas pelo usuário. Configuramos o dimensionamento automático de instâncias atrás do endpoint para reduzir a zero quando o tráfego diminui e dimensionar novamente à medida que a fila de solicitações é preenchida.

Nós também usamos Amazon CloudWatch métricas para monitorar o tamanho da fila, o tempo total de processamento e as chamadas processadas.

No diagrama a seguir, mostramos as etapas envolvidas ao realizar a inferência usando um endpoint de inferência assíncrona.

Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

  1. Nosso pré-treinado PEGASUS O modelo de ML é hospedado primeiro no endpoint de dimensionamento.
  2. O usuário carrega o artigo a ser resumido em um bucket do S3 de entrada.
  3. O endpoint de inferência assíncrona é invocado usando uma API.
  4. Após a conclusão da inferência, o resultado é salvo no bucket S3 de saída.
  5. An Serviço de notificação simples da Amazon (Amazon SNS) é enviada ao usuário notificando-o sobre o sucesso ou falha concluído.

Criar um endpoint de inferência assíncrona

Criamos o endpoint de inferência assíncrona semelhante a um endpoint hospedado em tempo real. As etapas incluem a criação de um modelo do SageMaker, seguido da configuração do endpoint e da implantação do endpoint. A diferença entre os dois tipos de endpoints é que a configuração do endpoint de inferência assíncrona contém um AsyncInferenceConfig seção. Aqui especificamos o caminho de saída do S3 para os resultados da invocação do endpoint e, opcionalmente, incluímos tópicos do SNS para notificações de sucesso e falha. Também especificamos o número máximo de invocações simultâneas por instância, conforme determinado pelo cliente. Veja o seguinte código:

AsyncInferenceConfig={ "OutputConfig": { "S3OutputPath": f"s3://{bucket}/{bucket_prefix}/output", # Optionally specify Amazon SNS topics for notifications "NotificationConfig": { "SuccessTopic": success_topic, "ErrorTopic": error_topic, } }, "ClientConfig": { "MaxConcurrentInvocationsPerInstance": 2 #increase this value up to throughput peak for ideal performance } }

Para obter detalhes sobre a API para criar uma configuração de endpoint para inferência assíncrona, consulte Criar um endpoint de inferência assíncrona.

Invocar o endpoint de inferência assíncrona

A captura de tela a seguir mostra um breve artigo que usamos como nossa carga útil de entrada:
Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

O código a seguir carrega o artigo como um input.json arquivo para o Amazon S3:

sm_session.upload_data( input_location, bucket=sm_session.default_bucket(), key_prefix=prefix, extra_args={"ContentType": "text/plain"})

Usamos o URI do Amazon S3 para o arquivo de carga útil de entrada para invocar o endpoint. O objeto de resposta contém o local de saída no Amazon S3 para recuperar os resultados após a conclusão:

response = sm_runtime.invoke_endpoint_async(EndpointName=endpoint_name, InputLocation=input_1_s3_location)
output_location = response['OutputLocation']

A captura de tela a seguir mostra o resumo pós-saída de exemplo:
Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Para obter detalhes sobre a API para invocar um endpoint de inferência assíncrona, consulte Invocar um endpoint de inferência assíncrona.

Enfileirar as solicitações de invocação com simultaneidade definida pelo usuário

O endpoint de inferência assíncrona enfileira automaticamente as solicitações de invocação. Esta é uma fila totalmente gerenciada com várias métricas de monitoramento e não requer nenhuma configuração adicional. Ele usa o MaxConcurrentInvocationsPerInstance parâmetro na configuração do endpoint anterior para processar novas solicitações da fila após a conclusão das solicitações anteriores. MaxConcurrentInvocationsPerInstance é o número máximo de solicitações simultâneas enviadas pelo cliente SageMaker ao contêiner do modelo. Se nenhum valor for fornecido, o SageMaker escolherá um valor ideal para você.

Instâncias de escalonamento automático no endpoint de inferência assíncrona

Definimos a política de escalonamento automático com capacidade mínima de zero e capacidade máxima de cinco instâncias. Ao contrário dos endpoints hospedados em tempo real, os endpoints de inferência assíncrona oferecem suporte à redução de instâncias para zero, definindo a capacidade mínima para zero. Nós usamos o ApproximateBacklogSizePerInstance métrica para a configuração da política de dimensionamento com uma lista de pendências de fila de destino de cinco por instância para dimensionar ainda mais. Definimos o período de resfriamento para ScaleInCooldown para 120 segundos e o ScaleOutCooldown a 120 segundos. O valor para ApproximateBacklogSizePerInstance é escolhido com base no tráfego e sua sensibilidade à velocidade de escala. Quanto mais rápido você escalar, menor será o custo, mas maior será a probabilidade de você ter que escalar novamente quando novas solicitações chegarem. uma solicitação chega quando você está subdimensionado.

client = boto3.client('application-autoscaling') # Common class representing Application Auto Scaling for SageMaker amongst other services resource_id='endpoint/' + endpoint_name + '/variant/' + 'variant1' # This is the format in which application autoscaling references the endpoint response = client.register_scalable_target(
ServiceNamespace='sagemaker', #
ResourceId=resource_id,
ScalableDimension='sagemaker:variant:DesiredInstanceCount',
MinCapacity=0,
MaxCapacity=5
) response = client.put_scaling_policy(
PolicyName='Invocations-ScalingPolicy',
ServiceNamespace='sagemaker', # The namespace of the AWS service that provides the resource.
ResourceId=resource_id, # Endpoint name
ScalableDimension='sagemaker:variant:DesiredInstanceCount', # SageMaker supports only Instance Count
PolicyType='TargetTrackingScaling', # 'StepScaling'|'TargetTrackingScaling'
TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 5.0, # The target value for the metric. 'CustomizedMetricSpecification': { 'MetricName': 'ApproximateBacklogSizePerInstance', 'Namespace': 'AWS/SageMaker', 'Dimensions': [{'Name': 'EndpointName', 'Value': endpoint_name }], 'Statistic': 'Average',
}, 'ScaleInCooldown': 120, # ScaleInCooldown - The amount of time, in seconds, after a scale-in activity completes before another scale in activity can start. 'ScaleOutCooldown': 120 # ScaleOutCooldown - The amount of time, in seconds, after a scale-out activity completes before another scale out activity can start.
# 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled.
# If the value is true, scale-in is disabled and the target tracking policy won't remove capacity from the scalable resource.
}
)

Para obter detalhes sobre a API para dimensionar automaticamente um endpoint de inferência assíncrona, consulte o Dimensionar automaticamente um endpoint de inferência assíncrona.

Configurar notificações do endpoint de inferência assíncrona

Criamos dois tópicos SNS separados para notificações de sucesso e erro para cada resultado de invocação de endpoint:

sns_client = boto3.client('sns')
response = sns_client.create_topic(Name="Async-Demo-ErrorTopic2")
error_topic = response['TopicArn']
response = sns_client.create_topic(Name="Async-Demo-SuccessTopic2")
success_topic = response['TopicArn']

Outras opções para notificações incluem verificar periodicamente a saída do bucket do S3 ou usar notificações do bucket do S3 para inicializar um AWS Lambda função no upload do arquivo. As notificações do SNS estão incluídas na seção de configuração do endpoint conforme descrito anteriormente.

Para obter detalhes sobre como configurar notificações de um endpoint de inferência assíncrona, consulte Verifique os resultados da previsão.

Monitorar o endpoint de inferência assíncrona

Monitoramos o endpoint de inferência assíncrona com métricas integradas adicionais do CloudWatch específicas para inferência assíncrona. Por exemplo, monitoramos o comprimento da fila em cada instância com ApproximateBacklogSizePerInstance e comprimento total da fila com ApproximateBacklogSize.

Para obter uma lista completa de métricas, consulte Monitorando endpoints de inferência assíncrona.

Podemos otimizar a configuração do endpoint para obter a instância mais econômica com alto desempenho. Por exemplo, podemos usar uma instância com Amazon Elastic Inference ou AWS Inferentia. Também podemos aumentar gradualmente o nível de simultaneidade até o pico de taxa de transferência enquanto ajustamos outros parâmetros do servidor de modelo e do contêiner.

Gráficos do CloudWatch

Simulamos um tráfego de 10,000 solicitações de inferência fluindo ao longo de um período para o endpoint de inferência assíncrona habilitado com a política de dimensionamento automático descrita na seção anterior.

A captura de tela a seguir mostra as métricas da instância antes do início do fluxo de solicitações. Começamos com um endpoint ativo com zero instâncias em execução:
Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

O gráfico a seguir mostra como o BacklogSize e BacklogSizePerInstance as métricas mudam à medida que o escalonamento automático entra em ação e a carga no endpoint é compartilhada por várias instâncias que foram provisionadas como parte do processo de escalonamento automático.
Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Conforme mostrado na captura de tela a seguir, o número de instâncias aumentou à medida que a contagem de inferências aumentou:
Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

A captura de tela a seguir mostra como o escalonamento traz de volta o endpoint ao estado inicial de zero instâncias em execução:
Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

limpar

Depois que todas as solicitações forem concluídas, podemos excluir o endpoint semelhante à exclusão de endpoints hospedados em tempo real. Observe que, se definirmos a capacidade mínima de endpoints de inferência assíncrona como zero, não haverá cobranças de instância após a redução para zero.

Se você habilitou o dimensionamento automático para seu endpoint, certifique-se de cancelar o registro do endpoint como um destino escalável antes de excluir o endpoint. Para fazer isso, execute o seguinte código:

response = client.deregister_scalable_target(ServiceNamespace='sagemaker',ResourceId='resource_id',ScalableDimension='sagemaker:variant:DesiredInstanceCount')

Lembre-se de excluir seu endpoint após o uso, pois você será cobrado pelas instâncias usadas nesta demonstração.

sm_client.delete_endpoint(EndpointName=endpoint_name)

Você também precisa excluir os objetos do S3 e os tópicos do SNS. Se você criou outros recursos da AWS para consumir e agir nas notificações do SNS, também poderá excluí-los.

Conclusão

Neste post, demonstramos como usar o novo recurso de inferência assíncrona do SageMaker para processar uma carga útil de entrada grande típica que faz parte de uma tarefa de sumarização. Para inferência, usamos um modelo do Hugging Face e o implantamos no endpoint de inferência assíncrona. Explicamos os desafios comuns do tráfego intermitente, altos tempos de processamento do modelo e grandes cargas úteis envolvidas na análise de pesquisa. A capacidade inerente do endpoint de inferência assíncrona de gerenciar filas internas, limites de simultaneidade predefinidos, configurar notificações de resposta e reduzir automaticamente para zero nos ajudou a enfrentar esses desafios. O código completo para este exemplo está disponível em GitHub.

Para começar com a inferência assíncrona do SageMaker, confira Inferência assíncrona.


Sobre os autores

Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Dinesh Kumar Subramani é Arquiteto de Soluções Sênior da equipe UKIR SMB, com sede em Edimburgo, Escócia. Ele é especialista em inteligência artificial e aprendizado de máquina. Dinesh gosta de trabalhar com clientes de todos os setores para ajudá-los a resolver seus problemas com os serviços da AWS. Fora do trabalho, ele adora passar tempo com sua família, jogar xadrez e curtir música em todos os gêneros.

Melhore pesquisas de alto valor com os endpoints de inferência assíncrona Hugging Face e Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Raghu Ramesha é arquiteto de soluções de ML da equipe do Amazon SageMaker Service. Ele se concentra em ajudar os clientes a criar, implantar e migrar cargas de trabalho de produção de ML para o SageMaker em escala. Ele é especialista em domínios de aprendizado de máquina, IA e visão computacional e possui mestrado em Ciência da Computação pela UT Dallas. Nos tempos livres gosta de viajar e fotografar.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS