Como o Amazon SageMaker AI fornece informações de treinamento - SageMaker IA da Amazon

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á.

Como o Amazon SageMaker AI fornece informações de treinamento

Esta seção explica como o SageMaker AI disponibiliza informações de treinamento, como dados de treinamento, hiperparâmetros e outras informações de configuração, para o contêiner do Docker.

Ao enviar uma solicitação CreateTrainingJob ao SageMaker AI para iniciar o treinamento do modelo, especifique o caminho do Amazon Elastic Container Registry (Amazon ECR) da imagem do Docker que contém o algoritmo de treinamento. Além disso, especifique o local do Amazon Simple Storage Service (Amazon S3) no qual os dados de treinamento são armazenados e os parâmetros específicos do algoritmo. O SageMaker AI disponibiliza essas informações para o contêiner do Docker para que o algoritmo de treinamento possa usá-las. Esta seção explica como disponibilizamos essas informações para o seu contêiner do Docker. Para obter informações sobre como criar um trabalho de treinamento, consulte CreateTrainingJob. Para ter mais informações sobre como os contêineres do SageMaker AI organizam as informações, consulte Kits de ferramentas de treinamento e inferência do SageMaker.

Hiperparâmetros

O SageMaker AI disponibiliza os hiperparâmetros de uma solicitação CreateTrainingJob no contêiner do Docker, no arquivo /opt/ml/input/config/hyperparameters.json.

A seguir está um exemplo de uma configuração de hiperparâmetros no hyperparameters.json para especificar os hiperparâmetros num_round e eta na operação CreateTrainingJob do XGBoost.

{ "num_round": "128", "eta": "0.001" }

Para ter uma lista completa dos hiperparâmetros que podem ser usados para o algoritmo XGBoost integrado do SageMaker AI, consulte Hiperparâmetros do XGBoost.

Os hiperparâmetros que você pode ajustar dependem do algoritmo que você está treinando. Para ver uma lista dos hiperparâmetros disponíveis para um algoritmo integrado do SageMaker AI, consulte Hiperparâmetros no link do algoritmo em Usar algoritmos integrados ou modelos pré-treinados do Amazon SageMaker AI.

Variáveis de ambiente

O SageMaker AI define as seguintes variáveis de ambiente em seu contêiner:

  • TRAINING_JOB_NAME: Especificado no parâmetro TrainingJobName da solicitação CreateTrainingJob.

  • TRAINING_JOB_ARN o nome do recurso da Amazon (ARN) do trabalho de treinamento retornado como o TrainingJobArn na resposta CreateTrainingJob.

  • Todas as variáveis de ambiente especificadas no parâmetro de Ambiente na solicitação CreateTrainingJob.

Configuração dos dados de entrada

As informações do canal de dados no parâmetro InputDataConfig de sua solicitação CreateTrainingJob são disponibilizadas pelo SageMaker AI no arquivo /opt/ml/input/config/inputdataconfig.json no contêiner do Docker.

Por exemplo, digamos que você especifique três canais de dados (train, evaluation e validation) em sua solicitação. O SageMaker AI fornece o seguinte JSON:

