- Perguntas Frequentes
Essa é uma revisão anterior do documento!
A única máquina que tem placas de vídeo Nvidia com capacidade CUDA é a dota. Ela está equipada com duas Nvidia Tesla K20c SM35.
A versão atual é o CUDA Toolkit 9.1 e planejamos mantê-lo atualizado sempre que possível.
Para poder usar qualquer parte do CUDA (compilar e executar comandos) é necessário que você faça ssh
para o servidor dota, de dentro da rede linux (Se ainda não está dentro da rede veja aqui como acessá-la externamente), através do comando:
ssh dota
Uma vez logado na dota, podemos iniciar a preparação. Não se preocupe, esse passo só é necessário na primeira vez.
Para poder usar o nvcc e outros comandos do CUDA toolkit, é necessário adicionar a pasta /usr/local/cuda/bin para a sua variável de ambiente PATH. O comando abaixo deve funcionar se o seu shell for o bash(padrão na rede linux):
echo "export PATH=\$PATH:/usr/local/cuda/bin" >> ~/.bashrc
A Nvidia provê vários exemplos pequenos, mas muito abrangentes, de código CUDA. Eles estão localizados na pasta /nvidia/NVIDIA_CUDA-X.X_Samples
, onde o X.X é a versão mais recente do CUDA Toolkit. Para poder compilar, modificar ou executar esses códigos, você deve copiá-los para alguma pasta de sua preferência dentro de sua home:
cp -r /nvidia/NVIDIA_CUDA-9.1_Samples ~/cuda_samples
O compilador do CUDA aceita códigos C e C++, além do próprio CUDA. Para compilar um arquivo de código, basta chamar o nvcc como se fosse qualquer outro compilador de C.
nvcc codigo.cu
Para rodar o executável gerado também é como qualquer outro. IMPORTANTE Não crie seu próprio nvidia-cuda-mps-server, já há um processo desses para gerenciar todos os executáveis rodados pelos usuários.
Como o servidor possui duas GPUS, é necessário informar em qual delas seu kernel
irá rodar. Para isso basta antes de chamar o kernel
colocar a linha:
cudaSetDevice(id);
Onde id é 0 ou 1 dependendo de qual GPU é para ser utilizada. É possível também executar, usando esse método, programas que rodam em várias GPUs, porém eles requerem maior otimização para compensar o overhead da comunicação inter-GPUs. Lembrando que mais de um programa pode rodar em cada GPU, mesmo sendo de outro usuário.
Comando | Descrição |
---|---|
nvcc | Compilador de código CUDA |
cudatop | Exibe informações de proessos dos usuários e uso das GPUS |
nvidia-smi | Display de informações gerais das gpus |
O comando nvidia-smi
é na verdade uma variedade de comandos juntos num comando só (vide nvidia-smi -h
) . Com ele é possível obter informações como id, uso e memória livre das GPUs e quais processos estão rodando nelas (grealmente os processos serão gerenciados pelo mps-server
e não aparecerão individualmente), o que facilita na hora de escolher uma GPU mais livre para rodar o seu programa(livre em termos de memória).
O nvidia-cuda-mps-server
é um processo gerenciador das gpus, ele é rodado pelo root e não atrapalha a execução do seu processo.
O fim do servidor de GPUs da Rede Linux é o uso por parte dos alunos para fins acadêmicos como EPs, projetos, testes, experimentos, etc.. Assim, o uso das GPUs para fins não acadêmicos, como MINERAÇÃO de criptomoedas, são EXPRESSAMENTE PROIBIDOS