Hospedar vários modelos em um contêiner atrás de um endpoint - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Hospedar vários modelos em um contêiner atrás de um endpoint

Os endpoints de vários modelos fornecem uma solução escalável e econômica para a implantação de um grande número de modelos. Eles melhoram a utilização do endpoint compartilhando a mesma frota de recursos e contêiner de serviço para hospedar todos os seus modelos. Isso reduz os custos de hospedagem, melhorando a utilização do endpoint em comparação com o uso de endpoints de modelo único. Também reduz a sobrecarga de implantação porque SageMaker a Amazon gerencia o carregamento de modelos na memória e a escalabilidade deles com base nos padrões de tráfego para seu endpoint.

O diagrama a seguir mostra como os endpoints de vários modelos funcionam em comparação com os endpoints de modelo único.

Diagrama que mostra como os endpoints multimodelo e como os endpoints de modelo único hospedam os modelos.

Os endpoints de vários modelos são ideais para hospedar um grande número de modelos que usam a mesma framework de ML em um contêiner de serviço compartilhado. Se você tem uma combinação de modelos acessados com frequência e modelos acessados com pouca frequência, um endpoint multimodelo pode servir eficientemente esse tráfego com menos recursos e maior economia de custos. Sua aplicação deve ser tolerante a penalidades de latência ocasionais relacionadas à inicialização a frio que ocorrem ao chamar modelos de uso pouco frequente.

Os endpoints multimodelo oferecem suporte à hospedagem CPU e aos modelos GPU suportados. Ao usar modelos GPU apoiados, você pode reduzir os custos de implantação do modelo por meio do aumento do uso do endpoint e de suas instâncias computacionais aceleradas subjacentes.

Os endpoints de vários modelos permitem compartilhar o tempo de recursos de memória entre seus modelos. Isso funciona melhor quando os modelos são muito semelhantes em tamanho e latência de invocação. Quando for o caso, os endpoints de vários modelos podem efetivamente usar instâncias em todos os modelos. Se você tiver modelos que tenham transações por segundo (TPS) ou requisitos de latência significativamente maiores, recomendamos hospedá-los em endpoints dedicados.

Você pode usar endpoints de vários modelos com os seguintes recursos:

Você não pode usar multi-model-enabled contêineres com o Amazon Elastic Inference.

Você pode usar o console AWS SDK for Python (Boto) ou o SageMaker console para criar um endpoint multimodelo. Para endpoints multimodelo CPU suportados, você pode criar seu endpoint com contêineres personalizados integrando a biblioteca Multi Model Server.

Algoritmos, frameworks e instâncias compatíveis

Para obter informações sobre os algoritmos, frameworks e tipos de instância que você pode usar com endpoints multi-modelo, consulte as seguintes seções.

Algoritmos, estruturas e instâncias compatíveis para endpoints de vários modelos usando instâncias apoiadas CPU

Os contêineres de inferência para os seguintes algoritmos e frameworks oferecem suporte a endpoints de vários modelos:

Para usar qualquer outra estrutura ou algoritmo, use o kit de ferramentas de SageMaker inferência para criar um contêiner que ofereça suporte a endpoints de vários modelos. Para ter mais informações, consulte Crie seu próprio contêiner para endpoints SageMaker de vários modelos.

Os endpoints de vários modelos oferecem suporte a todos os tipos de CPU instância.

Algoritmos, estruturas e instâncias compatíveis para endpoints de vários modelos usando instâncias apoiadas GPU

A hospedagem de vários modelos com GPU suporte em endpoints de vários modelos é suportada pelo servidor SageMaker Triton Inference. Isso suporta todas as principais estruturas de inferência, como® NVIDIA TensorRT™,,, MXNet Python,, PyTorch, scikit-learn, Open ONNXXGBoost, C++ personalizado e muito mais. RandomForest VINO

