

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

# Modifique seu script de treinamento para atribuir grupos de instâncias
<a name="train-heterogeneous-cluster-modify-training-script"></a>

Com a configuração de cluster heterogênea nas seções anteriores, você preparou o ambiente de SageMaker treinamento e as instâncias para seu trabalho de treinamento. Para atribuir ainda mais os grupos de instâncias a determinadas tarefas de treinamento e processamento de dados, a próxima etapa é modificar seu script de treinamento. Por padrão, o trabalho de treinamento simplesmente cria réplicas de scripts de treinamento para todos os nós, independentemente do tamanho da instância, e isso pode levar a perda de desempenho. 

Por exemplo, se você misturar instâncias de CPU e instâncias de GPU em um cluster heterogêneo enquanto passa um script de treinamento de rede neural profunda para o `entry_point` argumento do estimador de SageMaker IA, o `entry_point` script é replicado para cada instância. Isso significa que, sem a atribuição adequada de tarefas, as instâncias de CPU também executam o script inteiro e iniciam o trabalho de treinamento projetado para treinamento distribuído em instâncias de GPU. Portanto, você deve fazer alterações nas funções de processamento específicas que deseja descarregar e executar nas instâncias da CPU. Você pode usar as variáveis de ambiente de SageMaker IA para recuperar as informações do cluster heterogêneo e permitir que processos específicos sejam executados adequadamente.

Quando seu trabalho de treinamento é iniciado, seu script de treinamento lê as informações do ambiente de SageMaker treinamento que incluem a configuração heterogênea do cluster. A configuração contém informações como os grupos de instâncias atuais, os hosts atuais em cada grupo e em qual grupo o host atual reside.

Você pode consultar as informações do grupo de instâncias durante a fase de inicialização de um trabalho de treinamento de SageMaker IA das seguintes maneiras.

**(Recomendado) Ler as informações do grupo de instâncias com o kit SageMaker de ferramentas de treinamento**

Use o módulo de ambiente Python fornecido pela biblioteca do [kit de ferramentas de SageMaker treinamento](https://github.com/aws/sagemaker-training-toolkit). A biblioteca do kit de ferramentas é pré-instalada nos [contêineres da SageMaker estrutura](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) para TensorFlow e PyTorch, portanto, você não precisa de uma etapa adicional de instalação ao usar os contêineres pré-criados. Essa é a forma recomendada de recuperar as variáveis de ambiente de SageMaker IA com menos alterações de código em seu script de treinamento.

```
from sagemaker_training import environment

env = environment.Environment()
```

Variáveis de ambiente relacionadas ao SageMaker treinamento geral e clusters heterogêneos:
+ `env.is_hetero` - Retorna um resultado booleano, independentemente de um cluster heterogêneo estar configurado ou não.
+ `env.current_host` - Retorna o host atual.
+ `env.current_instance_type` - Retorna o tipo de instância do host atual.
+ `env.current_instance_group` - Retorna o nome do grupo de instâncias atual.
+ `env.current_instance_group_hosts` - Retorna uma lista de hosts no grupo de instâncias atual.
+ `env.instance_groups` - Retorna uma lista de nomes de grupos de instâncias usados para treinamento.
+ `env.instance_groups_dict` - Retorna toda a configuração heterogênea do cluster do trabalho de treinamento.
+ `env.distribution_instance_groups`— Retorna uma lista de grupos de instâncias atribuídos ao `distribution` parâmetro da classe do estimador de SageMaker IA.
+ `env.distribution_hosts`— Retorna uma lista de hosts pertencentes aos grupos de instâncias atribuídos ao `distribution` parâmetro da classe do estimador de SageMaker IA.

Por exemplo, considere o exemplo a seguir de um cluster heterogêneo que consiste em dois grupos de instâncias.

```
from sagemaker.instance_group import InstanceGroup

instance_group_1 = InstanceGroup(
    "instance_group_1", "ml.c5.18xlarge", 1)
instance_group_2 = InstanceGroup(
    "instance_group_2", "ml.p3dn.24xlarge", 2)
```

A saída do exemplo `env.instance_groups_dict` de cluster heterogêneo deve ser semelhante à seguinte:

```
{
    "instance_group_1": {
        "hosts": [
            "algo-2"
        ],
        "instance_group_name": "instance_group_1",
        "instance_type": "ml.c5.18xlarge"
    },
    "instance_group_2": {
        "hosts": [
            "algo-3",
            "algo-1"
        ],
        "instance_group_name": "instance_group_2",
        "instance_type": "ml.p3dn.24xlarge"
    }
}
```

**(Opcional) Lendo as informações do grupo de instâncias do arquivo JSON de configuração do recurso**

Se preferir recuperar as variáveis de ambiente no formato JSON, você poderá usar diretamente o arquivo JSON de configuração do recurso. Por padrão, o arquivo JSON em uma instância de SageMaker treinamento está localizado `/opt/ml/input/config/resourceconfig.json` em.

```
file_path = '/opt/ml/input/config/resourceconfig.json'
config = read_file_as_json(file_path)
print(json.dumps(config, indent=4, sort_keys=True))
```