Skip to content
Snippets Groups Projects
Commit 201a3485 authored by Bruno Sime Ferreira Nunes's avatar Bruno Sime Ferreira Nunes
Browse files

Update 3 files

- /source/_static/c3hpc/WhatsApp Image 2025-03-24 at 11.57.01.jpeg
- /source/_static/c3hpc/WhatsApp Image 2025-03-24 at 11.57.01 (1).jpeg
- /source/pages/guides/como-instalar-o-c3hpc.md
parent 611dedb7
No related branches found
No related tags found
No related merge requests found
source/_static/c3hpc/WhatsApp Image 2025-03-24 at 11.57.01 (1).jpeg

850 KiB

source/_static/c3hpc/WhatsApp Image 2025-03-24 at 11.57.01.jpeg

912 KiB

# Guia de Instalação do C3HPC
Este documento fornece as informações necessárias para a instalação do C3HPC (ou quase todas elas).
## Montagem do Rack:
- Coloque as familias de máquinas juntas, de maneira que nós homogeneos fiquem empilhados.
- No nosso caso temos um JBOD para armazenamento. Coloque na parte mais baixa do rack, por conta do peso.
- Coloque máquinas pesadas nas partes baixas do rack.
- Cabos de rede de um lado, cabos de energia do outro.
- O rack esta organizado da seguinte forma:
![](../../_static/c3hpc/WhatsApp%20Image%202025-03-24%20at%2011.57.01%20(1).jpeg)
- frente
![](../../_static/c3hpc/WhatsApp%20Image%202025-03-24%20at%2011.57.01.jpeg)
- fundos
## A rede:
A rede do c3hpc é composta por um servidor DHCP com duas interfaces: uma WAN e uma LAN. O switch está configurado para que exista uma VLAN isolada para os nós.
A comunicação do headnode é feita via SFP+ 10Gbps, tanto WAN quanto LAN.
A comunicação dos nós é ETH 1Gbps.
## Instalação do headnode:
- Instale o Ubuntu Server.
- Uma ferramenta que ajuda muito a administrar o headnode é o Webmin, estamos usando. Depois de instalado ele fica em localhost:10000.
- Instale o server NFS: `sudo apt update & sudo apt install -y nfs-server`
- Crie a rede local para os nós, no nosso caso é 10.0.1.0/24, com o gateway sendo 10.0.1.1/24
- Adicione os nós na rede com IP fixo.
- Crie o servidor TFTP para o boot remoto:
- Os nós precisam de diretórios unicos para a raiz do kernel de cada máquina. **Não da pra fazer um kernel genérico para todos os nós. Eles são e precisam ser diferentes.** (Não queremos mais scripts demoniacos que apagam o /*)
- Instale o SO nos nós. Todos os nós precisam estar na mesma release do Ubuntu.
- Instale o servidor LDAP: esse é importante para manter os mesmos UIDs e GIDs em todos os membros do cluster.
- O [manual da Canonical](https://documentation.ubuntu.com/server/how-to/openldap/install-openldap/index.html) é bem bom pra fazer isso.
- Após criar o server LDAP, adicione um grupo e um usuário de sistema 'slurm' com UID e GID 151.
- Instale o Munge: `sudo apt update & sudo apt install -y libmunge2 libmunge-dev munge`
- O SLURM usa o Munge para autenticar as coisas no headnode. Todos os nós externos ao headnode devem ter a chave do headnode.
- O Munge é BEM chato com permissões, não mexa nas permissões ou ownership de nada sem que seja **MUITO** necessário.
- A chave do munge fica em `/etc/munge/munge.key`
- Instale o Slurm Controller Daemon: `sudo apt update & sudo apt install -y slurmctld`
- Coloque todos os nós no arquivo `/etc/hosts`. Exemplo:
```shell
root@c3hpc-headnode:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 c3hpc-headnode
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# Nós do cluster
10.0.1.1 c3hpc-headnode
10.0.1.101 node1
10.0.1.102 node2
10.0.1.103 node3
10.0.1.104 node4
10.0.1.105 node5
10.0.1.106 node6
10.0.1.107 node7
10.0.1.108 proc1
10.0.1.109 proc2
10.0.1.110 pti
10.0.1.111 vti1
10.0.1.112 vti2
10.0.1.113 c3hpc
root@c3hpc-headnode:~#
```
- Use a [ferramenta de configuração do SLURM](https://slurm.schedmd.com/configurator.html) para gerar um modelo básico do documento que fica em `/etc/slurm/slurm.conf` (recomendo exportar esse diretório no NFS e montar ele **read-only** no `/etc/fstab` de todos os nós, assim quando uma configuração precisa ser alterada, ela já é refletida automaticamente nos nós).
- Todos os membros do cluster precisam ter o mesmo conteúdo no diretório `/etc/slurm/`
- O documento `slurm.conf` contém a especificação de todos os nós, aqui estão as orientações sobre como especificar:
- Se a máquina tem 512GB de RAM, especifique 500GB no documento. Lembre-se que os nós são máquinas independentes que precisam se auto-gerenciar.
- Existe uma infinidade de parâmetros que dá pra configurar, acesse o [manual do slurm.conf](https://slurm.schedmd.com/slurm.conf.html) para mais detalhes.
- a especificação das máquinas com GPU é diferente. O arquivo /etc/slurm/gres.conf precisa conter o path do dispositivo de cada máquina, exemplo:
```shell
root@c3hpc-headnode:~# cat /etc/slurm/gres.conf
NodeName=vti1 Name=gpu File=/dev/nvidia0 Type=V100 Cores=0,1
NodeName=vti1 Name=gpu File=/dev/nvidia1 Type=V100 Cores=2,3
NodeName=vti1 Name=gpu File=/dev/nvidia2 Type=V100 Cores=3,4
NodeName=vti1 Name=gpu File=/dev/nvidia3 Type=V100 Cores=5,6
NodeName=vti2 Name=gpu File=/dev/nvidia0 Type=V100 Cores=0,1
NodeName=vti2 Name=gpu File=/dev/nvidia1 Type=V100 Cores=2,3
NodeName=vti2 Name=gpu File=/dev/nvidia2 Type=V100 Cores=3,4
NodeName=vti2 Name=gpu File=/dev/nvidia3 Type=V100 Cores=5,6
NodeName=pti Name=gpu File=/dev/nvidia0 Type=P100 Cores=0,1
NodeName=pti Name=gpu File=/dev/nvidia1 Type=P100 Cores=2,3
root@c3hpc-headnode:~#
```
note que é interessante deixar especificado quais cores das CPUs serão usados para coordenação das tarefas das GPUs, pois estes ficarão reservados para isso.
## Instalação dos nós escravos:
Com o headnode pronto, a primeira coisa a ser feita é começar com a instalação dos nós.
- Instale todas os drivers dos dispositivos periféricos, caso haja.
- Monte os locais necessários no `/etc/fstab`, exemplo:
```shell
root@node2:~# cat /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
10.0.1.1:/zfs_filesystem/srv/pxe-boot/nodes/node2 / nfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
10.0.1.1:/zfs_filesystem/srv/home /home nfs auto,nofail,noatime 0 0
# DIRETORIO COM AS CONFS DO SLURM
10.0.1.1:/etc/slurm /etc/slurm nfs auto,nofail,noatime 0 0
# DISCO DE SCRATCH
/dev/sda1 /scratch ext4 defaults,nofail 0 2
root@node2:~#
```
- Precisamos configurar o LDAP e para isso vamos instalar os pacotes necessários:
```shell
apt update & apt -y install libnss-ldap libpam-ldap ldap-utils nscd
```
Durante a instalação dos pacotes será aberto um setup para configuração de alguns parametros do LDAP. Configure somente os campos que tem dados que podem ser inseridos, como endereços. Os campos que são com opções de multipla escolha não devem ser alterados.
Após a conclusão do setup do LDAP precisamos alterar alguns arquivos que deverão ficar assim:
```shell
root@c3hpc-headnode:~# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat systemd ldap
group: compat systemd ldap
shadow: compat
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
root@c3hpc-headnode:~#
```
,
```shell
root@c3hpc-headnode:~# cat /etc/pam.d/common-password
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords. The default is pam_unix.
# Explanation of pam_unix options:
# The "yescrypt" option enables
#hashed passwords using the yescrypt algorithm, introduced in Debian
#11. Without this option, the default is Unix crypt. Prior releases
#used the option "sha512"; if a shadow password hash will be shared
#between Debian 11 and older releases replace "yescrypt" with "sha512"
#for compatibility . The "obscure" option replaces the old
#`OBSCURE_CHECKS_ENAB' option in login.defs. See the pam_unix manpage
#for other options.
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
password [success=2 default=ignore] pam_unix.so obscure yescrypt
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass
# here's the fallback if no module succeeds
password requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password required pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
root@c3hpc-headnode:~#
```
e
```shell
root@c3hpc-headnode:~# cat /etc/pam.d/common-session
#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of interactive sessions.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
session [default=1] pam_permit.so
# here's the fallback if no module succeeds
session requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required pam_permit.so
# The pam_umask module will set the umask according to the system default in
# /etc/login.defs and user settings, solving the problem of different
# umask settings with different shells, display managers, remote sessions etc.
# See "man pam_umask".
session optional pam_umask.so
# and here are more per-package modules (the "Additional" block)
session required pam_unix.so
session optional pam_ldap.so
session optional pam_systemd.so
# end of pam-auth-update config
session optional pam_mkhomedir.so skel=/etc/skel umask=077
root@c3hpc-headnode:~#
```
Finalizadas as edições, reinicie o nscd:
```shell
sudo systemctl restart nscd
```
- Agora vamos configurar o Munge:
```shell
sudo apt update & sudo apt install -y libmunge2 libmunge-dev munge
```
O SLURM usa o Munge para autenticar os processos, copie `/etc/munge/munge.key` **do headnode** para todos os nós escravos e corrija as permissões.
```shell
sudo chown -R munge: /etc/munge/ /var/log/munge/ /var/lib/munge/ /run/munge/
sudo chmod 0700 /etc/munge/ /var/log/munge/ /var/lib/munge/
sudo chmod 0755 /run/munge/
sudo chmod 0700 /etc/munge/munge.key
sudo chown -R munge: /etc/munge/munge.key
```
- Instale o daemon SLURM:
```shell
sudo apt update & sudo apt install -y slurmd
```
- Se você fez tudo certo o SLURM já deve estar funcionando.
## O nó de login:
Fizemos uma VM na **torneira8** que serve apenas para o usuário logar no C3HPC, gerenciar seu ambiente conda e submeter jobs para o SLURM.
Com essa abordagem nós limitamos ao máximo o contato do usuário com o nó controlador.
### Para instalar o nó de login:
É um processo bastante parecido com a instalação de um nó escravo: precisamos montar todos os caminhos no `/etc/fstab`, configurar o LDAP, setar o local do anaconda3 em `/etc/bash.bashrc` e instalar os pacotes com:
```shell
apt update & apt install slurm-client
```
Se todos os caminhos estiverem certos, basta testar com:
```shell
sinfo & srun hostname
```
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment