Padrões de hospedagem de modelos no SageMaker: Melhores práticas para testar e atualizar modelos no SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Padrões de hospedagem de modelos no SageMaker: práticas recomendadas para testar e atualizar modelos no SageMaker

Amazon Sage Maker é um serviço totalmente gerenciado que fornece aos desenvolvedores e cientistas de dados a capacidade de criar, treinar e implantar rapidamente modelos de aprendizado de máquina (ML). Com o SageMaker, você pode implantar seus modelos de ML em endpoints hospedados e obter resultados de inferência em tempo real. Você pode visualizar facilmente as métricas de desempenho de seus endpoints em Amazon CloudWatch, dimensionar endpoints automaticamente com base no tráfego e atualize seus modelos em produção sem perder a disponibilidade. O SageMaker oferece uma ampla variedade de opções para implantar modelos de ML para inferência de qualquer uma das seguintes maneiras, dependendo do seu caso de uso:

  • Para previsões síncronas que precisam ser exibidas na ordem de milissegundos, use o SageMaker inferência em tempo real
  • Para cargas de trabalho que têm períodos ociosos entre picos de tráfego e podem tolerar inicializações a frio, use Inferência sem servidor
  • Para solicitações com grandes tamanhos de carga de até 1 GB, longos tempos de processamento (até 15 minutos) e requisitos de latência quase em tempo real (segundos a minutos), use o SageMaker Inferência assíncrona
  • Para obter previsões para um conjunto de dados inteiro, use o SageMaker transformação em lote

A inferência em tempo real é ideal para cargas de trabalho de inferência em que você tem requisitos de tempo real, interativos e de baixa latência. Você implanta seu modelo nos serviços de hospedagem SageMaker e obtém um endpoint que pode ser usado para inferência. Esses endpoints são apoiados por uma infraestrutura totalmente gerenciada e suporte dimensionamento automático. Você pode melhorar a eficiência e o custo combinando vários modelos em um único endpoint usando endpoints multi-modelo or pontos de extremidade de vários contêineres.

Existem certos casos de uso em que você deseja implantar várias variantes do mesmo modelo na produção para avaliar seu desempenho, medir melhorias ou executar testes A/B. Nesses casos, os endpoints multivariados do SageMaker são úteis porque permitem implantar várias variantes de produção de um modelo no mesmo endpoint do SageMaker.

Nesta postagem, discutimos os endpoints multivariados do SageMaker e as práticas recomendadas para otimização.

Comparação das opções de inferência em tempo real do SageMaker

O diagrama a seguir fornece uma visão geral rápida das opções de inferência em tempo real com o SageMaker.

Um endpoint de modelo único permite implantar um modelo em um contêiner hospedado em instâncias dedicadas ou sem servidor para baixa latência e alta taxa de transferência. Você pode criar um modelo e recuperar a Imagem suportada pelo SageMaker para estruturas populares como TensorFlow, PyTorch, Scikit-learn e muito mais. Se você estiver trabalhando com uma estrutura personalizada para seu modelo, também poderá traga seu próprio recipiente que instala suas dependências.

O SageMaker também oferece suporte a opções mais avançadas, como endpoints de vários modelos (MMEs) e endpoints de vários contêineres (MCEs). Os MMEs são úteis quando você está lidando com centenas a dezenas de milhares de modelos e onde você não precisa implantar cada modelo como um endpoint individual. Os MMEs permitem que você hospede vários modelos de maneira econômica e escalável no mesmo endpoint usando um contêiner de serviço compartilhado hospedado em uma instância. A infraestrutura subjacente (contêiner e instância) permanece a mesma, mas os modelos são carregados e descarregados dinamicamente de um local S3 comum, de acordo com o uso e a quantidade de memória disponível no endpoint. Seu aplicativo simplesmente precisa incluir uma chamada de API com o modelo de destino para esse endpoint para obter inferência de baixa latência e alta taxa de transferência. Em vez de pagar por um endpoint separado para cada modelo, você pode hospedar muitos modelos pelo preço de um único endpoint.

