View a markdown version of this page

Criação de usuários em um cluster Slurm no SageMaker HyperPod - 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á.

Criação de usuários em um cluster Slurm no SageMaker HyperPod

Há três maneiras de criar usuários POSIX nos nós de um cluster Slurm em. SageMaker HyperPod Eles diferem no momento em que os usuários são criados e na quantidade de configuração do ciclo de vida que você precisa gerenciar. Escolha a opção que corresponda ao seu cluster e fluxo de trabalho, listada aqui da mais fácil à mais avançada.

Opção Melhor para Configuração do ciclo de vida necessária Quando os usuários são criados Comportamento na expansão ou substituição de nós
Opção A: Adicionar usuários com o script do utilitário de criação de usuários Adicionar usuários a um cluster que já existe InService, sem mexer na configuração do ciclo de vida Nenhum Sob demanda, sempre que você executar o script Manual. Os usuários não são aplicados automaticamente; execute novamente o script sempre que os nós forem adicionados ou substituídos (automática ou manualmente).
Opção B: adicionar usuários com o script de extensão add-users AMI-based clusters configurados por ciclo de vida que provisionam usuários automaticamente Adicionar scripts de extensão de usuários Automaticamente durante o provisionamento de nós — durante a criação do cluster, adição de nós (aumento de escala), atualizações de AMI e substituições de nós. Automático. A extensão é executada em cada novo nó durante o provisionamento, usando o arquivo do usuário no bucket do Amazon S3 de scripts de ciclo de vida.
Opção C: adicionar usuários com os scripts básicos do ciclo de vida Clusters que já usam o conjunto de scripts de ciclo de vida base personalizado completo Conjunto completo de scripts de ciclo de vida personalizados Automaticamente durante o provisionamento de nós — durante a criação do cluster, adição de nós (aumento de escala), atualizações de AMI e substituições de nós. Automático. O script básico do ciclo de vida é executado em cada novo nó durante o provisionamento, usando o arquivo do usuário no bucket do Amazon S3 de scripts de ciclo de vida.

Todas as três opções usam scripts que a equipe SageMaker HyperPod de serviço fornece no repositório Awsome Distributed Training no GitHub site.

Opção A: Adicionar usuários com o script do utilitário de criação de usuários

Essa é a opção mais simples e não requer configuração de ciclo de vida. Use-o quando seu cluster já estiver InService disponível e você quiser adicionar usuários agora mesmo. Execute o script do utilitário create_users.sh no GitHub site no nó do controlador para criar usuários em cada nó em uma única execução. O script detecta automaticamente os outros nós a partir dos arquivos de configuração do cluster, cria os usuários via SSH e configura os nós de computação em paralelo para escalar para clusters grandes. O script suporta três modos para especificar usuários, selecionados pelos argumentos que você passa e pelos arquivos presentes no diretório atual, na seguinte ordem de prioridade:

  • Modo de linha de comando — você passa nomes de usuário como argumentos e o script atribui automaticamente UIDs. Essa é a maneira mais rápida de adicionar usuários.

  • Modo de arquivo — o script lê as definições do usuário de um arquivo shared_users.txt (CSV) ou shared_users.yaml (YAML) no diretório atual.

  • Modo interativo — o script solicita nomes de usuário e, opcionalmente, UIDs.

Importante

Em cada modo, create_users.sh cria usuários somente nos nós que existem quando você o executa. Isso inclui o modo de arquivo com um local shared_users.txt oushared_users.yaml. Os usuários não são recriados automaticamente em nós adicionados posteriormente por meio de aumento de escala ou substituição de nós. Esses são eventos de provisionamento nos quais o novo nó é inicializado com um novo volume raiz que não tem contas POSIX. (Os diretórios pessoais e as chaves SSH no sistema de arquivos compartilhado sobrevivem, mas as próprias contas de usuário não.) Re-run create_users.shdepois que os novos nós forem adicionados para alinhá-los.

Re-running o script está seguro. Execute-o no nó do controlador; ele descobre os outros nós do cluster e aplica usuários em todo o cluster em uma única execução. É idempotente por nó: ele cria um usuário somente quando está ausente, deixando os nós que já têm o usuário inalterados. Portanto, a nova execução após a adição de nós afeta somente os novos nós.

Para que novos nós recebam usuários automaticamente, o arquivo do usuário deve fazer parte da configuração do ciclo de vida do cluster para que seja executado durante o provisionamento: armazene um shared_users.yaml arquivo shared_users.txt or em seu bucket Amazon S3 de scripts de ciclo de vida e use-o com o ou o. Opção B: adicionar usuários com o script de extensão add-users Opção C: adicionar usuários com os scripts básicos do ciclo de vida create_users.shajuda anexando cada usuário criado shared_users.txt e oferecendo o upload para o Amazon S3, mas por si só — em qualquer modo — ele não faz com que os usuários persistam em eventos de provisionamento.

Para cada usuário, o script:

  • Cria um usuário POSIX com um UID consistente em cada nó.

  • Cria um diretório inicial no sistema de arquivos compartilhado (detectando automaticamente o OpenZFS em /home ou o Amazon FSx for Lustre em). /fsx

  • Gera um par de chaves SSH no sistema de arquivos compartilhado para SSH entre nós sem senha.

  • Adiciona o usuário ao docker grupo (e, opcionalmente, concede acesso ao sudo).

  • Registra o usuário com a contabilidade Slurm no controlador para que ele possa enviar trabalhos.

  • Anexa os novos usuários a um shared_users.txt arquivo e, opcionalmente, faz o upload para o Amazon S3, para que você possa reutilizá-lo com as outras opções.

Pré-requisitos

Antes de começar, verifique se os seguintes requisitos foram atendidos.

  • O cluster é InService e você pode se conectar ao nó do controlador. Consulte Acessando seus nós SageMaker HyperPod de cluster.

  • jqestá instalado no nó do controlador.

  • O acesso SSH está disponível do nó do controlador para todos os outros nós (HyperPod configura isso para o usuário padrão).

Para adicionar usuários com o script do utilitário create_users.sh

Execute as etapas a seguir.

  1. Conecte-se ao nó do controlador e baixe o script. Certifique-se de executá-lo com permissões sudo.

    $ curl -O https://raw.githubusercontent.com/awslabs/awsome-distributed-training/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/utils/create_users.sh chmod +x create_users.sh
  2. Execute o script usando um de seus três modos, que ele seleciona por prioridade a partir dos argumentos que você passa e dos arquivos no diretório atual: primeiro os argumentos da linha de comando, depois um arquivo do usuário e, em seguida, os prompts interativos. Cada modo executa a mesma sequência: crie os usuários no nó atual, configure pares de chaves SSH no sistema de arquivos compartilhados, crie os usuários em todos os nós restantes (nós de computação em paralelo), registre-os na contabilidade do Slurm no controlador, anexe-os e ofereça o upload desse arquivo para o shared_users.txt Amazon S3.

    Os três modos são descritos nos exemplos a seguir, cada um adicionando dois usuários (user1euser2).

    Modo de linha de comando

    Passe os nomes de usuário como argumentos. O script atribui automaticamente UIDs e pergunta se os novos usuários devem ser sudoers. Essa é a maneira mais rápida de adicionar usuários.

    $ sudo ./create_users.sh user1 user2

    O script valida os nomes de usuário e solicita o acesso sudoer:

    ======================================== Step 1: User Configuration ======================================== Users from CLI args: user1 user2 ✓ user1 — will be created (auto-assign UID) ✓ user2 — will be created (auto-assign UID) Make these user(s) sudoer(s)? (y/N): n

    Em seguida, ele cria os usuários no nó atual, configura pares de chaves SSH, os cria nos nós de computação, os registra com a contabilidade Slurm no controlador e grava, solicitando que você, no finalshared_users.txt, faça o upload desse arquivo para o Amazon S3.

    Modo de arquivo

    Crie um arquivo de usuário no mesmo diretório do script e, em seguida, execute o script sem argumentos. O script lê as definições do usuário, as valida (criando somente usuários que ainda não existem e ignorando conflitos de UID) e cria os usuários em todos os nós. O script aceita dois formatos de arquivo.

    Parashared_users.txt, use um arquivo CSV com um usuário por linha no formatousername,uid,home_directory:

    user1,2001,/fsx/user1 user2,2002,/fsx/user2

    Como alternativashared_users.yaml, use um arquivo YAML com uma lista simples de usuários ou usuários organizados em grupos. A análise desse formato requer PyYAML no nó. O seguinte é o formato de lista simples:

    users: - username: user1 uid: 2001 - username: user2 uid: 2002

    Se os dois arquivos estiverem presentes, terá shared_users.txt precedência. Execute o script sem argumentos:

    $ sudo ./create_users.sh

    O script valida as entradas do arquivo, confirma a criação, solicita o acesso ao sudoer e oferece a adição de usuários que não estão no arquivo. Em seguida, ele cria user1 e user2 ativa todos os nós com os UIDs do arquivo (2001 e 2002), configura pares de chaves SSH, os registra na contabilidade do Slurm e os atualiza. shared_users.txt

    Modo interativo

    Execute o script sem argumentos e sem nenhum arquivo de usuário presente. O script solicita os nomes de usuário e, opcionalmente, os UIDs a serem atribuídos:

    $ sudo ./create_users.sh
    ======================================== Step 1: User Configuration ======================================== No shared_users.txt or shared_users.yaml found. Entering interactive mode... Enter username(s), comma-separated (e.g. 'sean' or 'sean,alice,bob'): user1,user2 Specify UIDs? (Enter for auto-assign, or comma-separated UIDs): 2001,2002 Make these user(s) sudoer(s)? (y/N): n

    Depois de responder às solicitações, o script cria user1 e, user2 em todos os nós com os UIDs que você inseriu, configura pares de chaves SSH, os registra na contabilidade do Slurm e os atualiza. shared_users.txt

  3. Teste um usuário alternando para ele e executando um comando no cluster.

    $ sudo su - user1 && ssh $(srun hostname)
