Treine usando piscinas aquecidas SageMaker gerenciadas - 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á.

Treine usando piscinas aquecidas SageMaker gerenciadas

SageMaker pools quentes gerenciados permitem que você retenha e reutilize a infraestrutura provisionada após a conclusão de um trabalho de treinamento para reduzir a latência de cargas de trabalho repetitivas, como experimentação iterativa ou execução de vários trabalhos consecutivos. Os trabalhos de treinamento subsequentes que correspondem aos parâmetros especificados são executados na infraestrutura de grupo de aquecimento retido, o que acelera os horários de início ao reduzir o tempo gasto no provisionamento de recursos.

Importante

SageMaker piscinas aquecidas gerenciadas são um recurso faturável. Para ter mais informações, consulte Faturamento.

Como funciona

Para usar pools quentes SageMaker gerenciados e reduzir a latência entre trabalhos de treinamento consecutivos semelhantes, crie um trabalho de treinamento que especifique um KeepAlivePeriodInSeconds valor em seus. ResourceConfig Esse valor representa o período de tempo em segundos para reter os recursos configurados em um grupo de aquecimento para trabalhos de treinamento subsequentes. Se você precisar executar vários trabalhos de treinamento usando configurações semelhantes, poderá reduzir ainda mais a latência e o tempo faturável usando um diretório de cache persistente dedicado para armazenar e reutilizar suas informações em um trabalho diferente.

Ciclo de vida do grupo de alta atividade

  1. Crie um trabalho de treinamento inicial com um valor KeepAlivePeriodInSeconds maior que 0. Quando você executa esse primeiro trabalho de treinamento, isso “inicia a frio” um cluster com tempos de inicialização típicos.

  2. Quando o primeiro trabalho de treinamento é concluído, os recursos provisionados são mantidos ativos em um grupo de aquecimento pelo período especificado no valor KeepAlivePeriodInSeconds. Desde que o cluster esteja íntegro e o grupo de aquecimento esteja dentro do KeepAlivePeriodInSeconds especificado, o status do grupo de aquecimento será Available.

  3. O grupo de aquecimento Available permanece até identificar um trabalho de treinamento correspondente para reutilização ou exceder o KeepAlivePeriodInSeconds especificado e ser encerrado. O tempo máximo permitido para o KeepAlivePeriodInSeconds é de 3.600 segundos (60 minutos). Se o status do grupo de aquecimento for Terminated, esse é o fim do ciclo de vida do grupo de aquecimento.

  4. Se o grupo de aquecimento identificar um segundo trabalho de treinamento com especificações correspondentes, como contagem de instâncias ou tipo de instância, o grupo de aquecimento passará do primeiro trabalho de treinamento para o segundo trabalho de treinamento para reutilização. O status do primeiro trabalho de treinamento em grupo de aquecimento se torna Reused. Este é o fim do ciclo de vida do grupo de aquecimento para o primeiro trabalho de treinamento.

  5. O status do segundo trabalho de treinamento que reutilizou a grupo de aquecimento se torna InUse. Após a conclusão do segundo trabalho de treinamento, o grupo de aquecimento Available tem a KeepAlivePeriodInSeconds duração especificada no segundo trabalho de treinamento. Um grupo de aquecimento pode continuar se movendo para os trabalhos de treinamento correspondentes subsequentes por no máximo 28 dias.

  6. Se o grupo de aquecimento não estiver mais disponível para reutilização, o status da piscina aquecida será Terminated. Os grupos de aquecimento não estão mais disponíveis se forem encerrados por um usuário, para uma atualização de patch ou se excederem o KeepAlivePeriodInSeconds especificado.

Para obter mais informações sobre as opções de status de piscinas aquecidas, consulte WarmPoolStatusa Amazon SageMaker API Reference.

Criação de grupo de aquecimento

Se um trabalho de treinamento inicial for concluído com êxito e tiver um KeepAlivePeriodInSeconds valor maior que 0, será ccriado um grupo de aquecimento. Se você interromper um trabalho de treinamento após o lançamento de um cluster, ainda será mantido um grupo de aquecimento. Se o trabalho de treinamento falhar devido a um erro do algoritmo ou do cliente, ainda será mantido um grupo de aquecimento. Se o trabalho de treinamento falhar por qualquer outro motivo que possa comprometer a integridade do cluster, o grupo de aquecimento não será criado.

