1 pontos por GN⁺ 2023-07-03 | 1 comentários | Compartilhar no WhatsApp
  • 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.hpp e usando o namespace vuda::, enquanto vuda_runtime.hpp encapsula e redireciona as funcionalidades de CUDA
  • O fluxo de trabalho de exemplo usa chamadas da CUDA Runtime API como cudaSetDevice, cudaMalloc, cudaMemcpy e cudaFree, e quando não se usa NVCC executa um módulo de shader Vulkan com vuda::launchKernel("add.spv", "main", ...)
  • A documentação inclui os itens Change List, Setup and Compilation, Deviations from CUDA e Implementation Details

1 comentários

 
GN⁺ 2023-07-03
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

    • Fiquei levemente animado achando que isso significava poder rodar código CUDA em GPUs AMD, mas pela explicação não é isso
    • Então fico me perguntando em que isso seria útil
    • Para se apresentar como substituto de CUDA, é preciso suporte a PTX e suporte ao desenvolvimento em várias linguagens
      Caso contrário, em muitas cargas de trabalho nem dá para começar
    1. Isto implementa uma API estilo C meio rudimentar
      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
    2. Implementar a API de runtime não é a escolha certa
      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
    3. Este projeto tem menos de 3000 linhas
      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

    • Hotz está falando não só de bibliotecas em espaço de usuário, mas também de drivers

      The software is terrible! There’s kernel panics in the driver. You have to run a newer kernel than the Ubuntu default to make it remotely stable. I’m still not sure if the driver supports putting two cards in one machine, or if there’s some poorly written global state. When I put the second card in and run an OpenCL program, half the time it kernel panics and you have to reboot.
      Ele também trata da parte de espaço de usuário, mas claramente vê muito a ser corrigido em toda a stack acima e abaixo dessas bibliotecas

    • Encontrei https://www.youtube.com/watch?v=Mr0rWJhv9jU e https://geohot.github.io/blog/jekyll/update/2023/06/07/a-div...
      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

    • Não sei ao certo se DirectML faz mais sentido do que a AMD correr atrás de compatibilidade com CUDA via ROCm/MiOpen/HIP
      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
    • Fico curioso sobre como isso funciona na prática
      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
    • Isso realmente funciona?
      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

    • E além disso, esse commit foi só a adição de uma linha
      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?

  • 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?