Os MCEs permitem executar até 15 contêineres de ML diferentes em um único endpoint e invocá-los de forma independente. Você pode criar esses contêineres de ML em diferentes pilhas de serviço (como estrutura de ML, servidor de modelo e algoritmo) para serem executados no mesmo endpoint para economia de custos. Você pode costurar os recipientes juntos em um pipeline de inferência serial ou chame o contêiner independentemente. Isso pode ser ideal quando você tem vários modelos de ML diferentes com padrões de tráfego diferentes e necessidades de recursos semelhantes. Exemplos de quando utilizar MCEs incluem, mas não estão limitados ao seguinte:

  • Hospedagem de modelos em diferentes estruturas (como TensorFlow, PyTorch e Scikit-learn) que não têm tráfego suficiente para saturar a capacidade total de uma instância
  • Hospedagem de modelos da mesma estrutura com diferentes algoritmos de ML (como recomendações, previsão ou classificação) e funções de manipulador
  • Comparações de arquiteturas semelhantes executadas em diferentes versões de estrutura (como TensorFlow 1.x vs. TensorFlow 2.x) para cenários como testes A/B

Os endpoints multivariados (MVEs) do SageMaker permitem que você teste vários modelos ou versões de modelo por trás do mesmo endpoint usando variantes de produção. Cada variante de produção identifica um modelo de ML e os recursos implantados para hospedar o modelo, como o contêiner de serviço e a instância.

Visão geral dos endpoints multivariados do SageMaker

Nos fluxos de trabalho de ML de produção, cientistas de dados e engenheiros de ML refinam modelos por meio de vários métodos, como retreinamento com base em desvio de dados/modelo/conceito, ajuste de hiperparâmetros, seleção de recursos, seleção de estrutura e muito mais. A realização de testes A/B entre um modelo novo e um modelo antigo com tráfego de produção pode ser uma etapa final eficaz no processo de validação de um novo modelo. No teste A/B, você testa diferentes variantes de seus modelos e compara o desempenho de cada variante em relação uma à outra. Em seguida, você escolhe o modelo de melhor desempenho para substituir o modelo anterior por uma nova versão que oferece melhor desempenho do que a versão anterior. Ao usar variantes de produção, você pode testar esses modelos de ML e diferentes versões de modelo por trás do mesmo endpoint. Você pode treinar esses modelos de ML usando diferentes conjuntos de dados, diferentes algoritmos e estruturas de ML; implementá-los em diferentes tipos de instância; ou qualquer combinação dessas opções. O balanceador de carga conectado ao terminal SageMaker fornece a capacidade de distribuir as solicitações de invocação em várias variantes de produção. Por exemplo, você pode distribuir o tráfego entre variantes de produção especificando a distribuição de tráfego para cada variante ou pode invocar uma variante específica diretamente para cada solicitação.

Você também pode configurar a política de dimensionamento automático para aumentar ou diminuir automaticamente suas variantes com base em métricas como solicitações por segundo.

O diagrama a seguir ilustra como o MVE funciona com mais detalhes.

Terminal multivariado do SageMaker

A implantação de um MVE também é muito simples. Tudo o que você precisa fazer é definir os objetos do modelo com a imagem e os dados do modelo usando o create_model construa a partir do SageMaker Python SDK e defina as configurações de terminal usando production_variant constrói para criar variantes de produção, cada uma com seu próprio modelo diferente e requisitos de recursos (tipo de instância e contagens). Isso permite que você também teste modelos em diferentes tipos de instância. Para implantar, use o endpoint_from_production_variant build para criar o ponto de extremidade.

Durante a criação do terminal, o SageMaker provisiona a instância de hospedagem especificada nas configurações do terminal e baixa o modelo e o contêiner de inferência especificados pela variante de produção para a instância de hospedagem. Se uma resposta bem-sucedida for retornada após iniciar o contêiner e executar uma verificação de integridade com um ping, uma mensagem indicando que a criação do terminal foi concluída será enviada ao usuário. Veja o seguinte código:

sm_session.create_model(
	name=model_name,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url}
	)

sm_session.create_model(
	name=model_name2,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url2 }
	)

variant1 = production_variant(
	model_name=model_name,
	instance_type="ml.c5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant1",
	initial_weight=1
	)

variant2 = production_variant(
	model_name=model_name2,
	instance_type="ml.m5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant2",
	initial_weight=1
	)

sm_session.endpoint_from_production_variants(
	name=endpoint_name,
	production_variants=[variant1,  variant2]
	)

No exemplo anterior, criamos duas variantes, cada uma com seu próprio modelo diferente (elas também podem ter contagens e tipos de instância diferentes). Nós definimos um initial_weight de 1 para ambas as variantes: isso significa que 50% de nossas solicitações vão para Variant1, e os 50% restantes para Variant2. A soma dos pesos em ambas as variantes é 2 e cada variante tem atribuição de peso de 1. Isso significa que cada variante recebe 50% do tráfego total.

Chamar o endpoint é semelhante à construção comum do SageMaker invoke_endpoint; você pode chamar o endpoint diretamente com os dados como carga útil:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload
	)

O SageMaker emite métricas como Latency e Invocations para cada variante no CloudWatch. Para obter uma lista completa de métricas que o SageMaker emite, consulte Monitore o Amazon SageMaker com o Amazon CloudWatch. Você pode consultar o CloudWatch para obter o número de invocações por variante, para ver como as invocações são divididas entre as variantes por padrão.

Para invocar uma versão específica do modelo, especifique uma variante como o TargetVariant na chamada para invoke_endpoint:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload,
	TargetVariant="Variant1"
	)

Você pode avaliar o desempenho de cada variante de produção revisando métricas como precisão, precisão, recall, pontuação F1 e característica/área operacional do receptor sob a curva para cada variante usando Monitor de modelo do Amazon SageMaker. Você pode decidir aumentar o tráfego para o melhor modelo atualizando os pesos atribuídos a cada variante chamando UpdateEndpointWeightsAndCapacity. Isso altera a distribuição de tráfego para suas variantes de produção sem exigir atualizações em seu endpoint. Portanto, em vez de 50% do tráfego da configuração inicial, transferimos 75% do tráfego para Variant2 atribuindo novos pesos a cada variante usando UpdateEndpointWeightsAndCapacities. Veja o seguinte código:

sm.update_endpoint_weights_and_capacities(
	EndpointName=endpoint_name,
	DesiredWeightsAndCapacities=[
	{
		"DesiredWeight": 25,
		"VariantName": variant1["VariantName"]
	},
	{
		"DesiredWeight": 75,
		"VariantName": variant2["VariantName"]
	}
] )

Quando estiver satisfeito com o desempenho de uma variante, você poderá direcionar 100% do tráfego para essa variante. Por exemplo, você pode definir o peso para Variant1 a 0 e o peso para Variant2 para 1. O SageMaker então envia 100% de todas as solicitações de inferência para Variant2. Você pode atualizar com segurança seu endpoint e excluir Variant1 do seu ponto de extremidade. Você também pode continuar testando novos modelos em produção adicionando novas variantes ao seu endpoint. Você também pode configurar esses endpoints para escalar automaticamente com base no tráfego que os endpoints recebem.

Vantagens de endpoints multivariados

Os MVEs do SageMaker permitem que você faça o seguinte:

  • Implante e teste várias variantes de um modelo usando o mesmo endpoint do SageMaker. Isso é útil para testar variações de um modelo em produção. Por exemplo, suponha que você implantou um modelo na produção. Você pode testar uma variação do modelo direcionando uma pequena quantidade de tráfego, digamos 5%, para o novo modelo.
  • Avalie o desempenho do modelo na produção sem interromper o tráfego monitorando as métricas operacionais para cada variante no CloudWatch.
  • Atualize os modelos em produção sem perder a disponibilidade. Você pode modificar um endpoint sem tirar modelos que já estão implantados na produção fora de serviço. Por exemplo, você pode adicionar novas variantes de modelo, atualizar as configurações de instância de computação de ML de variantes de modelo existentes ou alterar a distribuição de tráfego entre variantes de modelo. Para mais informações, veja Ponto final de atualização e UpdateEndpointWeightsAndCapacity.

Desafios ao usar endpoints multivariados

Os MVEs do SageMaker vêm com os seguintes desafios:

  • Esforço de teste de carga – Você precisa colocar uma quantidade razoável de esforço e recursos para testes e comparações de matriz de modelo para cada variante. Para que um teste A/B seja considerado bem-sucedido, você precisa realizar uma análise estatística das métricas coletadas do teste para determinar se há um resultado estatisticamente significativo. Pode se tornar um desafio minimizar a exploração de variantes de baixo desempenho. Você poderia usar o bandido multi-armado técnica de otimização para evitar o envio de tráfego para experimentos que não estão funcionando e otimizar o desempenho durante o teste. Para testes de carga, você também pode explorar Recomendador de inferência do Amazon SageMaker para realizar benchmarks extensos com base nos requisitos de produção para latência e taxa de transferência, padrões de tráfego personalizados e instâncias (até 10) que você selecionar.
  • Acoplamento estreito entre a variante do modelo e o ponto final – Pode se tornar complicado dependendo da frequência de implantação do modelo, porque o endpoint pode acabar em updating status para cada variante de produção que está sendo atualizada. O SageMaker também suporta guarda-corpos de implantação, que você pode usar para alternar facilmente do modelo atual em produção para um novo de maneira controlada. Esta opção apresenta canário e linear modos de mudança de tráfego para que você possa ter controle granular sobre a mudança de tráfego de seu modelo atual para o novo durante o curso da atualização. Com proteções integradas, como retrocessos automáticos, você pode detectar problemas antecipadamente e tomar ações corretivas automaticamente antes que eles causem um impacto significativo na produção.

Práticas recomendadas para endpoints multivariados

Ao hospedar modelos usando SageMaker MVEs, considere o seguinte:

  • O SageMaker é ótimo para testar novos modelos porque você pode implantá-los facilmente em um ambiente de teste A/B e paga apenas pelo que usar. Você é cobrado por hora de instância consumida para cada instância enquanto o endpoint está em execução. Quando terminar seus testes e não estiver mais usando o ponto de extremidade ou as variantes extensivamente, exclua-o para economizar custos. Você sempre pode recriá-lo quando precisar novamente porque o modelo é armazenado em Serviço de armazenamento simples da Amazon (Amazônia S3).
  • Você deve usar o tipo e tamanho de instância ideal para implantar modelos. Atualmente, o SageMaker oferece Instâncias de computação de ML em várias famílias de instâncias. Uma instância de terminal está em execução o tempo todo (enquanto a instância está em serviço). Portanto, selecionar o tipo certo de instância pode ter um impacto significativo no custo total e no desempenho dos modelos de ML. Teste de carga é a prática recomendada para determinar o tipo de instância apropriado e o tamanho da frota, com ou sem dimensionamento automático para seu endpoint ativo, a fim de evitar o provisionamento excessivo e o pagamento extra pela capacidade desnecessária.
  • Você pode monitorar o desempenho do modelo e a utilização de recursos no CloudWatch. Você pode configurar um ProductionVariant usar Dimensionamento automático de aplicativos. Para especificar as métricas e os valores de destino para uma política de escalabilidade, configure uma política de escalabilidade de rastreamento de destino. Você pode usar uma métrica predefinida ou uma métrica personalizada. Para obter mais informações sobre a sintaxe de configuração de política, consulte TargetTrackingScalingPolicyConfiguração. Para obter informações sobre como configurar o dimensionamento automático, consulte Dimensionar automaticamente modelos do Amazon SageMaker. Para definir rapidamente uma política de escalabilidade de rastreamento de destino para uma variante, você pode escolher uma métrica específica do CloudWatch e definir valores limite. Por exemplo, use a métrica SageMakerVariantInvocationsPerInstance para monitorar o número médio de vezes por minuto que cada instância de uma variante é invocada ou usar métrica CPUUtilization para monitorar a soma do trabalho manipulado por uma CPU. O exemplo a seguir usa o SageMakerVariantInvocationsPerInstance métrica predefinida para ajustar o número de instâncias variantes para que cada instância tenha uma InvocationsPerInstance métrica de 70:
{
	"TargetValue": 70.0,
	"PredefinedMetricSpecification":
	{
		"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
	}
}

  • Alterar ou excluir artefatos de modelo ou alterar o código de inferência após a implantação de um modelo produz resultados imprevisíveis. Antes de implantar modelos para produção, é uma boa prática verificar se a hospedagem do modelo no modo local foi bem-sucedida após depurar suficientemente os trechos de código de inferência (como model_fn, input_fn, predict_fn e output_fn) no ambiente de desenvolvimento local, como uma instância de notebook SageMaker ou servidor local. Se você precisar alterar ou excluir artefatos de modelo ou alterar o código de inferência, modifique o terminal fornecendo uma nova configuração de terminal. Depois de fornecer a nova configuração do terminal, você pode alterar ou excluir os artefatos de modelo correspondentes à configuração do terminal antigo.
  • Você pode usar o SageMaker transformação em lote para testar variantes de produção. A transformação em lote é ideal para obter inferências de grandes conjuntos de dados. Você pode criar um trabalho de transformação separado para cada nova variante de modelo e usar um conjunto de dados de validação para testar. Para cada trabalho de transformação, especifique um nome de modelo exclusivo e um local no Amazon S3 para o arquivo de saída. Para analisar os resultados, use logs e métricas do pipeline de inferência.

