Os clusters de preparação do Vertex AI usam o Simple Linux Utility for Resource Management (Slurm) como orquestrador para gerir e agendar tarefas no seu cluster.
O Slurm é um sistema de gestão de clusters e agendamento de tarefas de código aberto amplamente usado, conhecido pela sua escalabilidade e tolerância a falhas.
Principais capacidades do Slurm
- O Slurm atribui um conjunto de nós de computação para uso exclusivo de uma tarefa específica durante um período definido. Isto garante que uma tarefa tem acesso dedicado aos recursos de que precisa para ser executada sem interferências.
- O Slurm oferece uma estrutura para gerir o ciclo de vida completo de uma tarefa, desde o envio e a execução à monitorização e conclusão. Este sistema foi concebido especificamente para processar tarefas paralelas executadas num conjunto de nós atribuídos.
- O Slurm mantém uma fila de tarefas pendentes, usando um motor de priorização sofisticado para arbitrar o acesso aos recursos de computação. Ao considerar fatores como o tamanho da tarefa, a prioridade do utilizador e o tempo de espera, este sistema garante uma utilização justa e eficiente dos recursos no cluster.
Configuração básica do cluster
Antes de poder executar tarefas, tem de definir a estrutura fundamental do seu cluster Slurm. Esta secção detalha as definições de configuração essenciais, incluindo como organizar os nós de computação em partições, especificar um conjunto de nós de início de sessão dedicado e configurar um diretório base partilhado para os seus utilizadores.
Partições
As partições agrupam nós em conjuntos lógicos, o que pode ser útil para gerir diferentes tipos de máquinas ou níveis de acesso. São definidos como uma lista no campo partitions do slurm_spec.
Cada objeto de partição tem os seguintes campos obrigatórios:
id: um identificador exclusivo da partição.node_pool_ids: uma lista que contém os IDs de um ou mais conjuntos de nós que pertencem a esta partição.
Por exemplo:
"partitions": [
{
"id": "a4",
"node_pool_ids": [ "a4" ]
}
]
Nós de início de sessão
O conjunto de nós de início de sessão fornece nós dedicados que servem como ponto de entrada principal para os utilizadores interagirem com o cluster. O campo login_node_pool_id especifica o identificador exclusivo deste conjunto.
Por exemplo:
"login_node_pool_id": "login"
Armazenamento do diretório inicial
O campo home_directory_storage especifica a instância do Filestore a ser
montada como o diretório /home em todos os nós no cluster. Isto fornece um diretório pessoal partilhado e persistente para todos os utilizadores.
Tem de fornecer o nome completo do recurso da instância do Filestore para este valor.
Por exemplo:
"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"
Configuração avançada do Slurm
Os clusters de preparação da Vertex AI permitem-lhe personalizar um conjunto selecionado de slurm.confparâmetros, mas tenha em atenção que estas definições só podem ser configuradas durante a criação inicial do cluster e não podem ser alteradas posteriormente.
Contabilidade
Os clusters de preparação da Vertex AI permitem-lhe usar funcionalidades de contabilidade incorporadas para monitorizar a utilização de recursos no cluster. Para um guia completo sobre como monitorizar métricas como o tempo de CPU específico da tarefa e a utilização de memória, reveja a documentação de contabilidade do Slurm oficial.
| Parâmetro | Valor | Exemplo |
|---|---|---|
| AccountingStorageEnforce | Strings separadas por vírgulas | associations,limits,qos |
Preempção e prioridade
Para gerir a forma como as tarefas são agendadas e priorizadas, os clusters de preparação do Vertex AI permitem-lhe configurar a preempção de tarefas do Slurm. A preempção funciona com o plug-in de prioridade multifator para determinar se os trabalhos em execução devem ser pausados para dar lugar a trabalhos de prioridade mais elevada.
Para uma vista geral conceptual completa, reveja a documentação oficial do Slurm sobre o plug-in de prioridade multifator e a preempção.
Parâmetros de preemptividade
| Parâmetro | Valor | Exemplo |
|---|---|---|
| PREEMPT_TYPE | String | preempt/partition_prio |
| PREEMPT_MODE | Strings separadas por vírgulas | SUSPEND,GANG |
| PREEMPT_EXEMPT_TIME | String | 00:00:00 |
Parâmetros de prioridade
| Parâmetro | Valor | Exemplo |
|---|---|---|
| PRIORITY_TYPE | String | priority/multifactor |
| PRIORITY_WEIGHT_AGE | Número inteiro | 0 |
| PRIORITY_WEIGHT_ASSOC | Número inteiro | 0 |
| PRIORITY_WEIGHT_FAIRSHARE | Número inteiro | 0 |
| PRIORITY_WEIGHT_JOB_SIZE | Número inteiro | 0 |
| PRIORITY_WEIGHT_PARTITION | Número inteiro | 0 |
| PRIORITY_WEIGHT_QOS | Número inteiro | 0 |
| PRIORITY_WEIGHT_TRES | Strings separadas por vírgulas | cpu=100,mem=150 |
Scripts de prólogo e epílogo
Pode configurar scripts Bash personalizados para serem executados automaticamente no início (prólogo) e no fim (epílogo) de cada tarefa através dos seguintes campos:
prolog_bash_scripts: Uma lista de strings, em que cada string contém o conteúdo completo de um script Bash a ser executado antes do início da tarefa.epilog_bash_scripts: uma lista de strings, em que cada string contém o conteúdo completo de um script Bash a ser executado após a conclusão da tarefa.
Isto é útil para configurar um ambiente de trabalho único ou executar tarefas de limpeza automatizadas.
Exemplo de especificação de cluster
O exemplo seguinte mostra uma configuração JSON completa para criar um cluster de preparação. Pode adaptar esta especificação às suas necessidades.
{ // ... other cluster configurations ... "orchestratorSpec": { "slurmSpec": { "partitions": [ { "id": "a4", "node_pool_ids": ["a4"] } ], "login_node_pool_id": "login", "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID", "accounting": { "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE" }, "scheduling": { "priority_type": "PRIORITY_TYPE", "priority_weight_age": PRIORITY_WEIGHT_AGE, "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC, "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE, "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE, "priority_weight_partition": PRIORITY_WEIGHT_PARTITION, "priority_weight_qos": PRIORITY_WEIGHT_QOS, "priority_weight_tres": "PRIORITY_WEIGHT_TRES", "preempt_type": "PREEMPT_TYPE", "preempt_mode": "PREEMPT_MODE", "preempt_exempt_time": "PREEMPT_EXEMPT_TIME" }, "prolog_bash_scripts": [ "#!/bin/bash\necho 'First prolog script running'", "#!/bin/bash\necho 'Second prolog script running'" ], "epilog_bash_scripts": [ "#!/bin/bash\necho 'Epilog script running'" ] // ... other Slurm settings ... } } }
Gestão e operações de clusters
Gerir um cluster em execução
Depois de criar o cluster com as definições de contabilidade e de antecipação escolhidas, pode usar as ferramentas de linha de comandos do Slurm para gerir as contas de utilizador e monitorizar o agendamento de tarefas.
Gestão de contas com o sacctmgr
O comando sacctmgr é a ferramenta principal para gerir informações de utilizadores e contas na base de dados do Slurm. Por exemplo, para adicionar um novo utilizador a uma conta
e conceder-lhe acesso a uma partição, execute o seguinte comando:
sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>
Para ver uma lista abrangente de todas as opções de sacctmgr, reveja a documentação oficial de contabilidade do Slurm.
Verificar a prioridade do trabalho
Para verificar os componentes prioritários de cada tarefa na fila, use o utilitário sprio. Isto é útil para compreender por que motivo determinadas tarefas estão agendadas para serem executadas antes de outras.
Consulte a documentação da utilidade sprio para ver a utilização detalhada.
Exemplos de preempção
A documentação oficial do Slurm oferece vários exemplos práticos de diferentes estratégias de antecipação. Pode encontrá-los na página Slurm Preemption.
O que se segue?
O seguinte centra-se nos passos finais do ciclo de vida da aprendizagem automática: gerir, implementar e monitorizar os seus modelos preparados.
- Implemente o seu modelo para inferência: implemente o modelo preparado num ponto final do Vertex AI para atender pedidos de inferência online em grande escala.
- Faça a gestão do ciclo de vida do seu modelo: use o Registo de modelos do Vertex AI para criar versões, comparar e gerir os seus modelos. Um pipeline pode ser configurado para registar automaticamente um novo modelo após uma preparação bem-sucedida.
- Monitorize as execuções de pipelines e o desempenho do modelo:
- Monitorização de pipelines: acompanhe o gráfico de execução, os artefactos e o desempenho das execuções de pipelines para depurar problemas e otimizar a orquestração.
- Monitorização de modelos: após a implementação, configure a monitorização para detetar desvios e anomalias no desempenho de previsão do seu modelo, o que ajuda a manter a precisão do modelo ao longo do tempo.
- Otimize os custos e faça a gestão do ciclo de vida do cluster: quando usar pipelines automatizados, faça a gestão do ciclo de vida do cluster tendo em conta a frequência de execução.
- Para execuções pouco frequentes, adicione um passo final do pipeline para eliminar o cluster para poupar custos. Normalmente, isto envolve a criação de um componente de pipeline personalizado que chama a função de eliminação.
- Para execuções frequentes, deixe o cluster ativo para reduzir o tempo de início da tarefa.