Iniciar instâncias com ODCR (On-Demand Capacity Reservations) - AWS ParallelCluster

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

Iniciar instâncias com ODCR (On-Demand Capacity Reservations)

Com as Reservas de capacidade sob demanda (ODCRs), você pode ter uma reserva de capacidade para instâncias do Amazon EC2 do seu cluster em uma zona de disponibilidade específica. Dessa forma, você pode criar e gerenciar Reservas de Capacidade independentemente dos descontos de faturamento oferecidos por Savings Plans ou Instâncias reservadas regionais.

Você pode configurar reservas de capacidade sob demanda (ODCRs) open ou targeted. As ODCRs Abertas abrangem todas as instâncias que correspondam aos atributos do ODCR. Esses atributos são tipo de instância, plataforma e zona de disponibilidade. Você deve definir explicitamente as ODCRs Direcionadas na configuração do cluster. Para determinar se uma ODCR é open ou targeted, execute o comando describe-capacity-reservation do EC2 da AWS CLI.

Você também pode criar uma ODCR em um grupo de posicionamento de cluster é chamado de cluster placement group on-demand capacity reservation (CPG ODCR).

Várias ODCRs podem ser agrupados em um grupo de recursos. Isso pode ser definido no arquivo de configuração do cluster. Para obter mais informações sobre grupos de recursos, consulte O que são grupos de recursos? no Guia do usuário de Grupos de Recursos e Tags.

Usando o ODCR com o AWS ParallelCluster

O AWS ParallelCluster suporta ODCRs abertos. Quando você usa um ODCR aberto, não precisa especificar nada no AWS ParallelCluster. As instâncias são selecionadas automaticamente para o cluster. É possível especificar um grupo de posicionamento existente ou deixar que o AWS ParallelCluster crie um novo para você.

ODCR na configuração do cluster

A partir do AWS ParallelCluster versão 3.3.0, você pode definir ODCRs no arquivo de configuração do cluster, sem precisar especificar substituições de instâncias de execução do EC2.

Comece criando reservas de capacidade e grupos de recursos usando os métodos descritos na documentação vinculada para cada um. Você deve usar os métodos AWS CLI para criar grupos de reserva de capacidade. Se você usar o AWS Management Console, só poderá criar grupos de recursos baseados em tags ou em pilhas. Os grupos de recursos baseados em tags e baseados em pilhas não são compatíveis com o AWS ParallelCluster ou a AWS CLI ao executar instâncias com reservas de capacidade.

Depois que as reservas de capacidade e os grupos de recursos forem criados, especifique-os em SlurmQueues / CapacityReservationTarget ou SlurmQueues / ComputeResources / CapacityReservationTarget, conforme mostrado no exemplo de configuração de cluster a seguir. Substitua os valores destacados em vermelho pelos valores válidos.

Image: Os: os HeadNode: InstanceType: head_node_instance Networking: SubnetId: public_subnet_id Ssh: KeyName: key_name Scheduling: Scheduler: scheduler SlurmQueues: - Name: queue1 Networking: SubnetIds: - private_subnet_id ComputeResources: - Name: cr1 Instances: - InstanceType: instance MaxCount: max_queue_size MinCount: max_queue_size Efa: Enabled: true CapacityReservationTarget: CapacityReservationResourceGroupArn: capacity_reservation_arn
Atenção
  • A partir do AWS ParallelCluster versão 3.3.0, não recomendamos esse método. Esta seção permanece como referência para implementações usando versões anteriores.

  • Esse método não é compatível com a alocação de vários tipos de instâncias com o Slurm.

Compatibilidade para ODCRs targeted adicionado no AWS ParallelCluster versão 3.1.1. Nessa versão foi introduzido um mecanismo que substitui os parâmetros RunInstances do EC2 e transmite informações sobre a reserva a ser usada para cada recurso de computação configurado em AWS ParallelCluster. Esse mecanismo é compatível com ODCRs targeted. No entanto, ao usar ODCRs targeted, você deve especificar a configuração de substituição de run-instances. Os ODCRs Direcionados devem ser definidos explicitamente no comando run-instances do EC2 da AWS CLI. Para determinar se uma ODCR é open ou targeted, execute o comando describe-capacity-reservation do EC2 da AWS CLI.

Várias ODCRs podem ser agrupados em um grupo de recursos. Isso pode ser usado na substituição de instâncias de execução para atingir vários ODCRs ao mesmo tempo.

Se você estiver usando um ODCR targeted, poderá especificar um grupo de posicionamento. No entanto, você também precisa especificar uma configuração de substituição do run-instances.

Suponha que o AWS tenha criado um ODCR targeted para você ou que você tenha um conjunto específico de instâncias reservadas. Então, você não pode especificar um grupo de posicionamento. As regras configuradas por AWS podem entrar em conflito com a configuração do grupo de posicionamento. Portanto, se for necessário um grupo de posicionamento para seu aplicativo, use um CPG ODCR. Em ambos os casos, você também deve especificar a configuração de substituição run-instances.

