NVIDIA adiciona suporte nativo a Python no CUDA
(thenewstack.io)- 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
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 é.
A velocidade do primeiro é mesmo real? Está muito lento...