24P by GN⁺ 14일전 | ★ favorite | 댓글 3개
  • 수년 동안 C/C++ 중심이었던 NVIDIA의 CUDA 툴킷에 2024년 GTC에서 네이티브 Python 지원이 공식 추가됨
  • 이제 Python만으로 GPU에서 직접 알고리즘 중심의 고속 연산을 실행할 수 있게 됨
  • CUDA 아키텍트 Stephen Jones는 “Python CUDA는 단순히 C 코드를 Python 문법으로 옮긴 것이 아니라,
    Python 개발자에게 자연스러운 방식으로 새롭게 설계된 것”이라고 설명함

Python 네이티브 지원이 여는 새로운 가능성

  • 기존 CUDA 사용자는 C++이나 Fortran을 알아야 했으나, 이제는 Python만으로도 고성능 GPU 연산 가능
  • 2024년 GitHub 오픈소스 설문에 따르면 Python은 JavaScript를 제치고 가장 인기 있는 언어로 부상
  • CUDA 사용자 수는 2020년 200만 명 → 2023년 400만 명으로 증가했지만,
    Python 개발자는 수천만 명 규모, 특히 인도·브라질 등 신흥국가 개발자들에게 큰 호재
  • 이로 인해 글로벌 GPU 인프라 확대에도 긍정적 영향 기대됨

Pythonic CUDA의 구성 방식

  • CUDA는 라이브러리, SDK, 컴파일러, 런타임, 툴, 알고리즘 등으로 구성됨
  • Python 통합은 단순 커널 제공이 아닌, 전체 스택을 파이썬 친화적으로 구성
  • 핵심 방식: JIT(Just-In-Time) 컴파일 기반, 컴파일러 의존도 최소화

주요 구성 요소

  • cuPyNumeric: NumPy와 동일한 API를 제공하면서 GPU 가속을 지원하는 Python 라이브러리
  • CUDA Core: CUDA 런타임을 파이썬 방식으로 재설계한 실행 흐름 기반 시스템
  • NVMath Python: 호스트/디바이스 라이브러리 호출을 위한 통합 인터페이스 제공
  • 고성능 C++ 라이브러리와 직접 연동 가능한 Python API 구성
  • 성능 분석 및 코드 분석 도구도 함께 제공됨

“기존 고성능 C++ 코드와 직접 연결되어 있어 성능 손실은 거의 없음” — Stephen Jones

새로운 프로그래밍 모델: CuTile

  • Python 개발자를 위해 설계된 고수준 배열 중심 모델
  • 기존 CUDA가 쓰레드 기반의 세부 제어를 요구했다면, CuTile은 타일 단위의 추상화를 통해 간결하고 이해하기 쉬운 구조 제공
  • CuTile은 배열을 GPU 타일 단위로 매핑함으로써 디버깅 및 최적화가 쉬우면서도 성능은 그대로 유지
  • 추후 C++ CUDA에도 확장 예정

“컴파일러가 GPU 구조를 더 잘 이해하기 때문에, 성능 최적화도 자동으로 잘 수행됨”

정리

  • CUDA의 Python 네이티브 통합은 GPU 프로그래밍의 진입 장벽을 크게 낮추는 변화
  • 기존 복잡한 언어 지식 없이도, Python만으로 GPU에서 AI/과학 연산이 가능해짐
  • Python 중심의 AI 생태계 확장과 NVIDIA GPU 활용을 위한 새로운 시대를 여는 결정적 전환점

Cupy, pytorch 같은 기존 Cuda wrapper 보다 더 빠르려나요. Cupy, torch 장점이 numpy랑 api가 거의 똑같아서, numpy로 짰던 테스트 코드를 별 힘들이지 않고 옮길수 있던 것이었는데, 이건 어떤지 써봐야겠네요.

Hacker News 의견
  • 나는 GPU 프로그래머는 아니지만, 나 같은 사람도 쉽게 사용할 수 있을 것 같음. GPU와 CPU를 사용하는 간단한 데모를 만들어 보았음. 결과는 다음과 같음

    • CPU에서 5000x5000 크기의 무작위 행렬 100개 생성
    • CPU로 행렬 더하기
    • CPU 행렬 덧셈 완료 시간: 0.6541초
    • CPU 결과 행렬 크기: (5000, 5000)
    • GPU에서 5000x5000 크기의 무작위 행렬 100개 생성
    • GPU로 행렬 더하기
    • GPU 행렬 덧셈 완료 시간: 0.1480초
    • GPU 결과 행렬 크기: (5000, 5000)
    • API가 정말 간단해서 더 깊이 파볼 가치가 있음. CUDA 프로그래밍은 이런 고수준의 것이 없으면 큰 작업처럼 보임
  • Python이 이런 것들의 대상이 되는 이유가 무엇인지 궁금함. 많은 프로젝트가 Python 지원을 추가하는 것을 보았음. Python 코드베이스가 다른 것들보다 쉽게 다양한 타겟으로 컴파일될 수 있는지 궁금함

  • Pytorch가 이 나오기 전에 큰 모멘텀을 얻어서 다행임. 이제 우리는 병렬 계산을 위한 진정한 플랫폼 독립적인 반표준을 가짐. NVIDIA에 국한되지 않음

    • NVIDIA 백엔드와 관련된 Pytorch의 부분이 이제 Python에서 직접 구현될 수 있음
    • 중요한 점은 최종 사용자/개발자에게는 중요하지 않거나 중요하지 않아야 한다는 것임
    • 이 새로운 플랫폼이 Python을 통해 GPU 계산의 전체 개념을 게임 같은 더 많은 도메인으로 확장할 수 있을지도 모름
    • Python을 통해 주로 GPU에서 Rust 게임을 실행하는 것을 상상해보라
  • CuTile은 여러 면에서 OpenAI의 Triton의 후속작처럼 느껴짐. 타일/블록 수준의 원시 기능과 TileIR뿐만 아니라 CuPy에서 적절한 SIMT 프로그래밍 모델도 얻고 있음. 올해 GTC에서도 많은 사람들이 주목하지 않은 것 같음. 매우 멋진 것임

    • 그럼에도 불구하고 CPU와 관련된 발표나 토크는 거의 없었음. Grace CPU가 발표된 지 꽤 되었지만, Nvidia CPU와 GPU에서 원활하게 작동하는 일반화된 추상화를 곧 볼 것 같지 않음
    • 병렬 알고리즘을 매일 작업하는 사람에게는 이것이 문제임. NSight와 CUDA-GDB로 디버깅하는 것은 여전히 원시 GDB와 같지 않으며, 먼저 CPU에서 알고리즘을 설계한 다음 GPU로 포팅하는 것이 훨씬 쉬움
    • 컴파일러 분야의 모든 팀 중에서 Modular는 LLM 열풍에 완전히 휩싸이지 않고 여러 플랫폼을 아우르는 추상화와 언어를 적극적으로 구축하는 몇 안 되는 팀 중 하나임. 이 환경에서 점점 더 가치가 있음. 더 많은 사람들이 Mojo를 실험해 보기를 바람. 아마도 그것이 우리가 매일 직면하는 CPU-GPU 간의 격차를 마침내 메울 수 있을지도 모름
  • JAX와 어떻게 비교되는지 매우 궁금함

    • JAX는 Nvidia뿐만 아니라 다른 브랜드의 GPU에서도 실행되는 Python 코드를 작성할 수 있게 해줌 (지원은 다양함). 유사하게 NumPy 함수의 드롭인 대체품을 가지고 있음
    • 이것은 Nvidia만 지원함. 하지만 JAX가 할 수 없는 일을 할 수 있는지? 사용하기 더 쉬운지? 고정 크기 배열 지향성이 덜한지? 한 브랜드의 GPU에 자신을 고정시키는 것이 가치가 있는지?
  • 이것은 대단함. AI 분야에서 NVIDIA의 대안으로 AMD + ROCm을 고려하던 사람은 더 이상 없을 것임

    • 나는 GPU 실행을 위해 효과적으로 코드를 작성할 정도로 C++을 배우지 못하는 (배우지 않을) 사람 중 하나임. 하지만 Python을 통해 GPU로 직접 파이프라인을 가질 수 있음. 놀라움
    • 효율성의 의미는 엄청남. PyTorch와 같은 Python 라이브러리뿐만 아니라 NVIDIA GPU에서 실행되는 모든 것에 대해
    • 효율성을 개선하는 것을 보는 것을 좋아함. 우리는 OpenAI와 Google이 모든 GPU를 구동하기 위해 얼마나 많은 원자력 발전소가 필요할지에 대해 끊임없이 듣고 있음
  • Rust 지원은 다음인가? 현재 나는 내 데이터 구조를 커널로/커널에서 바이트 배열로 수동으로 [디]직렬화하고 있음. CUDA가 C++에서 제공하는 것처럼 진정으로 공유되는 데이터 구조를 갖는 것이 좋을 것임

  • Python은 정말로 프로그래밍 언어의 링구아 프랑카로 자리 잡고 있음. FOSS 르네상스에서 채택이 급증하고 있으며, 우리가 가진 것 중 가장 가까운 만능 도구라고 생각함

    • PEP 모델은 자기 개선과 표준화를 위한 좋은 수단임. uv와 BeeWare와 같은 프로젝트 덕분에 패키징과 배포는 곧 해결될 문제임. 매년 성능 개선이 계속될 것이라고 확신함
  • 이것은 아마도 Python이 일반적으로 이끌어온 것, 즉 더 많은 것들이 더 빨리 시도되고 더 빠른 언어에 남아 있는 것을 이끌 것임. 전반적으로 이것은 훌륭한 움직임임. 확실히 이것을 가지고 놀기를 기대하고 있음

  • CUDA는 C와 C++에서 태어났음. C++을 확장하고 CUDA C라고 부르는 대신 실제로 CUDA의 C 변형을 구현했으면 좋겠음

첫번째 속도 진짜인가요? 너무 느린데요...