Se você estiver usando um CPG ODCR, deverá especificar a configuração de substituição run-instances e especificar o mesmo grupo de posicionamento na configuração do cluster.

Usar instâncias reservadas com o AWS ParallelCluster

As instâncias reservadas são diferentes das reservas de capacidade (ODCR). Há dois tipos de instâncias reservadas. Uma Instância reservada Regional não reserva capacidade. Uma Instância reservada por zona reserva capacidade na zona de disponibilidade especificada.

Se você tiver instâncias reservadas regionais, não há reserva de capacidade e você pode obter erros de capacidade insuficientes. Se você tem instâncias reservadas por zona, você tem reserva de capacidade, mas não há parâmetros de API run-instances que você possa usar para especificá-las.

As instâncias reservadas são compatíveis com qualquer versão do AWS ParallelCluster. Você não precisa especificar nada no AWS ParallelCluster, e as instâncias serão selecionadas automaticamente.

Ao usar instâncias reservadas por zona, você pode evitar possíveis erros de capacidade insuficiente omitindo a especificação do grupo de posicionamento na configuração do cluster.

Atenção
  • A partir do AWS ParallelCluster versão 3.3.0, não recomendamos esse método. Esta seção permanece como referência para implementações usando versões anteriores.

  • Esse método não é compatível com a alocação de vários tipos de instâncias com o Slurm.

Você pode substituir os parâmetros RunInstances do EC2 para cada recurso de computação configurado em uma fila de cluster. Para fazer isso, crie o arquivo /opt/slurm/etc/pcluster/run_instances_overrides.json no nó principal do cluster com o seguinte conteúdo de trecho de código:

  • ${queue_name} é o nome da fila à qual você deseja aplicar substituições.

  • ${compute_resource_name} é o recurso de computação ao qual você deseja aplicar substituições.

  • ${overrides} é um objeto JSON arbitrário que contém uma lista de substituições RunInstances a serem usadas na combinação específica de fila e tipo de instância. A sintaxe das substituições precisa seguir as mesmas especificações documentadas em uma chamada run_instances boto3.

{     "${queue_name}": {         "${compute_resource_name}": {             ${overrides}         },         ...     },     ... }

Por exemplo, o JSON a seguir configura o grupo ODCR group_arn para ser usado em instâncias p4d.24xlarge configuradas em my-queue e my-compute-resource.

{     "my-queue": {         "my-compute-resource": {             "CapacityReservationSpecification": {                 "CapacityReservationTarget": {                     "CapacityReservationResourceGroupArn": "group_arn"                 }             }         }     } }

Depois que esse arquivo JSON é gerado, os daemons AWS ParallelCluster responsáveis pelo dimensionamento do cluster usam automaticamente a configuração de substituição para as execuções de instâncias. Para confirmar se os parâmetros especificados estão sendo usados para provisionamento de instâncias, consulte os seguintes arquivos de log:

  • /var/log/parallelcluster/clustermgtd (para capacidade estática)

  • /var/log/parallelcluster/slurm_resume.log (para capacidade dinâmica)

Se os parâmetros estiverem corretos, você encontrará uma entrada de log que contém o seguinte:

