24 pontos por GN⁺ 2025-04-05 | 2 comentários | Compartilhar no WhatsApp
  • O CUDA se expande para além de um ecossistema centrado em C/C++, caminhando para permitir que desenvolvedores Python lidem de forma mais direta com computação em GPUs NVIDIA
  • O novo suporte não é apenas um binding simples, mas uma tentativa de integrar interfaces Python e fluxos de scripting em todo o toolkit CUDA
  • A stack CUDA Python inclui bindings básicos, compilador em tempo de execução, cuPyNumeric, CUDA Core, NVMath Python, profiler e ferramentas de análise de código
  • A NVIDIA busca aumentar a produtividade em Python usando compilação JIT e integração com código C++ existente, mantendo pequena a diferença de desempenho
  • A interface CuTile é um modelo que facilita para desenvolvedores Python entender e depurar trabalhos na GPU em termos de arrays e tiles, em vez de threads

Python nativo chega ao CUDA

  • Segundo a pesquisa de open source de 2024 do GitHub, Python ultrapassou JavaScript e se tornou a linguagem de programação mais popular do mundo
  • O toolkit de software CUDA, da NVIDIA, não tinha suporte nativo a Python por muitos anos, mas na GTC foram anunciados suporte nativo e integração completa
  • Desenvolvedores podem escrever diretamente em Python computação algorítmica que roda em GPUs NVIDIA
  • Stephen Jones, arquiteto do CUDA, afirmou que a empresa vem trabalhando para trazer “Python acelerado” à stack CUDA como suporte de primeira classe
  • A nova direção não é levar C para a sintaxe de Python, mas criar um CUDA Python natural para desenvolvedores Python

Expansão para a base de desenvolvedores Python

  • O CUDA antes exigia conhecimento de C++ ou Fortran e, embora houvesse algumas ferramentas Python, elas não eram suporte nativo
  • O suporte nativo a Python abre as ferramentas de desenvolvimento CUDA para milhões de desenvolvedores Python
  • Segundo o The Futurum Group, o número de usuários CUDA cresceu de 2 milhões em 2020 para 4 milhões em 2023
  • Python é uma linguagem em rápido crescimento, e a NVIDIA passa a alcançar também desenvolvedores Python em países em desenvolvimento, como Índia e Brasil
  • Embora uma parcela significativa das GPUs NVIDIA esteja nos EUA e na Europa, empresas de telecomunicações e infraestrutura da Índia estão construindo grandes instalações de GPU que entrarão em operação no futuro
  • A NVIDIA vem investindo no recrutamento de programadores e pretende oferecer suporte a mais linguagens de programação, incluindo Rust e Julia

Composição da stack CUDA Pythonic

  • O CUDA inclui bibliotecas, SDKs, compiladores, runtime do host, ferramentas, software pré-empacotado e algoritmos
  • A NVIDIA adicionou componentes em toda a stack Pythonic CUDA
  • O objetivo central é oferecer aceleração por GPU sem sair de Python
  • Segundo Jones, CUDA Python não deve se limitar a fornecer kernels; é preciso um fluxo de execução fluido com toda a stack
    • Deve ser possível escrever um kernel e colocá-lo no PyTorch
    • Também deve ser possível chamar bibliotecas Pythonic e outros componentes
  • A camada de compilador é, na prática, centrada em compilação JIT, reduzindo bastante a árvore de dependências da stack de GPU
  • A interoperabilidade entre camadas é importante para aumentar a produtividade usando Python de ponta a ponta

CUDA Core, cuPyNumeric, NVMath Python

  • No início, a NVIDIA criou bindings Python básicos e bibliotecas Python, incluindo um compilador em tempo de execução
  • cuPyNumeric é um substituto drop-in para NumPy, biblioteca de computação amplamente usada em Python
    • Ao alterar apenas uma diretiva de importação, código NumPy passa a rodar na GPU em vez da CPU
  • No último ano, a NVIDIA criou o CUDA Core, que Jones vê como uma reimaginação do runtime CUDA em Python natural e nativo
  • O CUDA Core segue o fluxo de execução de Python, opera totalmente dentro do processo e depende fortemente de compilação JIT
  • A NVIDIA também criou o NVMath Python, que oferece uma interface unificada para chamadas de bibliotecas do lado do host e do lado do dispositivo
  • Segundo Jones, a capacidade de fundir chamadas de bibliotecas leva a grandes melhorias de desempenho
  • Também foram criadas bibliotecas que dão acesso direto, a partir de código Python, a bibliotecas C++ aceleradas
    • Em vez de reimplementar em Python, elas conectam código C++ existente e ajustado em detalhe
    • Jones considera que, com essa abordagem, a diferença de desempenho se torna desprezível
  • Ferramentas para profiler e analisadores de código também foram adicionadas

Modelo de programação CuTile

  • Python facilita programar sem se preocupar muito com detalhes de hardware, e a NVIDIA está adicionando uma camada de codificação alinhada a abstrações de nível mais alto para execução em GPU
  • O novo modelo de programação, a interface CuTile, foi desenvolvido primeiro para Pythonic CUDA, e uma extensão para C++ CUDA será lançada depois
  • O CuTile foi projetado considerando que desenvolvedores Python pensam mais em arrays do que em threads, ao contrário dos desenvolvedores C++
  • Não é possível simplesmente exportar código Python de forma mágica para aceleração por GPU
    • O CUDA geralmente divide um problema em milhares de pequenos blocos
    • Os blocos são divididos em tiles menores
    • Dentro de um tile, milhares de threads processam elementos individuais
    • As threads se unem para executar uma operação
  • A grande capacidade de computação da GPU vem da possibilidade de paralelizar até o nível de elementos individuais em threads
  • A NVIDIA considera que a execução em GPU não precisa necessariamente descer até o nível de threads, podendo ser tratada também em uma etapa intermediária no nível de tiles
  • O CuTile mapeia arrays para a GPU de forma eficiente em um nível menos granular, facilitando a compreensão e a depuração do código
  • Segundo Jones, essa abordagem resulta essencialmente no mesmo desempenho
  • Os dados de um tile podem ser compostos por vetores, tensores e arrays
  • O compilador consegue fazer melhor o mapeamento de operações sobre arrays inteiros para a GPU em blocos de threads, e Jones considera que o compilador muitas vezes faz isso melhor do que ele próprio, por entender profundamente os detalhes da execução em GPU
  • Diferentemente de C++, Python não é, por design, uma linguagem de baixo nível, e Jones cita o Triton, da OpenAI, como um exemplo que se encaixa naturalmente em programas Python

2 comentários

 
aer0700 2025-04-06

Será que vai ser mais rápido do que wrappers de CUDA já existentes, como CuPy e PyTorch? A vantagem do CuPy e do torch é que a API é quase igual à do NumPy, então dava para migrar o código de teste escrito em NumPy sem muito esforço; quanto a este, acho que vou ter que usar para ver como é.

 
iwi19 2025-04-06

A velocidade do primeiro é mesmo real? Está muito lento...