{ "train" : {"ContentType": "trainingContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "evaluation" : {"ContentType": "evalContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "validation" : {"TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"} }
nota

O SageMaker AI fornece somente informações relevantes sobre cada canal de dados (por exemplo, o nome do canal e o tipo de conteúdo) ao contêiner, conforme mostrado no exemplo anterior. O S3DistributionType será definido como FullyReplicated se o EFS ou o FSx para Lustre forem especificados como fontes de dados de entrada.

Dados de treinamento

O parâmetro TrainingInputMode na em AlgorithmSpecification na solicitação CreateTrainingJob especifica como o conjunto de dados de treinamento é disponibilizado para seu contêiner. Os seguintes modos de entrada estão disponíveis:

  • Modo File

    Se você usar o modo File como seu valor TrainingInputMode, o SageMaker AI definirá os parâmetros a seguir no contêiner.

    • O parâmetro TrainingInputMode é gravado para o inputdataconfig.json como “Arquivo”.

    • O diretório do canal de dados é gravado em /opt/ml/input/data/channel_name.

    Se você usa o modo File, o SageMaker AI cria um diretório para cada canal. Por exemplo, se você tiver três canais chamados training, validation e testing, o SageMaker AI criará três diretórios no contêiner do Docker:

    • /opt/ml/input/data/training

    • /opt/ml/input/data/validation

    • /opt/ml/input/data/testing

    O modo File é compatível com as seguintes fontes de dados:

    • Amazon Simple Storage Service (Amazon S3)

    • Amazon Elastic File System (Amazon EFS)

    • Amazon FSx para Lustre

    nota

    Os canais que usam fontes de dados do sistema de arquivos, como o Amazon EFS e o Amazon FSx, devem usar o modo File. Nesse caso, o caminho do diretório fornecido no canal é montado em /opt/ml/input/data/channel_name.

  • Modo FastFile

    Se você usa o modo FastFile como TrainingInputNodeParameter, o SageMaker AI define os parâmetros a seguir no contêiner.

    • Semelhante ao modo File, no modo FastFile, o parâmetro TrainingInputMode é gravado para o inputdataconfig.json como “Arquivo”.

    • O diretório do canal de dados é gravado em /opt/ml/input/data/channel_name.

    O modo FastFile é compatível com as seguintes fontes de dados:

    • Amazon S3

    Se você usa o modo FastFile, o diretório do canal é montado com permissão somente para leitura.

    Historicamente, o modo File precedeu o modo FastFile. Para garantir a compatibilidade retroativa, os algoritmos compatíveis com o modo File também podem funcionar perfeitamente com o modo FastFile, desde que o parâmetro TrainingInputMode esteja definido como File no inputdataconfig.json..

    nota

    Os canais que usam o modo FastFile devem usar um S3DataType do “S3Prefix”.

    O modo FastFile apresenta uma visualização de pasta que usa a barra (/) como delimitador para agrupar objetos do Amazon S3 em pastas. Os prefixos S3Uri não devem corresponder a um nome de pasta parcial. Por exemplo, se um conjunto de dados do Amazon S3 contém s3://amzn-s3-demo-bucket/train-01/data.csv, então, nem o s3://amzn-s3-demo-bucket/train nem o s3://amzn-s3-demo-bucket/train-01 são permitidos como prefixos S3Uri.

    É recomendável usar uma barra no final para definir um canal correspondente a uma pasta. Por exemplo, o canal s3://amzn-s3-demo-bucket/train-01/ da pasta train-01. Sem a barra final, o canal seria ambíguo se existisse outra pasta s3://amzn-s3-demo-bucket/train-011/ ou arquivo s3://amzn-s3-demo-bucket/train-01.txt/.

  • Modo Pipe

    • Parâmetro TrainingInputModeescrito em inputdataconfig.json: “Pipe”

    • Diretório do canal de dados no contêiner do Docker: /opt/ml/input/data/channel_name_epoch_number

    • Fontes de dados compatíveis: Amazon S3

    Você precisa ler em um pipe separado para cada canal. Por exemplo, se você tiver três canais denominados training, validation e testing, precisará fazer a leitura dos seguintes pipes:

    • /opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...

    • /opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...

    • /opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...

    Leia os pipes sequencialmente. Por exemplo, se você tiver um canal denominado training, leia os pipes nesta sequência:

    1. Abra o /opt/ml/input/data/training_0 no modo de leitura e leia até o final do arquivo (EOF) ou, se tiver terminado o primeiro epoch, feche o arquivo pipe antecipadamente.

    2. Depois de fechar o primeiro arquivo pipe, procure /opt/ml/input/data/training_1 e leia-o até que você tenha concluído o segundo epoch e assim por diante.

    Se o arquivo de um determinado epoch ainda não existir, pode ser que o código precise tentar novamente até que o pipe seja criado. Não há restrição de sequenciamento nos tipos de canais. Ou seja, é possível ler vários epochs para o canal training e apenas começar a ler o canal validation somente quando você estiver pronto. Alternativamente, será possível lê-los simultaneamente se o algoritmo assim exigir.

    Para ver um exemplo de caderno Jupyter que mostra como usar o modo Pipe ao trazer seu próprio contêiner, consulte Traga seu próprio algoritmo de modo pipe para o Amazon SageMaker AI.

É possível usar buckets de diretório do S3 Express One Zone de alto desempenho como um local de entrada de dados para o modo de arquivo, modo de arquivo rápido e modo pipe no treinamento de modelo do SageMaker AI. Para usar o S3 Express One Zone, insira a localização do bucket de diretório do S3 Express One Zone em vez de um bucket de uso geral do Amazon S3. Forneça o ARN para o perfil do IAM com o controle de acesso e a política de permissões necessários. Consulte AmazonSageMakerFullAccesspolicy para obter detalhes. Só é possível criptografar os dados de saída do SageMaker AI em buckets de diretório com criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3). No momento, a criptografia do lado do servidor com chaves do AWS KMS (SSE-KMS) não é compatível com o armazenamento de dados de saída do SageMaker AI nos buckets de diretório. Para obter mais informações, consulte S3 Express One Zone.

Configuração do treinamento distribuído

Se você estiver executando treinamento distribuído com vários contêineres, o SageMaker AI disponibilizará as informações sobre todos os contêineres no arquivo /opt/ml/input/config/resourceconfig.json.

Para permitir a comunicação entre os contêineres, esse arquivo JSON contém informações de todos eles. O SageMaker AI disponibiliza esse arquivo para os algoritmos dos modos File e Pipe. O arquivo fornece as seguintes informações:

  • current_host: o nome do contêiner atual na rede de contêineres. Por exemplo, algo-1. Os valores de host podem ser alterados a qualquer momento. Não escreva código com valores específicos para essa variável.

  • hosts: a lista de nomes de todos os contêineres da rede de contêineres, classificados lexicograficamente. Por exemplo, ["algo-1", "algo-2", "algo-3"] para um cluster de três nós. Os contêineres podem usar esses nomes para tratar outros contêineres da rede. Os valores de host podem ser alterados a qualquer momento. Não escreva código com valores específicos para essas variáveis.

  • network_interface_name: o nome da interface de rede exposta ao seu contêiner. Por exemplo, os contêineres que executam Message Passing Interface (MPI) podem usar essas informações para definir o nome da interface de rede.

  • Não use as informações em /etc/hostname ou /etc/hosts porque elas podem ser imprecisas.

  • Informações do nome de host podem não estar imediatamente disponíveis para o contêiner do algoritmo. Recomendamos adicionar uma política de nova tentativa em operações de resolução de nomes de host à medida que os nós se tornarem disponíveis no cluster.

Veja a seguir um exemplo de arquivo no nó 1 em um cluster de três nós:

{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"], "network_interface_name":"eth1" }