Found RunInstances parameters override. Launching instances with: <parameters_list>
Atenção
  • A partir do AWS ParallelCluster versão 3.3.0, não recomendamos esse método. Esta seção permanece como referência para implementações usando versões anteriores.

  • Esse método não é compatível com Alocação a vários tipos de instância com o Slurm.

  1. Crie um grupo de recursos, para agrupar a capacidade.

    $ aws resource-groups create-group --name EC2CRGroup \   --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
    nota

    Um grupo de recursos não oferece suporte a recursos compartilhados por outras contas.

    Se o ODCR de destino for compartilhado por outra conta, você não precisará criar um grupo de recursos. Use CapacityReservationId em vez de um grupo de recursos na etapa 3.

    #!/bin/bash set -e # Override run_instance attributes cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF {     "my-queue": {         "my-compute-resource": {             "CapacityReservationSpecification": {                 "CapacityReservationTarget": {                     "CapacityReservationId": "cr-abcdef01234567890"                 }             }         }     } } EOF

    Adicione reservas de capacidade ao grupo de recursos. Toda vez que você criar um novo ODCR, adicione-o à Reserva de Grupo. Substitua ACCOUNT_ID pelo ID da sua conta, PLACEHOLDER_CAPACITY_RESERVATION pelo seu ID de reserva de capacidade e REGION_ID pelo seu ID da Região da AWS (por exemplo, us-east-1).

    $ aws resource-groups group-resources --region REGION_ID --group EC2CRGroup \   --resource-arns arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION

    Crie um documento de política no computador local. Substitua ACCOUNT_ID pelo ID da sua conta e REGION_ID pelo seu ID da Região da AWS (por exemplo, us-east-1).

    cat > policy.json << EOF {     "Version": "2012-10-17",     "Statement": [         {             "Sid": "RunInstancesInCapacityReservation",             "Effect": "Allow",             "Action": "ec2:RunInstances",             "Resource": [                 "arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/*",                 "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/*"             ]         }     ] } EOF
  2. Crie a política do IAM em sua Conta da AWS usando o arquivo json que você criou.

    $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
  3. Crie o seguinte script de pós-instalação localmente na instância e o nomeie como postinstall.sh.

    Substitua ACCOUNT_ID pelo seu ID da Conta da AWS e REGION_ID pelo seu ID da Região da AWS (por exemplo, us-east-1).

    #!/bin/bash set -e # Override run_instance attributes cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF {     "my-queue": {         "my-compute-resource": {             "CapacityReservationSpecification": {                 "CapacityReservationTarget": {                     "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/EC2CRGroup"                 }             }         }     } } EOF

    Faça upload do arquivo para um bucket do Amazon S3. Substitua S3_NAME_BUCKET pelo nome específico do bucket do S3.

    $ aws s3 mb s3://S3_NAME_BUCKET aws s3 cp postinstall.sh s3://S3_NAME_BUCKET/postinstall.sh
  4. Crie a configuração do cluster local, substituindo os espaços reservados com valores próprios.

    Region: REGION_ID Image:   Os: alinux2 HeadNode:   InstanceType: c5.2xlarge   Ssh:     KeyName: YOUR_SSH_KEY   Iam:     S3Access:       - BucketName: S3_NAME_BUCKET     AdditionalIamPolicies:       - Policy: arn:aws:iam::ACCOUNT_ID:policy/RunInstancesCapacityReservation   ## This post-install script is executed after the node is configured.   ## It is used to install scripts at boot time and specific configurations   ## In the script below we are overriding the calls to RunInstance to force   ## the provisioning of our my-queue partition to go through   ## the On-Demand Capacity Reservation   CustomActions:     OnNodeConfigured:       Script: s3://S3_NAME_BUCKET/postinstall.sh   Networking:     SubnetId: YOUR_PUBLIC_SUBNET_IN_TARGET_AZ Scheduling:   Scheduler: slurm   SlurmQueues:     - Name: my-queue       ComputeResources:         - MinCount: 0           MaxCount: 100           InstanceType: p4d.24xlarge           Name: my-compute-resource           Efa:             Enabled: true       Networking:         ## PlacementGroup:         ##   Enabled: true ## Keep PG disabled if using targeted ODCR         SubnetIds:           - YOUR_PRIVATE_SUBNET_IN_TARGET_AZ
  5. Crie um cluster.

    Use o seguinte comando para criar o cluster: Substitua cluster-config.yaml pelo nome do arquivo de configuração, cluster-dl pelo nome do seu cluster e REGION_ID pelo ID da região (por exemplo, us-east-1).

    $ pcluster create-cluster --cluster-configuration cluster-config.yaml --cluster-name cluster-dl --region REGION_ID

    Depois que o cluster é criado, o script de pós-instalação é executado no nó principal. O script cria o arquivo run_instances_overrides.json e substitui as chamadas enviadas a RunInstances para forçar o provisionamento da partição a passar pela reserva de capacidade sob demanda.

    Os daemons AWS ParallelCluster responsáveis pelo dimensionamento do cluster usam automaticamente essa configuração para novas instâncias que são iniciadas. Para confirmar se os parâmetros especificados estão sendo usados para provisionamento de instâncias, consulte os seguintes arquivos de log:

    • /var/log/parallelcluster/clustermgtd (para capacidade estática - MinCount > 0)

    • /var/log/parallelcluster/slurm_resume.log (para capacidade dinâmica)

    Se os parâmetros estiverem corretos, você encontrará uma entrada de log que contém o seguinte:

    Found RunInstances parameters override. Launching instances with: <parameters_list>

Atualizando substituições RunInstances

Você pode atualizar a configuração JSON gerada a qualquer momento sem interromper a frota de computação. Depois que as alterações forem aplicadas, todas as novas instâncias serão iniciadas com a configuração atualizada. Se você precisar aplicar a configuração atualizada aos nós em execução, recicle os nós forçando o encerramento da instância e aguarde até AWS ParallelCluster fazer a substituição desses nós. Você pode fazer isso encerrando a instância no console do EC2 ou da AWS CLI, ou configurando os nós do Slurm em um estado DOWN ou DRAIN.

Use o comando a seguir para definir o nó Slurm para DOWN ou DRAIN.

$ scontrol update nodename=my-queue-dy-my-compute-resource-1 state=down reason=your_reason scontrol update nodename=my-queue-dy-my-compute-resource-1 state=drain reason=your_reason