Para verificar a criação bem-sucedida do grupo de aquecimento, verifique o status do grupo de aquecimento do seu trabalho de treinamento. Se um grupo de aquecimento for provisionado com sucesso, o status do grupo de aquecimento é Available. Se um grupo de aquecimento não for provisionado com sucesso, o status do grupo de aquecimento é Terminated.

Combinar os trabalhos de treinamento

Para que um grupo de aquecimento persista, deve encontrar um trabalho de treinamento correspondente dentro do tempo especificado no valor KeepAlivePeriodInSeconds. O próximo trabalho de treinamento é compatível se os valores seguintes forem idênticos:

  • RoleArn

  • Valores de ResourceConfig:

    • InstanceCount

    • InstanceType

    • VolumeKmsKeyId

    • VolumeSizeInGB

  • Valores de VpcConfig:

    • SecurityGroupIds

    • Subnets

  • EnableInterContainerTrafficEncryption

  • EnableNetworkIsolation

  • Se você aprovou tags de sessão para seu trabalho de treinamento com EnableSessionTagChaining definido como True no trabalho de treinamentoSessionChainingConfig, um trabalho de treinamento correspondente também deve ser definido True e EnableSessionTagChaining ter chaves de sessão idênticas. Para ter mais informações, consulte Controle de acesso baseado em atributos (ABAC) para treinamento multilocatário.

Todos esses valores devem ser os mesmos para que uma piscina aquecida passe para um trabalho de treinamento subsequente para reutilização.

Duração máxima do grupo de aquecimento

O KeepAlivePeriodInSeconds máximo para um único trabalho de treinamento é de 3.600 segundos (60 minutos) e o tempo máximo em que um cluster de grupo de aquecimento pode continuar executando trabalhos de treinamento consecutivos é de 28 dias.

Cada trabalho de treinamento subsequente também deve especificar um valor de KeepAlivePeriodInSeconds. Quando o grupo de aquecimento passa para a próxima tarefa de treinamento, ela herda o novo valor KeepAlivePeriodInSeconds especificado no trabalho de treinamento ResourceConfig. Dessa forma, você pode manter um grupo de aquecimento passando de um trabalho de treinamento para outro por no máximo 28 dias.

Se KeepAlivePeriodInSeconds não for especificado, o grupo de aquecimento desligará após a conclusão do trabalho de treinamento.

Usando cache persistente

Ao criar uma piscina aquecida, SageMaker monta um diretório especial no volume que persistirá durante todo o ciclo de vida da piscina aquecida. Esse diretório também pode ser usado para armazenar informações que você deseja reutilizar em outro trabalho.

Usar o cache persistente pode reduzir a latência e o tempo faturável em vez de usar apenas grupos de aquecimento para trabalhos que exigem o seguinte:

  • várias interações com configurações semelhantes

  • trabalhos de treinamento incremental

  • otimização de hiperparâmetros

Por exemplo, você pode evitar o download das mesmas dependências do Python em execuções repetidas configurando um diretório de cache pip dentro do diretório de cache persistente. Você é totalmente responsável por gerenciar o conteúdo desse diretório. Veja a seguir exemplos de tipos de informações que você pode colocar no cache persistente para ajudar a reduzir a latência e o tempo faturável.

A localização do cache persistente é /opt/ml/sagemaker/warmpoolcache. A variável de ambiente SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY aponta para a localização do diretório de cache persistente.

O exemplo de código a seguir mostra como configurar um grupo de aquecimento e usar o cache persistente para armazenar suas dependências de pip para uso em um trabalho subsequente. O trabalho subsequente deve ser executado dentro do prazo determinado pelo parâmetrokeep_alive_period_in_seconds.

import sagemakerfrom sagemaker import get_execution_rolefrom sagemaker.tensorflow import TensorFlow # Creates a SageMaker session and gets execution role session = sagemaker.Session() role = get_execution_role() # Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='2.2', py_version='py37', job_name='my-training-job-1', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 1, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, environment={"PIP_CACHE_DIR": "/opt/ml/sagemaker/warmpoolcache/pip"} )

No exemplo de código anterior, o uso do parâmetro ambiente exporta a variável de ambiente PIP_CACHE_DIRECTORY para apontar para o diretório /opt/ml/sagemaker/warmpoolcache/pip. A exportação dessa variável de ambiente mudará o local em que o pip armazena seu cache no novo local. Qualquer diretório, incluindo diretórios aninhados, que você criar dentro do diretório de cache persistente estará disponível para reutilização durante uma execução de treinamento subsequente. No exemplo de código anterior, um diretório chamado pip é alterado para ser o local padrão para armazenar em cache todas as dependências instaladas usando pip.

A localização do cache persistente também pode ser acessada de dentro do seu script de treinamento do Python usando a variável de ambiente, conforme mostrado no exemplo de código a seguir.

import os import shutil if __name__ == '__main__': PERSISTED_DIR = os.environ["SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY"] # create a file to be persisted open(os.path.join(PERSISTED_DIR, "test.txt"), 'a').close() # create a directory to be persisted os.mkdir(os.path.join(PERSISTED_DIR, "test_dir")) # Move a file to be persisted shutil.move("path/of/your/file.txt", PERSISTED_DIR)

Faturamento

SageMaker piscinas aquecidas gerenciadas são um recurso faturável. Recupere o status do grupo de aquecimento do seu trabalho de treinamento para verificar o tempo faturável de seus grupos de aquecimento. Você pode verificar o status do pool aquecido por meio do comando da DescribeTrainingJobAPI Usando o SageMaker console da Amazon ou diretamente por meio dele. Para obter mais informações, consulte WarmPoolStatusa Amazon SageMaker API Reference.

nota

Após o término do tempo especificado pelo parâmetro KeepAlivePeriodInSeconds, o grupo de aquecimento e o cache persistente serão encerrados e o conteúdo será excluído.

Limites de recursos do grupo de grupo de aquecimento

Para começar, você deve primeiro solicitar um aumento do limite de serviço para piscinas aquecidas SageMaker gerenciadas. O limite padrão de recursos para grupos de aquecimento é 0.

Se um trabalho de treinamento for criado com o KeepAlivePeriodInSeconds especificado, mas você não solicitou um aumento no limite do grupo de aquecimento, o grupo de aquecimento não será retido após a conclusão do trabalho de treinamento. Um grupo de aquecimento só é criado se o limite do grupo de aquecimento tiver recursos suficientes. Depois que um grupo de aquecimento é criado, os recursos são liberados quando eles são transferidos para uma tarefa de treinamento correspondente ou se ele KeepAlivePeriodInSeconds expira (se o status do grupo de aquecimento for Reused ou Terminated).

Solicitar um aumento da cota do grupo de aquecimento

Solicite um aumento da cota do pool aquecido usando o console AWS Service Quotas.

nota

Todo o uso de instâncias de pool aquecido conta para seu limite SageMaker de recursos de treinamento. Aumentar o limite de recursos do grupo de aquecimento não aumenta o limite de instâncias, mas aloca um subconjunto do limite de recursos para o treinamento do grupo de aquecimento.

  1. Abra o AWS console do Service Quotas.

  2. No painel de navegação à esquerda, escolha AWS serviços.

  3. Pesquise e escolha a Amazon SageMaker.

  4. Pesquise a palavra-chave warm pool para ver todas as cotas de serviços de grupo de aquecimento disponíveis.

  5. Encontre o tipo de instância para a qual você deseja aumentar sua cota de grupo de aquecimento, selecione a cota de serviço de grupo de aquecimento para esse tipo de instância e escolha Solicitar aumento de cota.

  6. Insira o número do limite de instância solicitado em Alterar valor da cota. O novo valor deve ser maior que o atual valor de cota aplicado.

  7. Escolha Solicitar.

Há um limite quanto ao número de instâncias que é possível reter para cada conta, que é determinado pelo tipo de instância. Você pode verificar seus limites de recursos no console AWS Service Quotas ou diretamente usando o comando CLI list-service-quotas AWS . Para obter mais informações sobre cotas de serviço AWS , consulte Solicitar um aumento de cota no Guia do usuário do Service Quotas.

Você também pode usar a AWS Central de suporte para solicitar um aumento de cota de grupo de aquecimento. Para obter uma lista dos tipos de instância disponíveis de acordo com a região, consulte Amazon SageMaker Pricing e escolha Training na tabela de preços sob demanda.

Como usar piscinas aquecidas SageMaker gerenciadas

Você pode usar pools quentes SageMaker gerenciados por meio do SDK do SageMaker Python, do SageMaker console da Amazon ou das APIs de baixo nível. Opcionalmente, os administradores podem usar a chave de condição sagemaker:KeepAlivePeriod para restringir ainda mais os limites KeepAlivePeriodInSeconds de determinados usuários ou grupos.

Usando o SDK do SageMaker Python

Crie, atualize ou encerre pools quentes usando o SDK do SageMaker Python.

nota

Esse recurso está disponível no SageMaker Python SDK v2.110.0 e versões posteriores.

Criar um grupo de grupo de aquecimento

Para criar um pool aquecido, use o SDK do SageMaker Python para criar um estimador com um keep_alive_period_in_seconds valor maior que 0 e chame. fit() Quando o trabalho de treinamento é concluído, um grupo de aquecimento é retido. Para obter mais informações sobre scripts de treinamento e estimadores, consulte Treinar um modelo com o SDK do Python SageMaker . Se o seu script não criar um grupo de aquecimento, consulte Criação de grupo de aquecimento para possíveis explicações.

import sagemaker from sagemaker import get_execution_role from sagemaker.tensorflow import TensorFlow # Creates a SageMaker session and gets execution role session = sagemaker.Session() role = get_execution_role() # Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='2.2', py_version='py37', job_name='my-training-job-1', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 1, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, ) # Starts a SageMaker training job and waits until completion estimator.fit('s3://my_bucket/my_training_data/')

Em seguida, crie um segundo trabalho de treinamento correspondente. Neste exemplo, criamos my-training-job-2, que tem todos os atributos necessários para combinar my-training-job-1, mas tem um hiperparâmetro diferente para experimentação. O segundo trabalho de treinamento reutiliza o pool qunete e inicia mais rápido do que o primeiro trabalho de treinamento. O exemplo de código a seguir usa um estimador do Tensorflow. O recurso de piscina aquecida pode ser usado com qualquer algoritmo de treinamento executado na Amazon SageMaker. Para obter mais informações sobre quais atributos precisam corresponder, consulte Combinar os trabalhos de treinamento.

# Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='py37', py_version='pyxy', job_name='my-training-job-2', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 2, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, ) # Starts a SageMaker training job and waits until completion estimator.fit('s3://my_bucket/my_training_data/')

Verifique o status do grupo de aquecimento de ambos os trabalhos de treinamento para confirmar se o grupo de aquecimento é Reused para my-training-job-1 e InUse para my-training-job-2.

nota

Os nomes dos trabalhos de treinamento têm sufixos de data/hora. Os exemplos de nomes my-training-job-1 de trabalhos de treinamento my-training-job-2 devem ser substituídos pelos nomes reais dos trabalhos de treinamento. Você pode usar o comando estimator.latest_training_job.job_name para buscar o nome real do trabalho de treinamento.

session.describe_training_job('my-training-job-1') session.describe_training_job('my-training-job-2')

O resultado de describe_training_job fornece todos os detalhes sobre um determinado trabalho de treinamento. Encontre o atributo WarmPoolStatus para verificar as informações sobre o grupo de aquecimento de um trabalho de treinamento. Sua saída deve ser semelhante ao seguinte exemplo:

# Warm pool status for training-job-1 ... 'WarmPoolStatus': {'Status': 'Reused', 'ResourceRetainedBillableTimeInSeconds': 1000, 'ReusedByName': my-training-job-2} ... # Warm pool status for training-job-2 ... 'WarmPoolStatus': {'Status': 'InUse'} ...