Para utilizar qualquer outro framework ou algoritmo, você pode usar o backend Triton para Python ou C++ para escrever a lógica do seu modelo e servir qualquer modelo personalizado. Após ter o servidor pronto, você pode começar a implantar centenas de modelos de aprendizado profundo por trás de um único endpoint.

Os endpoints multimodelo oferecem suporte aos seguintes tipos de GPU instância:

Família de instâncias Tipo de instância vCPUs GiB de memória por v CPU GPUs GPUmemória

p2

ml.p2.xlarge

4

15.25

1

12

p3

ml.p3.2xlarge

8

7,62

1

16

g5

ml.g5.xlarge

4

4

1

24

g5

ml.g5.2xlarge

8

4

1

24

g5

ml.g5.4xlarge

16

4

1

24

g5

ml.g5.8xlarge

32

4

1

24

g5

ml.g5.16xlarge

64

4

1

24

g4dn

ml.g4dn.xlarge

4

4

1

16

g4dn

ml.g4dn.2xlarge

8

4

1

16

g4dn

ml.g4dn.4xlarge

16

4

1

16

g4dn

ml.g4dn.8xlarge

32

4

1

16

g4dn

ml.g4dn.16xlarge

64

4

1

16

Cadernos de exemplos para endpoints de vários modelos

Para aprender mais sobre como usar endpoints multi-modelo, você pode experimentar os seguintes cadernos de exemplo:

Para obter instruções sobre como criar e acessar instâncias do notebook Jupyter que você pode usar para executar os exemplos anteriores SageMaker, consulte. Instâncias do Amazon SageMaker Notebook Depois de criar uma instância do notebook e abri-la, escolha a guia SageMaker Exemplos para ver uma lista de todas as SageMaker amostras. Os notebooks de terminais multimodelo estão localizados na seção. ADVANCEDFUNCTIONALITY Para abrir um caderno, escolha sua guia Use (Uso) e depois escolha Create copy (Criar cópia).

Para obter mais informações sobre casos de uso para endpoints de vários modelos, consulte os seguintes blogs e recursos:

Como funcionam os endpoints de vários modelos

SageMaker gerencia o ciclo de vida dos modelos hospedados em terminais de vários modelos na memória do contêiner. Em vez de baixar todos os modelos de um bucket do Amazon S3 para o contêiner ao criar o endpoint, os carrega SageMaker dinamicamente e os armazena em cache ao invocá-los. Quando SageMaker recebe uma solicitação de invocação para um modelo específico, ele faz o seguinte:

  1. Roteia a solicitação para uma instância por trás do endpoint.

  2. Faz download do modelo do bucket do S3 para o volume de armazenamento dessa instância.

  3. Carrega o modelo na memória do contêiner (CPUouGPU, dependendo se você tem CPU ou tem instâncias de GPU backup) nessa instância de computação acelerada. Se o modelo já estiver carregado na memória do contêiner, a invocação será mais rápida porque SageMaker não é necessário baixá-lo e carregá-lo.

SageMaker continua roteando as solicitações de um modelo para a instância em que o modelo já está carregado. No entanto, se o modelo receber muitas solicitações de invocação e houver instâncias adicionais para o endpoint multimodelo, SageMaker encaminhará algumas solicitações para outra instância para acomodar o tráfego. Se o modelo ainda não estiver carregado na segunda instância, o modelo será obtido por download no volume de armazenamento dessa instância e carregado na memória do contêiner.

Quando a utilização da memória de uma instância é alta e SageMaker precisa carregar outro modelo na memória, ela descarrega modelos não utilizados do contêiner dessa instância para garantir que haja memória suficiente para carregar o modelo. Os modelos que são descarregados permanecem no volume de armazenamento da instância e podem ser carregados na memória do contêiner mais tarde sem serem obtidos por download novamente do bucket do S3. Se o volume de armazenamento da instância atingir sua capacidade, SageMaker excluirá todos os modelos não utilizados do volume de armazenamento.

