엔비디아가 발표한 Rust 기반 네이티브 GPU 커널 개발 방식
Nvidia announces native GPU programming in Rust
Hacker News엔비디아가 GPU 커널 코드를 Rust 언어로 네이티브하게 작성 및 컴파일하는 기능을 공개하며, 기존의 개발 장벽을 크게 낮췄습니다.
- 커널 작성 방식은 스레드 단위(SIMT)와 데이터 묶음 단위(Tile)로 나뉘며, 특히 데이터를 묶어 처리하는 'Tile' 모델은 높은 추상화 수준으로 연산을 쉽게 구현할 수 있습니다.
- AI 시스템 레이어가 Rust 기반으로 빠르게 전환되면서, 이 기술은 성능 손실 없이 컴파일 단계에서 오류를 포착하는 높은 안정성을 보장합니다.
- 개발 시에는 높은 추상화가 가능한 'Tile' 모델부터 접근하는 것을 권장하며, 최신 CUDA 및 Rust 버전을 갖추는 것이 필수입니다.
엔비디아는 커널 코드를 Rust 언어로 네이티브하게 작성하고 컴파일할 수 있는 기능을 공개했습니다. 이는 기존에 커널을 다른 언어의 래퍼를 통해 호출해야 했던 한계를 극복합니다. AI 시스템 레이어가 전반적으로 Rust 기반으로 전환되는 추세와 맞물려, 이 기술은 성능 저하 없이 컴파일 단계에서 버그 클래스를 포착하는 높은 안정성을 제공하며 개발 장벽을 낮춥니다.
GPU 커널 작성 모델로는 스레드 단위의 SIMT 방식과 데이터 블록(Tile) 기반의 Tile 모델이 있습니다. 엔비디아는 개발자가 추상화된 레벨에서 작업할 수 있는 Tile 모델 접근을 권장합니다. 이 모델은 컴파일러가 타일이 각 아키텍처에 어떻게 매핑될지 결정하므로, 사용자의 소스 코드가 특정 하드웨어 아키텍처 선택에 종속되는 것을 방지합니다.
첫 번째 구현 방식인 `cuda-oxide`는 커스텀 `rustc` 코드 생성 백엔드를 활용하여 GPU 커널 함수를 Rust MIR과 Pliron IR 프레임워크를 거쳐 PTX로 컴파일합니다. 이 과정은 표준 LLVM 백엔드에 모든 것을 맡기며, 호스트와 디바이스 코드가 하나의 파일에서 빌드될 수 있게 합니다. 이를 사용하려면 Linux 환경, GPU Compute Capability 8.0 이상, Toolkit 12.x 이상 등의 조건이 필요합니다.
두 번째 방식인 `cutile-rs`는 Tile 단위의 연산에 초점을 맞추며, 커널의 AST를 호스트 바이너리에 임베드하고 CUDA Tile IR을 통해 JIT 컴파일합니다. 이 방법은 안정적인 Rust 버전과 비교적 가벼운 요구 사항으로 구현 가능하며, 파티셔닝 기능을 통해 각 타일 블록이 서로 겹치지 않는 배타적 소유권을 갖도록 보장하여 안전성을 높입니다.
용어 풀이
- GPU
- 많은 계산을 한꺼번에 처리하는 칩. AI 학습과 실행에 가장 많이 써요.
- CUDA
- 엔비디아 GPU에서 계산 프로그램을 돌리게 해 주는 개발 플랫폼.