Atualizar um grupo de aquecimento

Quando o trabalho de treinamento estiver concluído e o status do grupo de aquecimento for Available, você poderá atualizar o valor KeepAlivePeriodInSeconds.

session.update_training_job(job_name, resource_config={"KeepAlivePeriodInSeconds":3600})

Encerrar um grupo de aquecimento

Para encerrar manualmente um grupo de aquecimento, defina o valor KeepAlivePeriodInSeconds como 0.

session.update_training_job(job_name, resource_config={"KeepAlivePeriodInSeconds":0})

O grupo de aquecimento é encerrado automaticamente quando excede o valor KeepAlivePeriodInSeconds designado ou se houver uma atualização de patch para o cluster.

Usando o SageMaker console da Amazon

Por meio do console, você pode criar um ponto quente, liberar um ponto quente ou verificar o status do ponto quente e o tempo faturável de trabalhos de treinamento específicos. Você também pode ver qual trabalho de treinamento correspondente reutilizou um ponto quente.

  1. Abra o SageMaker console da Amazon e escolha Tarefas de treinamento no painel de navegação. Se aplicável, o status do ponto quente de cada trabalho de treinamento é visível na coluna Status do ponto quente e o tempo restante para um ponto quente ativo é visível na coluna Tempo restante.

  2. Para criar um trabalho de treinamento que use um ponto quente do console, escolha Criar trabalho de treinamento. Em seguida, não se esqueça de especificar um valor para o campo Período de manutenção ao configurar seus recursos de trabalho de treinamento. Esse valor deve ser um número inteiro entre 1 e 3600, o que representa o período de tempo em segundos.

  3. Para liberar um grupo de aquecimento do console, selecione um trabalho de treinamento específico e escolha Liberar cluster no menu suspenso Ações.

  4. Para ver mais informações sobre um grupo de aquecimento, escolha um nome do trabalho de treinamento. Na página de detalhes do trabalho, desça até a seção Status do pool queente para encontrar o status do grupo de aquecimento, o tempo restante se o status do ponto quente for Available, os segundos faturáveis do grupo de aquecimento e o nome do trabalho de treinamento que reutilizou o grupo de aquecimento se o status do grupo de aquecimento for Reused.

Usando as APIs de baixo nível SageMaker

Use pools quentes SageMaker gerenciados com a SageMaker API ou a AWS CLI.

API SageMaker

Configure pools quentes SageMaker gerenciados usando a SageMaker API com os seguintes comandos:

AWS CLI

Configure pools quentes SageMaker gerenciados usando a AWS CLI com os seguintes comandos:

Chave de condição do IAM

Opcionalmente, os administradores podem usar a chave de sagemaker:KeepAlivePeriod condição para restringir ainda mais os KeepAlivePeriodInSeconds limites de determinados usuários ou grupos. SageMaker os pools quentes gerenciados são limitados a um KeepAlivePeriodInSeconds valor de 3600 segundos (60 minutos), mas os administradores podem reduzir esse limite, se necessário.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceKeepAlivePeriodLimit", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob" ], "Resource": "*", "Condition": { "NumericLessThanIfExists": { "sagemaker:KeepAlivePeriod": 1800 } } } ] }

Para obter mais informações, consulte Chaves de condição para a Amazon SageMaker na Referência de autorização de serviço.

Considerações

Considere os itens a seguir ao usar piscinas aquecidas SageMaker gerenciadas.

  • SageMaker pools quentes gerenciados não podem ser usados com treinamento de clusters heterogêneos.

  • SageMaker pools quentes gerenciados não podem ser usados com instâncias spot.

  • SageMaker piscinas quentes gerenciadas são limitadas a um KeepAlivePeriodInSeconds valor de 3600 segundos (60 minutos).

  • Se um grupo de aquecimento continuar a corresponder com êxito aos trabalhos de treinamento dentro do valor KeepAlivePeriodInSeconds especificado, o cluster só poderá continuar em execução por no máximo 28 dias.