CUDA
"GPU의 무한한 병렬 컴퓨팅 성능을 활용하기 위한 혁신적인 아키텍처"
— NVIDIA 공식 개발자 안내서 서문
"엔비디아 그래픽카드가 아니면 AI 공부도 하지 말라는 황 회장의 사악한 독점 병기" AMD 라데온 카드로 딥러닝 돌려보겠다고 ROCm 깔다가 인생의 3일을 날렸습니다.
1. 개요
CUDA(Compute Unified Device Architecture)는 엔비디아가 자사 GPU에서 동작하는 병렬 컴퓨팅 알고리즘을 C언어 등의 표준 언어를 사용해 작성할 수 있도록 만든 독점적 API 및 플랫폼이다. 과거 화면에 그림이나 그리던 그래픽 카드를 초고성능 연산 장치(GPGPU)로 환골탈태시킨 장본인이며, 현재 인공지능 및 딥러닝 생태계를 완전히 지배하고 있는 절대 권력이다.
2. 그래픽 카드에게 수학 문제를 풀게 만들다
원래 GPU는 3D 그래픽 처리를 위해 단순한 행렬 곱셈을 엄청나게 많이 수행하도록 설계된 물건이다. 엔비디아는 이 특성이 수치 해석, 기후 예측, 물리 시뮬레이션 등 과학 계산에 완벽하게 들어맞는다는 것을 깨달았다. 하지만 과거에는 GPU로 계산을 하려면 화면에 그리지도 않을 기하학 데이터를 억지로 밀어 넣는 변태적인 꼼수를 써야만 했다.(...) CUDA는 이러한 짓거리 없이 개발자가 직접 GPU 메모리에 포인터를 할당하고 연산 커널을 실행할 수 있도록 통로를 열어주었다. 이는 신의 한 수가 되었으며, 이후 텐서플로와 파이토치 같은 현대 딥러닝 프레임워크가 CUDA를 기본 뼈대로 깔고 가면서 엔비디아는 AI 시대의 독점적 지위를 선점하게 된다.
3. 지독한 독점 전략과 경쟁사의 눈물
CUDA의 가장 무서운 점은 오직 엔비디아 GPU에서만 작동한다는 점이다. 경쟁사인 AMD의 라데온이나 인텔 그래픽 카드로는 CUDA 기반 프로그램을 원칙적으로 돌릴 수 없다. AMD가 이에 대항해 ROCm이라는 오픈소스 플랫폼을 내놓고 어떻게든 CUDA 코드를 변환하려 발악하고 있으나, 개발 생태계의 거대한 관성 때문에 소수 정예 마조히스트들을 제외하면 아무도 쓰지 않는다.1 결국 AI를 연구하거나 서비스하려는 모든 기업은 엔비디아의 비싼 H100이나 A100 GPU를 울며 겨자 먹기로 살 수밖에 없는 구조가 만들어졌다.2
4. 관련 밈 및 드립
4.1. 가죽 자켓과 가죽 장사
엔비디아 CEO 젠슨 황의 시그니처 아이템인 검은 가죽 자켓에서 유래한 밈이다. 젠슨 황이 신제품 발표회마다 가죽 자켓을 입고 나와 CUDA의 독점력과 AI 시장 지배력을 방패 삼아 소비자용 그래픽카드 및 기업용 연산 카드의 가격을 우주 돌파 수준으로 올릴 때마다 유저들은 '가죽 자켓이 또 가격을 튀겼다'며 자조 섞인 드립을 친다.(...) 하지만 욕하면서도 대안이 없기 때문에 지갑을 바쳐야 한다.
4.2. CUDA Out of Memory
파이토치나 텐서플로로 딥러닝 모델 학습을 돌리는 개발자들의 PTSD 유발 1순위 에러 메시지. RuntimeError: CUDA out of memory가 뜨는 순간, 개발자는 배치 사이즈를 줄이거나 모델 크기를 깎아내야 하는 슬픈 노가다에 돌입하게 된다.(...) 하이엔드 GPU의 VRAM 가격이 하늘을 뚫고 올라가는 상황이라, 이 에러는 곧 '돈이 부족하다'는 차가운 현실을 직시하게 만드는 사형 선고와도 같다.
5. 여담
- 황회장의 결단: CUDA 출시 초기인 2000년대 후반, 엔비디아는 모든 그래픽 칩셋에 CUDA 연산 유닛을 강제로 탑재하느라 천문학적인 비용 손실을 감수해야 했다. 당시 주주들은 '돈도 안 되는 하드웨어를 왜 넣느냐'며 폭발했으나, 젠슨 황은 뚝심 있게 밀어붙였고, 15년 뒤 이는 엔비디아를 시가총액 세계 정상에 올린 신의 한 수가 되었다.
- 지뢰밭 같은 드라이버 버전 매칭: CUDA를 직접 설치해 본 사람이라면 누구나 공감하는 악몽이 바로 NVIDIA 드라이버 - CUDA 툴킷 - 파이토치 버전 매칭이다. 버전 삼각관계가 1차이만 나도 연산이 아예 실행되지 않으며, 해결하려고 드라이버를 지웠다 깔았다 반복하다 보면 우분투 OS의 GUI 환경이 통째로 날아가는 대참사도 심심치 않게 일어난다.3
- 비공식 컴파일러 숙청: 한때 서드파티 개발자들이 CUDA 코드를 AMD 라데온에서 돌릴 수 있게 해주는 호환 레이어(ZLUDA)를 개발했으나, 엔비디아는 최근 라이선스 조항(EULA)에 '타사 하드웨어에서 CUDA 호환 소프트웨어를 구동하기 위해 번역하는 것을 금지한다'는 무시무시한 조항을 은밀히 추가하여 싹을 잘라버렸다.