Para excluir um modelo, pare de enviar solicitações e exclua-o do bucket do S3. SageMaker fornece capacidade de endpoint multimodelo em um contêiner de serviço. Adicionar modelos e excluí-los de um endpoint de vários modelos não requer a atualização do endpoint propriamente dito. Para adicionar um modelo, faça upload dele para o bucket do S3 e comece a invocá-lo. Você não precisa de alterações de código para usá-lo.

nota

Quando você atualiza um endpoint multi-modelo, as solicitações de invocação inicial no endpoint podem apresentar latências mais altas, à medida que o Smart Routing em endpoints de vários modelos se adapta ao padrão de tráfego. No entanto, depois que aprende seu padrão de tráfego, você pode experimentar baixas latências nos modelos usados com mais frequência. Modelos usados com menos frequência podem incorrer em algumas latências de inicialização a frio, pois os modelos são carregados dinamicamente em uma instância.

Definindo o comportamento de armazenamento em SageMaker cache do modelo de endpoint multimodelo

Por padrão, os endpoints de vários modelos armazenam em cache os modelos usados com frequência na memória (CPUouGPU, dependendo se você tem CPU ou tem instâncias de GPU backup) e em disco para fornecer inferência de baixa latência. Os modelos em cache são descarregados e/ou excluídos do disco somente quando um contêiner fica sem memória ou espaço em disco para acomodar um modelo recém-direcionado.

Você pode alterar o comportamento do armazenamento em cache de um endpoint de vários modelos e habilitar ou desabilitar explicitamente o cache do modelo definindo o parâmetro ModelCacheSetting ao chamar create_model.

Recomendamos definir o valor do parâmetro ModelCacheSetting em Disabled para casos de uso que não se beneficiam do armazenamento em cache do modelo. Por exemplo, quando um grande número de modelos precisa ser servido a partir do endpoint, mas cada modelo é invocado apenas uma vez (ou com pouca frequência). Para esses casos de uso, definir o valor do ModelCacheSetting parâmetro para Disabled permitir maiores transações por segundo (TPS) para invoke_endpoint solicitações em comparação com o modo de cache padrão. Mais alto TPS nesses casos de uso é porque SageMaker ocorre o seguinte após a invoke_endpoint solicitação:

  • Descarrega assincronamente o modelo da memória e o exclui do disco imediatamente após ser invocado.

  • Fornece maior simultaneidade para baixar e carregar modelos no contêiner de inferência. CPUTanto GPU para endpoints quanto para endpoints protegidos, a simultaneidade é um fator do número da instância vCPUs do contêiner.

Para obter diretrizes sobre como escolher um tipo de instância de SageMaker ML para um endpoint multimodelo, consulte. Recomendações de instâncias para implantações de endpoint de vários modelos

Recomendações de instâncias para implantações de endpoint de vários modelos

Há vários itens a serem considerados ao selecionar um tipo de instância de SageMaker ML para um endpoint multimodelo:

  • Provisione capacidade suficiente do Amazon Elastic Block Store (AmazonEBS) para todos os modelos que precisam ser atendidos.

  • Equilibre o desempenho (minimize as inicializações a frio) e o custo (não provisione a capacidade da instância além do necessário). Para obter informações sobre o tamanho do volume de armazenamento associado SageMaker a cada tipo de instância de um endpoint e de um endpoint multimodelo, consulte. Hospedar volumes de armazenamento de instâncias

  • Para um contêiner configurado para ser executado no modo MultiModel, o volume de armazenamento provisionado para suas instâncias é maior do que o padrão do modo SingleModel. Isso permite que mais modelos sejam armazenados em cache no volume de armazenamento da instância do que no modo SingleModel.