nota

O roteiro é idempotente. Os usuários que já existem são ignorados e as chaves SSH existentes e as associações contábeis do Slurm permanecem intactas, portanto, é seguro executá-las novamente.

Opção B: adicionar usuários com o script de extensão add-users

Use essa opção quando seu cluster usar a AMI-based configuração e você quiser que os usuários sejam provisionados automaticamente. Com a opção de ciclo de vida da extensão, SageMaker HyperPod executa primeiro a AMI-based configuração completa e depois executa o script da extensão. A equipe de serviço fornece uma extensão add-users pronta para uso na pasta Extensões do repositório Awsome Distributed Training no site. GitHub Como a extensão é executada durante o provisionamento do nó, os usuários são criados automaticamente quando o cluster é criado e novamente em quaisquer novos nós adicionados durante a expansão.

Para obter mais informações sobre como configurar extensões:

  • Para configurar extensões usando o AWS console, consulte Configuração do ciclo de vida - opcional em Configuração personalizada.

  • Para configurar extensões usando a API, consulte a Opção B: Estender a AMI-based configuração com OnInitComplete em Criar seu cluster.

A add-users extensão cria usuários POSIX com UIDs consistentes, configura diretórios iniciais no sistema de arquivos compartilhado, gera pares de chaves SSH para SSH entre nós sem senha e registra usuários com contabilidade Slurm no controlador. Ele aceita dois formatos de entrada:

  • shared_users.txt— o mesmo formato CSV usado pelos scripts básicos do ciclo de vida (). username,uid,/fsx/username Todos os usuários são adicionados à conta do root Slurm.

  • shared_users.yaml— um formato YAML que também suporta a organização de usuários em grupos com contas Slurm por grupo e montagens de sistema de arquivos. Os grupos são apenas organizacionais; eles não criam grupos Linux.

Veja a seguir um exemplo shared_users.yaml usando o formato de grupos:

groups: - name: research slurm_account: research users: - username: user1 uid: 2001 - username: user2 uid: 2002 - name: platform slurm_account: platform users: - username: user3 uid: 3001
Para adicionar usuários com a extensão add-users na criação do cluster

Execute as etapas a seguir.

  1. Copie o arquivo de amostra apropriado no add-users diretório e edite-o com seus usuários:

    $ cp shared_users_sample.yaml shared_users.yaml
  2. Faça o upload do add-users diretório para seu bucket Amazon S3 de scripts de ciclo de vida (o caminho do bucket deve começar com): s3://sagemaker-

    $ aws s3 cp add-users/ s3://DOC-EXAMPLE-BUCKET/add-users/ --recursive
  3. Especifique a extensão no LifeCycleConfig bloco da sua CreateCluster solicitação, usando add_users.sh como OnInitComplete script:

    "LifeCycleConfig": { "OnInitComplete": "add_users.sh", "SourceS3Uri": "s3://DOC-EXAMPLE-BUCKET/add-users/" }
dica

Se seu cluster precisar de vários recursos além da criação do usuário (por exemplo, observabilidade), faça o upload da pasta Extensions inteira e use o run_extensions.sh orquestrador como seu script de extensão. Ele fornece alternâncias booleanas simples, como ENABLE_ADD_USERS="true" habilitar cada recurso. Para obter detalhes, consulte Começando a SageMaker HyperPod usar o AWS CLI.

Para adicionar usuários a um cluster existente após a criação

Como a extensão é executada somente durante o provisionamento do nó, adicionar usuários aos nós que já estão em execução exige que você execute a extensão manualmente.

  1. Atualize seu arquivo de usuário com os novos usuários (mantenha os usuários existentes no arquivo) e faça o upload para o Amazon S3:

    $ aws s3 cp add-users/shared_users.yaml s3://DOC-EXAMPLE-BUCKET/add-users/shared_users.yaml
  2. Conecte-se ao nó do controlador e transfira os scripts para o sistema de arquivos compartilhado:

    $ sudo mkdir -p /fsx/cluster-scripts/add-users sudo aws s3 cp s3://DOC-EXAMPLE-BUCKET/add-users/ /fsx/cluster-scripts/add-users/ --recursive sudo chmod +x /fsx/cluster-scripts/add-users/*.sh
  3. Execute a extensão no controlador:

    $ sudo bash /fsx/cluster-scripts/add-users/add_users.sh
  4. Execute a extensão nos nós de computação comsrun:

    $ sudo srun --partition=partition-name bash /fsx/cluster-scripts/add-users/add_users.sh

Os scripts ignoram os usuários existentes e criam somente novos; eles são idempotentes.

Opção C: adicionar usuários com os scripts básicos do ciclo de vida

Use essa opção somente se seu cluster já usa o conjunto de scripts de ciclo de vida base personalizado completo, em que seus scripts possuem toda a sequência de provisionamento. Essa é a opção mais avançada porque você gerencia o conjunto completo de scripts do ciclo de vida em vez de uma única extensão. A equipe de serviço fornece o script add_users.sh no GitHub site como um script dentro do conjunto de scripts do ciclo de vida base-config. Durante a criação do cluster, atualização do cluster ou atualização do software do cluster, é executado o lifecycle script runner (lifecycle_script.py)add_users.sh, que lê um shared_users.txt arquivo e cria os usuários e seus diretórios iniciais.

Nesta opção, add_users.sh manipula somente a criação do usuário POSIX e do diretório inicial. A geração de pares de chaves SSH para SSH entre nós sem senha é um módulo separado no conjunto básico de scripts de ciclo de vida (por exemplo,gen-keypair-ubuntu.sh), que o executor de scripts de ciclo de vida invoca como parte do conjunto completo. Certifique-se de que o módulo de chave SSH esteja incluído em seu conjunto de scripts de ciclo de vida para que os usuários obtenham pares de chaves no sistema de arquivos compartilhado.

Para obter mais informações sobre como configurar o conjunto completo de scripts de ciclo de vida personalizados:

Para criar usuários durante a criação do cluster Slurm

Execute as etapas a seguir.

  1. Baixe o conjunto de scripts de ciclo de vida base-config do site. GitHub Com essa opção, você carrega toda a pasta base-config como seu conjunto de scripts de ciclo de vida, não apenas. add_users.sh

  2. Na pasta base-config, crie ou edite um arquivo de texto com o nome shared_users.txt no formato a seguir. A primeira coluna é o nome do usuário, a segunda coluna é o ID exclusivo do usuário e a terceira coluna é o diretório do usuário no espaço compartilhado do Amazon FSx.

    username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...

    add_users.shshared_users.txt da mesma pasta, portanto, o arquivo deve estar dentro de base-config junto com o script.

  3. Faça upload de toda a pasta base-config para o bucket do Amazon S3 para seus scripts de ciclo de vida. HyperPod Enquanto a criação do cluster, a atualização do cluster ou a atualização do software do cluster estão em andamento, o executor de scripts do ciclo de vida é executadoadd_users.sh, lendo shared_users.txt e configurando os usuários e seus diretórios iniciais.

nota

add_users.shdetecta automaticamente o sistema de arquivos compartilhado: se o OpenZFS estiver montado /home nele, ele cria diretórios iniciais; caso contrário, ele usa o caminho Amazon FSx for Lustre.