Configurar um trabalho de treinamento com um cluster heterogêneo no Amazon SageMaker
Esta seção fornece instruções sobre como executar um trabalho de treinamento usando um cluster heterogêneo que consiste em vários tipos de instância.
Verifique o seguinte antes de começar:
-
Todos os grupos de instâncias compartilham a mesma imagem do Docker e o mesmo script de treinamento. Portanto, seu script de treinamento deve ser modificado para detectar a qual grupo de instâncias ele pertence e bifurcar a execução adequadamente.
-
O atributo de cluster heterogêneo não é compatível com o modo local do SageMaker.
-
Os fluxos de log do Amazon CloudWatch Logs de um trabalho de treinamento de cluster heterogêneo não são agrupados por grupos de instâncias. Você precisa descobrir nos logs quais são os nós que estão em qual grupo.
Opção 1: usar o SageMaker Python SDK
Siga as instruções sobre como configurar grupos de instâncias para um cluster heterogêneo usando o do SageMaker Python SDK.
-
Para configurar grupos de instâncias de um cluster heterogêneo para um trabalho de treinamento, use a classe
sagemaker.instance_group.InstanceGroup
. Você pode especificar um nome personalizado para cada grupo de instâncias, o tipo de instância e o número de instâncias para cada grupo de instâncias. Para obter mais informações, consulte SageMaker.instance_group.InstanceGroupna documentação do Python SDK do SageMaker. nota
Para obter mais informações sobre os tipos de instância disponíveis e o número máximo de grupos de instâncias que você pode configurar em um cluster heterogêneo, consulte a referência da API InstanceGroup.
O exemplo de código a seguir mostra como configurar dois grupos de instâncias que consistem em duas instâncias
ml.c5.18xlarge
somente de CPU nomeadasinstance_group_1
e uma instância de GPUml.p3dn.24xlarge
chamadainstance_group_2
, conforme mostrado no diagrama a seguir.O diagrama anterior mostra um exemplo conceitual de como os processos de pré-treinamento, como o pré-processamento de dados, podem ser atribuídos ao grupo de instâncias da CPU e transmitir os dados pré-processados para o grupo de instâncias da GPU.
from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup( "
instance_group_1
", "ml.c5.18xlarge
",2
) instance_group_2 = InstanceGroup( "instance_group_2
", "ml.p3dn.24xlarge
",1
) -
Usando os objetos do grupo de instâncias, configure canais de entrada de treinamento e atribua grupos de instâncias aos canais por meio do argumento
instance_group_names
da classe SageMaker.Inputs.TrainingInput. O argumento instance_group_names
aceita uma lista de strings de nomes de grupos de instâncias.O exemplo a seguir mostra como definir dois canais de entrada de treinamento e atribuir os grupos de instâncias criados no exemplo da etapa anterior. Você também pode especificar caminhos de bucket do Amazon S3 para o argumento
s3_data
para que os grupos de instâncias processem dados para suas finalidades de uso.from sagemaker.inputs import TrainingInput training_input_channel_1 = TrainingInput( s3_data_type='
S3Prefix
', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile s3_data='s3://your-training-data-storage/folder1
', distribution='FullyReplicated
', # Available Options: FullyReplicated | ShardedByS3Key input_mode='File
', # Available Options: File | Pipe | FastFile instance_groups=["instance_group_1
"] ) training_input_channel_2 = TrainingInput( s3_data_type='S3Prefix
', s3_data='s3://your-training-data-storage/folder2
', distribution='FullyReplicated
', input_mode='File
', instance_groups=["instance_group_2
"] )Para obter mais informações sobre os argumentos de
TrainingInput
, consulte os seguintes links:-
A classe SageMaker.Inputs.TrainingInput
na documentação do Python SDK do SageMaker -
A API S3DataSource na referência da API SageMaker
-
-
Configure um estimador do SageMaker com o argumento, conforme mostrado no exemplo de código
instance_groups
a seguir. O argumentoinstance_groups
aceita uma lista de objetosInstanceGroup
.nota
Esse atributo de cluster está disponível por meio das classes de estimadores das estruturas PyTorch
e TensorFlow do SageMaker. Os frameworks compatíveis são PyTorch v1.10 ou posterior e TensorFlow v2.6 ou posterior. Para encontrar uma lista completa dos contêineres, versões do framework e versões do Python disponíveis, consulte Contêineres do SageMaker Framework no repositório AWS do GitHub do Contêiner de Aprendizado Profundo. nota
O par de argumentos
instance_type
einstance_count
e o argumentoinstance_groups
da classe estimadora do SageMaker são mutuamente exclusivos. Para um treinamento de cluster homogêneo, use o par de argumentosinstance_type
einstance_count
. Para treinamento de clusters heterogêneos, useinstance_groups
.nota
Para encontrar uma lista completa dos contêineres, versões do framework e versões do Python disponíveis, consulte Contêineres do SageMaker Framework
no repositório AWS do GitHub do Contêiner de Aprendizado Profundo. -
Configure o
estimator.fit
método com os canais de entrada de treinamento configurados com os grupos de instâncias e inicie o trabalho de treinamento.estimator.fit( inputs={ 'training':
training_input_channel_1
, 'dummy-input-channel
':training_input_channel_2
} )
Opção 2: usar as APIs de nível inferior do SageMaker
Se você usa AWS Command Line Interface ou AWS SDK for Python (Boto3) e quer usar as APIs de nível inferior do SageMaker para enviar uma solicitação de trabalho de treinamento com um cluster heterogêneo, consulte as referências de API a seguir.