Dimensione o treinamento e a inferência de milhares de modelos de ML com o Amazon SageMaker | Amazon Web Services

Dimensione o treinamento e a inferência de milhares de modelos de ML com o Amazon SageMaker | Amazon Web Services

À medida que o aprendizado de máquina (ML) se torna cada vez mais predominante em uma ampla gama de setores, as organizações estão descobrindo a necessidade de treinar e atender a um grande número de modelos de ML para atender às diversas necessidades de seus clientes. Para provedores de software como serviço (SaaS) em particular, a capacidade de treinar e atender a milhares de modelos de maneira eficiente e econômica é crucial para se manter competitivo em um mercado em rápida evolução.

Treinar e atender milhares de modelos requer uma infraestrutura robusta e escalável, que é onde Amazon Sage Maker pode ajudar. O SageMaker é uma plataforma totalmente gerenciada que permite que desenvolvedores e cientistas de dados criem, treinem e implantem modelos de ML rapidamente, além de oferecer os benefícios econômicos do uso da infraestrutura da Nuvem AWS.

Nesta postagem, exploramos como você pode usar os recursos do SageMaker, incluindo Processamento do Amazon SageMaker, trabalhos de treinamento do SageMaker e terminais multimodelo (MMEs) do SageMaker, para treinar e atender a milhares de modelos de maneira econômica. Para começar com a solução descrita, você pode consultar o notebook que acompanha em GitHub.

Caso de uso: previsão de energia

Para esta postagem, assumimos o papel de uma empresa ISV que ajuda seus clientes a se tornarem mais sustentáveis, rastreando seu consumo de energia e fornecendo previsões. Nossa empresa tem 1,000 clientes que desejam entender melhor seu uso de energia e tomar decisões informadas sobre como reduzir seu impacto ambiental. Para fazer isso, usamos um conjunto de dados sintético e treinamos um modelo de ML com base em Profeta para cada cliente fazer previsões de consumo de energia. Com o SageMaker, podemos treinar e atender com eficiência esses 1,000 modelos, fornecendo aos nossos clientes informações precisas e acionáveis ​​sobre seu uso de energia.

Existem três recursos no conjunto de dados gerado:

  • Identificação do Cliente – Este é um identificador inteiro para cada cliente, variando de 0 a 999.
  • timestamp – Este é um valor de data/hora que indica a hora em que o consumo de energia foi medido. Os timestamps são gerados aleatoriamente entre as datas inicial e final especificadas no código.
  • consumo – Este é um valor flutuante que indica o consumo de energia, medido em alguma unidade arbitrária. Os valores de consumo são gerados aleatoriamente entre 0–1,000 com sazonalidade senoidal.

Visão geral da solução

Para treinar e atender com eficiência milhares de modelos de ML, podemos usar os seguintes recursos do SageMaker:

  • Processamento SageMaker – O SageMaker Processing é um serviço de preparação de dados totalmente gerenciado que permite executar tarefas de processamento de dados e avaliação de modelo em seus dados de entrada. Você pode usar o SageMaker Processing para transformar dados brutos no formato necessário para treinamento e inferência, bem como para executar avaliações on-line e em lote de seus modelos.
  • Trabalhos de treinamento do SageMaker – Você pode usar trabalhos de treinamento do SageMaker para treinar modelos em uma variedade de algoritmos e tipos de dados de entrada e especificar os recursos de computação necessários para o treinamento.
  • MMEs SageMaker – Os endpoints de vários modelos permitem hospedar vários modelos em um único endpoint, o que facilita a exibição de previsões de vários modelos usando uma única API. Os MMEs do SageMaker podem economizar tempo e recursos reduzindo o número de endpoints necessários para fornecer previsões de vários modelos. Os MMEs oferecem suporte à hospedagem de modelos baseados em CPU e GPU. Observe que em nosso cenário utilizamos 1,000 modelos, mas isso não é uma limitação do serviço em si.

