VUDA: implementação de CUDA sobre Vulkan
(github.com/jgbit)- VUDA é uma biblioteca header-only baseada em Vulkan que fornece uma interface da CUDA Runtime API para escrever aplicações com aceleração por GPU
- As funcionalidades seguem a especificação do CUDA runtime dentro do que é possível, e para uso geral pode-se consultar a documentação de referência da NVIDIA CUDA Runtime API
- Todos os recursos podem ser acessados incluindo
vuda.hppe usando o namespacevuda::, enquantovuda_runtime.hppencapsula e redireciona as funcionalidades de CUDA - O fluxo de trabalho de exemplo usa chamadas da CUDA Runtime API como
cudaSetDevice,cudaMalloc,cudaMemcpyecudaFree, e quando não se usa NVCC executa um módulo de shader Vulkan comvuda::launchKernel("add.spv", "main", ...) - A documentação inclui os itens Change List, Setup and Compilation, Deviations from CUDA e Implementation Details
1 comentários
Comentários do Hacker News
Não é uma implementação de CUDA, mas sim da API de runtime do CUDA
Essa API é usada para configuração da placa, alocação e cópia de memória e execução de kernels
O importante é que com isso não dá para escrever código de kernel que realmente rode na GPU
Caso contrário, em muitas cargas de trabalho nem dá para começar
Também existe um wrapper de API Modern C++ que oferece verificação automática de erros, controle de recursos com RAII etc.: https://github.com/eyalroz/cuda-api-wrappers
Por sinal, eu sou o autor
Para coisas como isolamento de contexto ou adição dinâmica como módulo de kernels JIT recém-compilados, o importante é implementar a API de driver
Só para encapsular toda a API central do CUDA — ou seja, driver, runtime, NVTX, CUDA-C++ e compilação JIT de PTX — foram necessárias mais de 14.000 linhas
Gostaria de entender como isso se relaciona com o objetivo que George Hotz mencionou, de viabilizar machine learning em chips AMD e quebrar o domínio da Nvidia
Não sou especialista, mas essa abordagem parece poderosa e importante
Só que o sistema é tão complexo que duvido que uma pessoa sozinha consiga fazer isso, e parece algo que precisaria de patrocínio empresarial para começar
Talvez a própria AMD pudesse se interessar em bancar o custo de engenharia para melhorar isso iterativamente
Agora me sinto um pouco melhor em relação à minha própria jornada usando AMD
Parecia haver grandes problemas nos drivers de GPU, e agora sei que não era só comigo
Para quem quer treinar ou executar modelos de machine learning em GPUs AMD no Windows, talvez valha a pena conferir torch-directml e tensorflow-directml
CUDA e DirectX parecem baixos demais para servir como uma API compatível entre hardwares tão diferentes, ou seja, AMD e Nvidia, sem abrir mão de muito desempenho
cuDNN é de nível mais alto, então há mais espaço para oferecer compatibilidade sem perda de desempenho, mantendo implementações de kernel separadas e adaptadas ao hardware da AMD e da Nvidia
Mas boa parte do que frameworks como PyTorch fazem se baseia não só em cuDNN, mas também em kernels customizados
A melhor escolha para a AMD parece ser uma API de baixo nível sólida e estável, junto com suporte a compiladores de machine learning otimizados de nível mais alto que facilitem para fornecedores de frameworks como PyTorch, TensorFlow e JAX criarem suporte em cima disso
No fim, quem se beneficia disso são os fornecedores de frameworks, então a AMD precisa trabalhar de forma muito próxima com eles
É estranho que a AMD tenha tratado o suporte a machine learning como algo secundário por anos
Talvez tenha considerado o mercado consumidor de machine learning pequeno demais em comparação com o mercado de gráficos e games para justificar o esforço, mas como a Nvidia mostrou, esse é o caminho para contratos de datacenter muito mais lucrativos
A última vez que usei DirectML, o suporte era fraco e havia pouco software com suporte a isso
O desempenho também não parecia grande coisa
Hoje uso uma instalação Linux e, graças ao ROCm, consigo usar ferramentas populares como Automatic111 webui e oobabooga
Se a AMD lançar uma GPU com preço razoável que vença a Nvidia em machine learning, talvez eu compre uma GPU nova
Uma GPU decente da Nvidia é cara demais para justificar a compra
Parece um projeto morto
O último commit é de fevereiro de 2022
A maior parte do código é de 3 a 5 anos atrás
Nunca programei GPU diretamente, então pergunto: como isso se compara ao HIP?
Pode ser uma camada de abstração eficiente sobre GPUs Nvidia e AMD?
Ela converte o código CUDA em uma árvore sintática abstrata, os matchers de transformação percorrem essa árvore e depois emitem o código HIP
Além disso, a lista de APIs CUDA compatíveis com o hipify-clang está aqui: https://rocm.docs.amd.com/projects/HIPIFY/en/latest/supporte...
Não tenho muita esperança na AMD
Já deveria ter criado ferramentas de compatibilidade há muito tempo
Projetos desse tipo aparecem com certa frequência, mas não ganharam tração, e eu continuo usando GPUs Nvidia
Não acho que este será muito diferente
Bem interessante
Então isso quer dizer que meu programa acelerado por CUDA deveria poder rodar também em dispositivos AMD e Intel?