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á.
Programação baseada em memória do Slurm
A partir da versão 3.2.0, AWS ParallelCluster oferece suporte ao agendamento Slurm baseado em memória com o parâmetro de configuração SlurmSettingsEnableMemoryBasedScheduling/cluster.
nota
Para AWS ParallelCluster as versões 3.2.0 a 3.6. x
, não EnableMemoryBasedScheduling
pode ser ativado se você configurar vários tipos de instância em Instâncias.
Atenção
Quando você especifica vários tipos de instâncias em um recurso de computação de fila Slurm com EnableMemoryBasedScheduling
ativado, o valor RealMemory
é a quantidade mínima de memória disponibilizada para todos os tipos de instância. Isso pode resultar em quantidades significativas de memória não utilizada se você especificar tipos de instância com capacidades de memória muito diferentes.
Com EnableMemoryBasedScheduling: true
, o programador do Slurm rastreia a quantidade de memória que cada trabalho exige em cada nó. Em seguida, o programador do Slurm usa essas informações para agendar vários trabalhos no mesmo nó de computação. A quantidade total de memória que os trabalhos exigem em um nó não pode ser maior do que a memória disponível do nó. O programador impede que um trabalho use mais memória do que a solicitada quando o trabalho foi enviado.
Com EnableMemoryBasedScheduling: false
, os trabalhos podem competir pela memória em um nó compartilhado e causar falhas no trabalho e eventos out-of-memory
.
Atenção
O Slurm usa uma notação de potência de 2 para seus rótulos, como MB ou GB. Leia esses rótulos como MiB e GiB, respectivamente.
Configuração do Slurm e programação baseada em memória
Com EnableMemoryBasedScheduling: true
, o Slurm define os seguintes parâmetros de configuração do Slurm:
-
SelectTypeParameters=CR_CPU_Memory
no slurm.conf
. Essa opção configura a memória do nó para ser um recurso consumível no Slurm. -
ConstrainRAMSpace=yes
no cgroup.conf
do Slurm. Com essa opção, o acesso de um trabalho à memória é limitado à quantidade de memória que o trabalho solicitou quando enviado.
nota
Vários outros parâmetros de configuração do Slurm podem afetar o comportamento do programador do Slurm e do gerenciador de recursos quando essas duas opções são definidas. Para obter mais informações, consulte a documentação da Slurm
Programador do Slurm e programação baseada em memória
EnableMemoryBasedScheduling: false
(padrão)
Por padrão, EnableMemoryBasedScheduling
é definido como falso. Quando falso, o Slurm não inclui memória como recurso em seu algoritmo de agendamento e não rastreia a memória que os trabalhos usam. Os usuários podem especificar a opção --mem MEM_PER_NODE
para definir a quantidade mínima de memória por nó que um trabalho exige. Isso força o programador a escolher nós com um valor RealMemory
de pelo menos MEM_PER_NODE
ao agendar o trabalho.
Por exemplo, suponha que um usuário envie dois trabalhos com --mem=5GB
. Se os recursos solicitados, como CPUs ou GPUs, estiverem disponíveis, os trabalhos poderão ser executados ao mesmo tempo em um nó com 8 GiB de memória. As duas tarefas não estão programadas em nós de computação com menos de 5 GiB de RealMemory
.
Atenção
Quando a programação baseada em memória está desativada, o Slurm não rastreia a quantidade de memória que os trabalhos usam. Os trabalhos executados no mesmo nó podem competir por recursos de memória e fazer com que o outro trabalho falhe.
Quando a programação baseada em memória está desativada, recomendamos que os usuários não especifiquem as opções --mem-per-cpu
--mem-per-gpu
EnableMemoryBasedScheduling: true
Quando EnableMemoryBasedScheduling
é definido como verdadeiro, o Slurm rastreia o uso da memória de cada trabalho e impede que os trabalhos usem mais memória do que a solicitada com as opções de envio --mem
.
Usando o exemplo anterior, um usuário envia dois trabalhos com --mem=5GB
. Os trabalhos não podem ser executados ao mesmo tempo em um nó com 8 GiB de memória. Isso ocorre porque a quantidade total de memória necessária é maior do que a memória disponível no nó.
Com a programação baseada em memória ativada, --mem-per-cpu
e --mem-per-gpu
se comportam de forma consistente com o que está descrito na documentação do Slurm. Por exemplo, um trabalho é enviado com --ntasks-per-node=2 -c 1 --mem-per-cpu=2GB
. Nesse caso, Slurm atribui à tarefa um total de 4 GiB para cada nó.
Atenção
Quando a programação baseada em memória está ativada, recomendamos que os usuários incluam uma especificação --mem
ao enviar um trabalho. Com a Slurm configuração padrão incluída em AWS ParallelCluster, se nenhuma opção de memória estiver incluída (--mem
,, ou--mem-per-gpu
)--mem-per-cpu
, Slurm atribui toda a memória dos nós alocados à tarefa, mesmo que ela solicite somente uma parte dos outros recursos, como CPUs ou GPUs. Isso evita efetivamente o compartilhamento de nós até que o trabalho seja concluído, pois não há memória disponível para outros trabalhos. Isso acontece porque o Slurm define a memória por nó da tarefa para DefMemPerNode
Se vários tipos de recursos de computação com quantidades diferentes de memória estiverem disponíveis na mesma fila, um trabalho enviado sem opções de memória poderá receber quantidades diferentes de memória em nós diferentes. Isso depende de quais nós o programador disponibiliza para o trabalho. Os usuários podem definir um valor personalizado para opções, como DefMemPerNode
ou DefMemPerCPU
Slurm RealMemory e AWS ParallelCluster SchedulableMemory
Com a Slurm configuração fornecida AWS ParallelCluster, Slurm interpreta como RealMemoryRealMemory
95% da memória listada nos tipos de instância do Amazon EC2
Quando a programação baseada em memória é desativada, o Slurm programador usa os nós do RealMemory
para filtrar os nós quando os usuários enviam um trabalho com --mem
especificado.
Quando a programação baseada em memória está ativada, o programador do Slurm interpreta como RealMemory
a quantidade máxima de memória disponível para trabalhos em execução no nó de computação.
A configuração padrão pode não ser ideal para todos os tipos de instância:
-
Essa configuração pode ser maior do que a quantidade de memória que os nós podem realmente acessar. Isso pode acontecer quando os nós de computação são tipos de instâncias pequenas.
-
Essa configuração pode ser maior do que a quantidade de memória que os nós podem realmente acessar. Isso pode acontecer quando os nós de computação são tipos de instância grandes e podem levar a uma quantidade significativa de memória não utilizada.
Você pode usar SlurmQueues/ComputeResources/SchedulableMemorypara ajustar o valor de RealMemory
configure by AWS ParallelCluster para nós de computação. Para substituir o padrão, defina um valor personalizado para SchedulableMemory
especificamente para sua configuração de cluster.
Para verificar a memória real disponível de um nó de computação, execute o comando /opt/slurm/sbin/slurmd -C
no nó. Esse comando retorna a configuração de hardware do nó, incluindo o valor RealMemory
slurmd
-C
Certifique-se de que os processos do sistema operacional do nó de computação tenham memória suficiente. Para fazer isso, limite a memória disponível para trabalhos definindo o valor de SchedulableMemory
como menor do que o valor de RealMemory
retornado pelo comando slurmd -C
.