O diagrama a seguir ilustra a arquitetura da solução.

arquitetura que exibe o processo descrito

O fluxo de trabalho inclui as seguintes etapas:

  1. Usamos o SageMaker Processing para pré-processar dados e criar um único arquivo CSV por cliente e armazená-lo em Serviço de armazenamento simples da Amazon (Amazônia S3).
  2. O trabalho de treinamento do SageMaker é configurado para ler a saída do trabalho de processamento do SageMaker e distribuí-lo de forma alternada para as instâncias de treinamento. Observe que isso também pode ser obtido com Pipelines Amazon SageMaker.
  3. Os artefatos do modelo são armazenados no Amazon S3 pelo trabalho de treinamento e são fornecidos diretamente do SageMaker MME.

Escale o treinamento para milhares de modelos

Escalar o treinamento de milhares de modelos é possível através do distribution parâmetro do Entrada de treinamento class no SageMaker Python SDK, que permite especificar como os dados são distribuídos em várias instâncias de treinamento para um trabalho de treinamento. Existem três opções de distribution parâmetro: FullyReplicated, ShardedByS3Key e ShardedByRecord. O ShardedByS3Key A opção significa que os dados de treinamento são fragmentados pela chave de objeto S3, com cada instância de treinamento recebendo um subconjunto exclusivo dos dados, evitando a duplicação. Depois que os dados são copiados pelo SageMaker para os contêineres de treinamento, podemos ler a estrutura de pastas e arquivos para treinar um modelo exclusivo por arquivo de cliente. A seguir, um trecho de código de exemplo:

# Assume that the training data is in an S3 bucket already, pass the parent folder
s3_input_train = sagemaker.inputs.TrainingInput( s3_data='s3://my-bucket/customer_data', distribution='ShardedByS3Key'
) # Create a SageMaker estimator and set the training input
estimator = sagemaker.estimator.Estimator(...)
estimator.fit(inputs=s3_input_train)

Cada trabalho de treinamento do SageMaker armazena o modelo salvo no /opt/ml/model pasta do contêiner de treinamento antes de arquivá-lo em um model.tar.gz arquivo e, em seguida, carrega-o no Amazon S3 após a conclusão do trabalho de treinamento. Os usuários avançados também podem automatizar esse processo com o SageMaker Pipelines. Ao armazenar vários modelos por meio do mesmo trabalho de treinamento, o SageMaker cria um único model.tar.gz arquivo contendo todos os modelos treinados. Isso significaria que, para atender ao modelo, precisaríamos primeiro descompactar o arquivo. Para evitar isso, usamos pontos de controle para salvar o estado de modelos individuais. O SageMaker fornece a funcionalidade de copiar pontos de verificação criados durante o trabalho de treinamento para o Amazon S3. Aqui, os pontos de verificação precisam ser salvos em um local pré-especificado, sendo o padrão /opt/ml/checkpoints. Esses pontos de verificação podem ser usados ​​para retomar o treinamento posteriormente ou como um modelo para implantar em um endpoint. Para obter um resumo de alto nível de como a plataforma de treinamento SageMaker gerencia caminhos de armazenamento para conjuntos de dados de treinamento, artefatos de modelo, pontos de verificação e saídas entre armazenamento em Nuvem AWS e trabalhos de treinamento no SageMaker, consulte Pastas de armazenamento de treinamento do Amazon SageMaker para conjuntos de dados de treinamento, pontos de verificação, artefatos de modelo e saídas.

O código a seguir usa um fictício model.save() função dentro do train.py script contendo a lógica de treinamento:

import tarfile
import boto3
import os [ ... argument parsing ... ] for customer in os.list_dir(args.input_path): # Read data locally within the Training job df = pd.read_csv(os.path.join(args.input_path, customer, 'data.csv')) # Define and train the model model = MyModel() model.fit(df) # Save model to output directory with open(os.path.join(output_dir, 'model.json'), 'w') as fout: fout.write(model_to_json(model)) # Create the model.tar.gz archive containing the model and the training script with tarfile.open(os.path.join(output_dir, '{customer}.tar.gz'), "w:gz") as tar: tar.add(os.path.join(output_dir, 'model.json'), "model.json") tar.add(os.path.join(args.code_dir, "training.py"), "training.py")

Inferência de escala para milhares de modelos com SageMaker MMEs

Os MMEs do SageMaker permitem atender a vários modelos ao mesmo tempo, criando uma configuração de endpoint que inclui uma lista de todos os modelos a serem atendidos e, em seguida, criando um endpoint usando essa configuração de endpoint. Não há necessidade de reimplantar o endpoint toda vez que você adicionar um novo modelo porque o endpoint atenderá automaticamente a todos os modelos armazenados nos caminhos S3 especificados. Isso é conseguido com Servidor de vários modelos (MMS), uma estrutura de código aberto para atender a modelos de ML que podem ser instalados em contêineres para fornecer o front-end que atende aos requisitos das novas APIs de contêiner MME. Além disso, você pode usar outros servidores de modelo, incluindo TorchServe e Tritão. O MMS pode ser instalado em seu contêiner personalizado por meio do Kit de ferramentas de inferência do SageMaker. Para saber mais sobre como configurar seu Dockerfile para incluir MMS e usá-lo para servir seus modelos, consulte Crie seu próprio contêiner para endpoints multimodelo do SageMaker.

O trecho de código a seguir mostra como criar um MME usando o SageMaker Python SDK:

from sagemaker.multidatamodel import MultiDataModel # Create the MultiDataModel definition
multimodel = MultiDataModel( name='customer-models', model_data_prefix=f's3://{bucket}/scaling-thousand-models/models', model=your_model,
) # Deploy on a real-time endpoint
predictor = multimodel.deploy( initial_instance_count=1, instance_type='ml.c5.xlarge',
)

Quando o MME está ativo, podemos invocá-lo para gerar previsões. As invocações podem ser feitas em qualquer AWS SDK, bem como com o SageMaker Python SDK, conforme mostrado no trecho de código a seguir:

predictor.predict( data='{"period": 7}', # the payload, in this case JSON target_model='{customer}.tar.gz' # the name of the target model
)

Ao chamar um modelo, o modelo é inicialmente carregado do Amazon S3 na instância, o que pode resultar em uma inicialização a frio ao chamar um novo modelo. Os modelos usados ​​com frequência são armazenados em cache na memória e no disco para fornecer inferência de baixa latência.

Conclusão

O SageMaker é uma plataforma poderosa e econômica para treinamento e atendimento a milhares de modelos de ML. Seus recursos, incluindo SageMaker Processing, trabalhos de treinamento e MMEs, permitem que as organizações treinem e atendam com eficiência a milhares de modelos em escala, ao mesmo tempo em que se beneficiam das vantagens de economia de custos do uso da infraestrutura da Nuvem AWS. Para saber mais sobre como usar o SageMaker para treinar e servir milhares de modelos, consulte Dados do processo, Treinar um modelo com o Amazon SageMaker e Hospede vários modelos em um contêiner atrás de um endpoint.


Sobre os autores

Foto de DavideDavide Gallitelli é um Arquiteto de Soluções Especialista para AI/ML na região EMEA. Ele está baseado em Bruxelas e trabalha em estreita colaboração com clientes em todo o Benelux. Ele é desenvolvedor desde muito jovem, começando a codificar aos 7 anos de idade. Ele começou a aprender IA/ML na universidade e se apaixonou por isso desde então.

Foto de MauritsMaurício de Groot é arquiteto de soluções da Amazon Web Services, com sede em Amsterdã. Ele gosta de trabalhar em tópicos relacionados ao aprendizado de máquina e tem predileção por startups. Em seu tempo livre, ele gosta de esquiar e jogar squash.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS