====== Servidores de processamento ======
Existem diversos grupos de pesquisa que dispõem de recurso próprio para processamento. O objetivo deste artigo não é descrever completamente a infraestrutura de processamento do IME, mas descrever a infraestrutura de processamento disponível para toda a comunidade do IME.
Contamos com três servidores de processamento: brucutuiv, brucutuv e brucutuvi. Todos os servidores operam com o sistema [[https://debian.org/|Debian GNU/Linux]] na versão estável contando com diversos pacotes possibilitando a compilação de programas em C, bem como a execução de scripts em Python, R etc. O acesso a tais servidores é remoto se dá a partir do protocolo [[tutoriais:como_acessar_a_rede_ime_de_fora|SSH]]. Lembrando que é **necessário** [[https://criaconta.ime.usp.br|criar a conta]] na rede do IME para o acesso remoto.
Exemplo:
ssh usuario@brucutu.ime.usp.br
**OBS:** o acesso às brucutus V e VI se dá apenas a partir do ambiente interno. Então é preciso [[tutoriais:como_acessar_a_rede_ime_de_fora|acessar remotamente a rede do IME]] e, de lá, fazer outro SSH.
===== Configuração =====
As configurações simplificadas de hardware dos computadores são as seguintes:
^ servidor ^ processador ^ núcleos ^ threads* ^ memória RAM ^ coprocessador ^
| brucutuiv | 2x [[https://ark.intel.com/content/www/us/en/ark/products/91767/intel-xeon-processor-e5-2650-v4-30m-cache-2-20-ghz.html|Intel Xeon E5-2650 v4]] | 12 | 24 | 384GB | [[https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Center/tesla-product-literature/TeslaK80-datasheet.pdf|Nvidia Tesla K40]] |
| brucutu | 2x [[https://ark.intel.com/content/www/us/en/ark/products/120489/intel-xeon-gold-6148-processor-27-5m-cache-2-40-ghz.html|Intel Xeon Gold 6148]] | 20 | 40 | 512GB | N/A |
| brucutuvi | 2x [[https://ark.intel.com/content/www/us/en/ark/products/120489/intel-xeon-gold-6148-processor-27-5m-cache-2-40-ghz.html|Intel Xeon Gold 6148]] | 20 | 40 | 512GB | [[https://www.nvidia.com/en-us/data-center/v100/|Nvidia Tesla V100]] |
* Com [[https://en.wikipedia.org/wiki/Hyper-threading|hyperthreading]], a quantidade efetiva linhas de processamento é o dobro do número de núcleos.
===== Política de uso =====
- Não ocupar as duas GPUs. Se acontecer, poderemos matar o seu processo **mais antigo**;
- Não pode ocupar mais do que duas máquinas em CPU. Se acontecer, poderemos matar seus processos **mais antigos**;
- Se um processo passar de **168h** (uma semana corrida), ele poderá ser morto para liberar recursos para outros usuários;
- Se um processo usar **todo** o recurso da GPU, ele poderá ser morto para liberar o recurso para outros usuários;
- A SI não se responsabilizará pelos processos mortos que não obedecerem esta política de uso.
Em essência: //Brute force science should be avoided//.
===== Pacotes =====
Costumamos instalar bibliotecas mais generalistas como o ''r-recommended'' ou o ''build-essential''. Caso for necessário a instalação de algo mais específico, basta escrever para admin@ime.usp.br solicitando a instalação.
Atentamos que pode acontecer de não ser possível instalar a dependência por se tratar de uma versão conflitante com o que a versão estável do Debian tem a oferecer.
===== Boas práticas =====
- Utilizar o comando **screen**;
- Não usar a área de rede como origem ou destino de dados para seu programa. Usar ''/var/tmp'' ou ''/var/fasttmp'' (com SSD);
- Usar **checkpoint**. Caso ocorra uma queda de energia ou travamento do servidor, o seu processo poderá reiniciar e continuar o processamento de algum ponto próximo à queda;
- Por se tratarem de servidores compartilhados, limitamos o processamento e a memória disponível por usuário.
==== Sobre o GNU Screen ====
Para abrir uma sessão no ''screen'', basta rodar o comando ''screen''. Dentro da screen, basta rodar seu programa como o habitual.
Para sair de uma sessão da screen sem fechá-la, ''Ctrl+A'' depois a tecla ''D''.
Para retomar uma sessão da screen, basta rodar o comando ''screen -r''. Se houver mais de uma screen aberta, será necessário identificá-la. Cada screen terá um número de processo associado a ela, basta especificá-lo.
Exemplo:
$ screen -r
There are screens on:
31415.pts-9.amaterasu (26/02/2020 05:35:08) (Detached)
9793.pts-2.amaterasu (26/02/2020 03:08:46) (Detached)
# seu processo é o 31415
$ screen -r 31415