Ao escolher um tipo SageMaker de instância de ML, considere o seguinte:

  • Atualmente, os endpoints de vários modelos são compatíveis com todos os tipos de CPU instâncias e em tipos de GPU instância única.

  • Para a distribuição de tráfego (padrões de acesso) para os modelos que você deseja hospedar atrás de endpoints de vários modelos, juntamente com o tamanho do modelo (quantos modelos podem ser carregados na memória na instância), tenha em mente as seguintes informações:

    • Pense na quantidade de memória em uma instância como o espaço de cache para os modelos a serem carregados e pense no número vCPUs como o limite de simultaneidade para realizar inferências nos modelos carregados (supondo que a invocação de um modelo esteja vinculada a). CPU

    • Para instâncias CPU apoiadas, o número de vCPUs impactos em suas invocações simultâneas máximas por instância (supondo que a invocação de um modelo esteja vinculada a). CPU Uma quantidade maior de vCPUs permite que você invoque mais modelos exclusivos simultaneamente.

    • Para instâncias com GPU backup, uma quantidade maior de instância e GPU memória permite que você tenha mais modelos carregados e prontos para atender às solicitações de inferência.

    • Para ambas as instâncias CPU e instâncias de GPU backup, tenha alguma memória “vazia” disponível para que os modelos não utilizados possam ser descarregados, especialmente para endpoints de vários modelos com várias instâncias. Se uma instância ou zona de disponibilidade falhar, os modelos nessas instâncias serão redirecionados para outras instâncias por trás do endpoint.

  • Determine a sua tolerância aos tempos de carregamento/download:

    • As famílias do tipo de instância d (por exemplo, m5d, c5d ou r5d) e g5s vêm com uma NVMe (memória expressa não volátil)SSD, que oferece alto desempenho de E/S e pode reduzir o tempo necessário para baixar modelos para o volume de armazenamento e para que o contêiner carregue o modelo do volume de armazenamento.

    • Como os tipos de instância d e g5 vêm com um NVMe SSD armazenamento, SageMaker não anexa um volume de EBS armazenamento da Amazon a essas instâncias de computação de ML que hospedam o endpoint multimodelo. A escalabilidade automática funciona melhor quando os modelos têm tamanhos semelhantes e são homogêneos, ou seja, quando apresentam latência de inferência e requisitos de recursos semelhantes.

Você também pode usar as seguintes orientações para ajudar a otimizar o carregamento de modelos em seus endpoints de vários modelos:

Escolher um tipo de instância que não consiga armazenar todos os modelos de destino na memória

Em alguns casos, você pode optar por reduzir custos escolhendo um tipo de instância que não consiga armazenar todos os modelos de destino na memória de uma só vez. SageMaker descarrega modelos dinamicamente quando fica sem memória para abrir espaço para um modelo recém-direcionado. Para modelos solicitados com pouca frequência, você sacrifica a latência dinâmica de carregamento. Em casos com necessidades de latência mais rigorosas, você pode optar por tipos de instância maiores ou mais instâncias. Investir tempo antecipadamente em testes de desempenho e análise ajuda a garantir implantações bem-sucedidas em produção.

Avaliando as ocorrências no cache do seu modelo

CloudWatch As métricas da Amazon podem ajudar você a avaliar seus modelos. Para obter mais informações sobre métricas que você pode usar com endpoints de vários modelos, consulte CloudWatch Métricas para implantações de endpoints de vários modelos .

Você pode usar a estatística Average da métrica ModelCacheHit para monitorar a proporção de solicitações em que o modelo já está carregado. Você pode usar a estatística SampleCount da métrica ModelUnloadingTime para monitorar o número de solicitações de descarga enviadas ao contêiner durante um período de tempo. Se os modelos estiverem sendo descarregados com muita frequência (um indicador de thrashing, onde os modelos são descarregados e carregados novamente porque há espaço insuficiente no cache para o conjunto de modelos em uso), considere usar um tipo de instância maior com mais memória ou aumentar o número de instâncias por trás do endpoint multimodelo. Para endpoints de vários modelos com várias instâncias, esteja ciente de que um modelo pode ser carregado em mais de 1 instância.