
Trabalho em um laboratório de pesquisa com múltiplas máquinas físicas com especificações diferentes. As máquinas têm CPUs diferentes (algumas Intel, algumas AMD), diferentes tamanhos de RAM, algumas têm GPUs discretas e outras não.
Nossa solução atual é baseada em SSSD e Kerberos, para que os usuários possam fazer login em suas contas a partir de qualquer terminal e ter acesso aos seus arquivos. O problema é que, dessa forma, os usuários ficam “amarrados” a uma máquina enquanto trabalham, resultando em uma alocação de recursos abaixo do ideal.
Portanto, estamos procurando uma solução alternativa para nosso cluster. Nosso principal objetivo é unificar verdadeiramente todas as máquinas, ou seja, do ponto de vista do usuário, o cluster consiste em uma única máquina. Porém, pelo que concluímos, uma solução como o Slurm não é ideal, pois não queremos depender de um agendador de tarefas. A solução que imaginamos é mais ou menos assim: quando um usuário faz login, ele pode especificar as especificações necessárias (RAM, número de CPUs, GPU discreta, etc.) e, em seguida, um ambiente virtualizado com as especificações desejadas é criado (uma imagem Docker , ou uma máquina virtual, por exemplo). O usuário pode então usar esse ambiente como um “computador” normal. No entanto, os recursos para este ambiente virtual devem ser retirados do cluster e não de uma única máquina. Também deverá ser possível partilhar grandes conjuntos de dados que possam ser acedidos por qualquer “ambiente virtual”. O cluster também deve possuir um sistema de autenticação e permissão.
Temos procurado ferramentas de cluster que possam atingir nosso objetivo, mas não temos certeza de qual escolher. Analisamos Mesos, OS/DB, Docker Swarm, Kubernetes e oVirt, mas não sabemos se o que queremos pode ser alcançado com essas ferramentas e, em caso afirmativo, qual é a melhor escolha. Acreditamos que os contêineres podem ser uma boa opção para produção, mas provavelmente não a melhor escolha para P&D.Vocês podem nos ajudar e dar alguns destaques sobre o que fazer e por onde começar?
Atenciosamente, pinxau1000
Responder1
Concordo com @NikitaKipriyanov que você não pode combinar recursos de vários sistemas em uma única imagem, embora existam produtos comerciais que faziam isso no passado e dependiam do infiniband para manter a latência baixa (IMHO, não funcionou bem). Slurm pode ser usado como um agendador, mas você também pode usá-lo para trabalhos interativos e, então, pode ser mais um gerenciador de recursos.
Cada trabalho pode especificar o número de núcleos de CPU, número e tipo de GPUs, quantidade de memória, etc. O agendador então escolherá um sistema apropriado e não utilizado e fornecerá um prompt de shell. O encaminhamento X11 está disponível se necessário.
Além disso, os contêineres podem ser bastante úteis em um ambiente de P&D. Você não deve jogá-los fora porque não vê a utilidade, mas eles não são a solução para este problema.
Responder2
Não é possível.
- CPUs diferentes significam que as instruções podem ser diferentes. Isto é um pesadelo se você deseja migrar código entre CPUs.
- A latência da memória está em nanossegundos, a latência da rede em dezenas de microssegundos.
Dependendo da sua carga de trabalho, pode ser possível traduzi-la para execução em vários computadores e comunicar dados entre eles. Para alguns problemas, isso é trivial e você pode dividir o conjunto de dados em partições menores e trabalhar nelas em paralelo. Para outras cargas de trabalho isso é difícil. Mas isso requer modificações na carga de trabalho, não no sistema operacional.