NVIDIA finalmente adiciona suporte nativo a Python ao CUDA
(thenewstack.io)- Depois de anos centrado em C/C++, o toolkit CUDA da NVIDIA passou a oferecer oficialmente suporte nativo a Python na GTC 2024
- Agora é possível executar operações de alta velocidade focadas em algoritmos diretamente na GPU usando apenas Python
- O arquiteto de CUDA Stephen Jones explicou que “Python CUDA não é simplesmente código C reescrito com sintaxe Python,
mas algo redesenhado do zero de uma forma natural para desenvolvedores Python”
Novas possibilidades abertas pelo suporte nativo a Python
- Antes, usuários de CUDA precisavam conhecer C++ ou Fortran, mas agora já é possível fazer computação de alto desempenho em GPU usando apenas Python
- Segundo a pesquisa de código aberto do GitHub de 2024, Python ultrapassou JavaScript e se tornou a linguagem mais popular
- O número de usuários de CUDA cresceu de 2 milhões em 2020 para 4 milhões em 2023,
enquanto os desenvolvedores Python somam dezenas de milhões, o que é especialmente positivo para desenvolvedores de países emergentes como Índia e Brasil - Com isso, também se espera um impacto positivo na expansão da infraestrutura global de GPU
Como o CUDA Pythonic é estruturado
- O CUDA é composto por bibliotecas, SDK, compilador, runtime, ferramentas e algoritmos
- A integração com Python não consiste apenas em oferecer kernels, mas em estruturar toda a stack de forma amigável para Python
- Abordagem principal: baseada em compilação JIT (Just-In-Time), minimizando a dependência de compiladores
Principais componentes
- cuPyNumeric: biblioteca Python que oferece a mesma API do NumPy com aceleração por GPU
- CUDA Core: sistema baseado em fluxo de execução que redesenha o runtime do CUDA em estilo Python
- NVMath Python: fornece uma interface unificada para chamar bibliotecas de host/device
- API Python estruturada para integração direta com bibliotecas C++ de alto desempenho
- Ferramentas de profiling e análise de código também são oferecidas
> “Como há conexão direta com o código C++ de alto desempenho existente, a perda de desempenho é quase inexistente” — Stephen Jones
Novo modelo de programação: CuTile
- Modelo de alto nível centrado em arrays projetado para desenvolvedores Python
- Enquanto o CUDA tradicional exigia controle detalhado baseado em threads, o CuTile oferece uma estrutura mais concisa e fácil de entender por meio de abstração em nível de tiles
- O CuTile mapeia arrays em unidades de tiles da GPU, o que facilita depuração e otimização mantendo o desempenho
- No futuro, também deverá ser expandido para o CUDA em C++
> “Como o compilador entende melhor a estrutura da GPU, a otimização de desempenho também é feita automaticamente com mais eficiência”
Resumo
- A integração nativa de Python ao CUDA representa uma mudança que reduz drasticamente a barreira de entrada para programação em GPU
- Mesmo sem conhecimento de linguagens mais complexas, agora é possível fazer computação de IA e científica em GPU usando apenas Python
- Trata-se de um ponto de virada decisivo que abre uma nova era para a expansão do ecossistema de IA centrado em Python e para o uso de GPUs da NVIDIA
3 comentários
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 é.
Comentários do Hacker News
Não sou programador de GPU, mas parece algo que até gente como eu conseguiria usar com facilidade. Fiz uma demo simples usando GPU e CPU. Os resultados foram os seguintes
Fico me perguntando por que Python vira alvo dessas coisas. Já vi muitos projetos adicionando suporte a Python. Será que codebases em Python podem ser compiladas para vários alvos com mais facilidade do que outras?
Ainda bem que Pytorch ganhou grande tração antes disso surgir. Agora temos um verdadeiro quase-padrão independente de plataforma para computação paralela. Não fica limitado à NVIDIA
CuTile parece, em muitos aspectos, um sucessor do Triton da OpenAI. Além de primitivas no nível de tile/bloco e do TileIR, também estamos ganhando um modelo de programação SIMT adequado no CuPy. Parece que muita gente nem percebeu isso na GTC deste ano. É algo muito legal
Estou muito curioso para saber como isso se compara ao JAX
Isso é enorme. Quem estava considerando AMD + ROCm como alternativa à NVIDIA na área de IA provavelmente não vai mais considerar
Suporte a Rust é o próximo passo? Hoje eu serializo e desserializo manualmente minhas estruturas de dados como arrays de bytes para os kernels e a partir deles. Seria bom ter estruturas de dados realmente compartilhadas, como o CUDA oferece em C++
Python está realmente se consolidando como a lingua franca das linguagens de programação. Sua adoção está disparando no renascimento do FOSS, e acho que é a ferramenta de uso geral mais próxima que temos
Isso provavelmente vai levar ainda mais na direção daquilo que Python em geral já tem impulsionado: experimentar mais coisas mais rapidamente e deixar o que importa em linguagens mais rápidas. No geral, isso é um excelente movimento. Com certeza estou ansioso para brincar com isso
CUDA nasceu em C e C++. Eu gostaria que, em vez de estender C++ e chamar isso de CUDA C, eles de fato tivessem implementado uma variante em C do CUDA
A velocidade do primeiro é mesmo real? Está muito lento...