Conclusão

O SageMaker permite que você faça testes A/B facilmente em modelos de ML em produção, executando várias variantes de produção em um endpoint. Você pode usar os recursos do SageMaker para testar modelos que foram treinados usando diferentes conjuntos de dados de treinamento, hiperparâmetros, algoritmos ou estruturas de ML; como eles funcionam em diferentes tipos de instância; ou uma combinação de todos os itens acima. Você pode fornecer a distribuição de tráfego entre as variantes em um endpoint, e o SageMaker divide o tráfego de inferência para as variantes com base na distribuição especificada. Como alternativa, se você deseja testar modelos para segmentos de clientes específicos, pode especificar a variante que deve processar uma solicitação de inferência fornecendo o TargetVariant header e o SageMaker encaminhará a solicitação para a variante que você especificou. Para obter mais informações sobre o teste A/B, consulte Atualize modelos com segurança na produção.

Referências


Sobre os autores

Padrões de hospedagem de modelos no SageMaker: Melhores práticas para testar e atualizar modelos no SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Deepali Rajale é gerente técnico de contas especialista em AI/ML da Amazon Web Services. Ela trabalha com clientes corporativos fornecendo orientação técnica sobre a implementação de soluções de aprendizado de máquina com as melhores práticas. Em seu tempo livre, ela gosta de fazer caminhadas, filmes e sair com a família e amigos.

Padrões de hospedagem de modelos no SageMaker: Melhores práticas para testar e atualizar modelos no SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Dhawal Patel é Arquiteto Principal de Machine Learning na AWS. Ele trabalhou com organizações que vão desde grandes empresas até startups de médio porte em problemas relacionados à computação distribuída e Inteligência Artificial. Ele se concentra em aprendizado profundo, incluindo domínios de PNL e Visão Computacional. Ele ajuda os clientes a obter inferência de modelo de alto desempenho no SageMaker.

Padrões de hospedagem de modelos no SageMaker: Melhores práticas para testar e atualizar modelos no SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Saurabh Trikande é gerente de produto sênior da Amazon SageMaker Inference. Ele é apaixonado por trabalhar com clientes e motivado pelo objetivo de democratizar o aprendizado de máquina. Ele se concentra nos principais desafios relacionados à implantação de aplicativos de ML complexos, modelos de ML multilocatários, otimizações de custos e à implantação de modelos de aprendizado profundo mais acessíveis. Em seu tempo livre, Saurabh gosta de caminhar, aprender sobre tecnologias inovadoras, seguir o TechCrunch e passar tempo com sua família.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS