O erro "invalid device ordinal" que você está enfrentando é peculiar, especialmente porque nvidia-smi
e GPU.get_available_devices()
detectam sua GPU corretamente.
Vamos abordar suas perguntas e possíveis soluções:
Sim, o HOOMD-blue (e o CUDA em geral) é projetado para ser compatível com GPU no WSL2. A NVIDIA tem feito esforços significativos para garantir que suas GPUs e o CUDA funcionem perfeitamente dentro do WSL2, incluindo o suporte para o subsistema de GPU virtual (vGPU) que o WSL2 utiliza. Muitos usuários executam com sucesso aplicações CUDA, incluindo outras bibliotecas de simulação e aprendizado de máquina, dentro do WSL2.
O fato de você conseguir ver a GPU com nvidia-smi
e o HOOMD listar a GPU disponível indica que a camada de comunicação entre o WSL2, os drivers NVIDIA e o runtime CUDA está funcionando em um nível básico. O problema parece ser mais específico à forma como o HOOMD está tentando inicializar o dispositivo.
O erro "invalid device ordinal" geralmente ocorre quando o programa tenta acessar uma GPU usando um índice que não corresponde a um dispositivo válido ou quando há um problema subjacente na inicialização do contexto CUDA para aquele dispositivo. Dado que você já tentou device_id=0
e CUDA_VISIBLE_DEVICES=0
, e sua GPU é a única listada, o problema não é a seleção de um índice incorreto.
Aqui estão algumas abordagens e considerações para tentar resolver o problema:
Verifique a Versão do Driver NVIDIA:
Embora você mencione "drivers mais recentes", certifique-se de que são os drivers mais recentes para WSL2. A NVIDIA lança drivers específicos para o WSL2 que contêm otimizações e correções. Você pode baixá-los diretamente do site da NVIDIA (geralmente na seção de drivers para desenvolvedores ou drivers de notebook).
Pode ser útil tentar um driver ligeiramente mais antigo, mas ainda compatível com WSL2, para descartar uma regressão em uma versão muito recente.
Atualize o Kernel do WSL2:
Certifique-se de que o kernel do WSL2 está atualizado. Problemas de compatibilidade entre o kernel do Linux e os drivers da GPU podem causar erros estranhos.
Abra o PowerShell como administrador e execute:
PowerShell
wsl --update
wsl --shutdown
Reinicie o Ubuntu no WSL2.
Verifique a Versão do CUDA Toolkit:
Você mencionou que testou o CUDA Toolkit 12.2 e 11.8. O HOOMD-blue 5.2.0 é compilado contra uma versão específica do CUDA. Embora o CUDA seja geralmente retrocompatível, pode haver pequenas incompatibilidades.
Sugestão: Verifique a documentação oficial do HOOMD-blue 5.2.0 ou as notas de versão para ver qual versão do CUDA Toolkit é a recomendada ou utilizada para a compilação oficial das builds do Conda/Micromamba. Tentar corresponder essa versão pode resolver o problema.
Às vezes, ter várias versões do CUDA Toolkit instaladas pode causar conflitos nas variáveis de ambiente. Certifique-se de que o PATH
e outras variáveis estão apontando corretamente para a versão que você deseja usar.
Teste com um Exemplo CUDA Mais Simples:
pycuda
ou numba
com CUDA) que apenas inicialize um dispositivo e faça uma operação trivial. Se esses exemplos funcionarem, o problema é mais provável que seja específico da interação do HOOMD. Se eles falharem, o problema é mais fundamental na sua configuração CUDA/WSL2.Variáveis de Ambiente Adicionais do CUDA:
Embora CUDA_VISIBLE_DEVICES
seja o mais comum, pode haver outras variáveis de ambiente do CUDA que afetam a inicialização do dispositivo.
Por exemplo, CUDA_LAUNCH_BLOCKING=1
pode ajudar a depurar, forçando as chamadas CUDA a serem síncronas, o que pode revelar o ponto exato da falha. Não é uma solução, mas pode ajudar na depuração.
Reinstalação Limpa do HOOMD (e dependências):
Às vezes, pacotes podem ser corrompidos. Tente criar um novo ambiente Micromamba/Conda do zero e instale apenas o HOOMD:
Bash
micromamba create -n hoomd_env python=3.10
micromamba activate hoomd_env
micromamba install hoomd=5.2.0
Isso garante que não há conflitos de pacotes ou arquivos residuais de instalações anteriores.
Verifique Logs de Erro do Sistema:
dmesg
, /var/log/syslog
).Se as opções acima não funcionarem, e você precisar de aceleração de GPU, as principais alternativas (além de hoomd.device.CPU()
) seriam:
Linux Nativo: A maneira mais robusta de garantir compatibilidade e desempenho máximo para cargas de trabalho de GPU é executar o Linux nativamente (dual boot ou em uma máquina dedicada). Isso elimina a camada de virtualização do WSL2 e seus potenciais overheads ou incompatibilidades.
Windows Nativo (se HOOMD oferecer suporte GPU nativo): Verifique se o HOOMD-blue oferece builds com suporte a GPU para Windows. Se sim, essa seria uma alternativa mais simples do que o Linux nativo, embora o desempenho possa não ser idêntico ao do Linux.
Embora eu não tenha acesso a feedback de usuários em tempo real sobre o HOOMD-blue especificamente no WSL2, a comunidade CUDA em geral tem tido sucesso significativo. O erro "invalid device ordinal" é geralmente um sinal de que algo está errado na interação entre o runtime CUDA, os drivers e o ambiente (neste caso, o WSL2).
A chave para resolver problemas como este no WSL2 é garantir que:
Os drivers NVIDIA no Windows são os compatíveis com WSL2 e estão atualizados.
O kernel do WSL2 está atualizado.
A versão do CUDA Toolkit que você está usando no ambiente Micromamba/Conda é compatível com a versão do HOOMD-blue que você instalou.
Espero que estas sugestões o ajudem a resolver o problema! Se puder fornecer mais detalhes sobre a versão exata do seu driver NVIDIA para WSL2 e a output completa do erro, isso pode ajudar a refinar o diagnóstico.