우리가 언어를 매개로 의사소통을 하듯이 기계와 커뮤니케이션을 하기 위해서는 프로그래밍 언어가 필요합니다. 개발자들이 프로그래밍 언어로 컴퓨터에 지시를 내리면, 지시문을 명령어로 번역, 컴퓨터가 효과적으로 수행할 수 있도록 하는 것을 바로 컴파일러(compiler)라고 하는데요. GPU 컴퓨팅에도 일종의 컴파일러 역할을 수행하는 도구가 있습니다. 바로 CUDA(Computed Unified Device Architecture)입니다.
GPU의 병렬 프로그래밍 언어, CUDA
처음에 엔비디아GPU는 대규모 데이터를 효과적으로 처리할 수 있는 다중 연산 및 초고속 병렬 연산 능력에도 불구하고, 제한적인 범위에서만 활용됐습니다. 그래픽스 처리 장치를 이용한 범용 프로그래밍(General Purpose GPU, GPGPU)이 고급 그래픽 프로그래밍 기술 범주에 속했고, 그래픽 애플리케이션 프로그래밍 인터페이스(Application Programming Interface, API)에 익숙하지 않은 일반 개발자들은 GPU를 이용하기가 쉽지 않았기 때문이지요.
그런데 엔비디아가 2006년에 CUDA 솔루션을 출시하면서 상황은 달라졌습니다. CUDA가 GPU에서 수행하는 병렬 처리 알고리즘을 C언어 등을 비롯한 산업 표준언어를 이용해 작성할 수 있도록 함으로써 CUDA를 통해 그래픽 API를 알지 못하는 개발자들도 GPU를 활용할 수 있게 된 것입니다. 말하자면 CUDA 가 하나의 높았던 진입장벽을 해소해준 것이지요.
일반적인 GPU는 계층적으로 구성된 수백 개의 연산 코어를 가지고 있는데요. CUDA 아키텍처 덕분에 GPU 가속화 애플리케이션에서 애플리케이션의 연산 집약적인 부분은 수천 개의 GPU 코어에서 동시에 실행하고, 워크로드의 직렬 처리 부분은 단일 스레드 성능에 최적화된 CPU에서 처리할 수 있게 되었습니다.
즉, 엔비디아 GPU가 인공지능(AI) 혁명을 견인한 원동력이자 고성능 컴퓨팅(HPC) 분야의 필수적인 솔루션으로 빠르게 확산된 요인은 CUDA에 있다고도 할 수 있답니다.
모든 GPU 관련 소프트웨어에 있는 CUDA
사실 CUDA는 모든 엔비디아 GPU 관련 소프트웨어에서 가장 기본적인 언어로 쓰이고 있습니다. 데스크탑 개발, 데이터 센터 솔루션, 임베디드 애플리케이션, GPU 가속화 클라우드 등 전체 제품군에서 공통 플랫폼으로 사용되므로 전 GPU 구성에서 애플리케이션을 배포하고 확장 할 수 있지요.
출시 초기부터 CUDA 에코 시스템은 소프트웨어 개발 툴, 서비스 및 파트너 기반 솔루션을 포함해서 급격한 속도로 성장했습니다. 엔비디아 CUDA 툴킷(CUDA Toolkit)은 GPU 가속화 애플리케이션 개발에 필요한 모든 것을 제공하지요. CUDA 툴킷에는 GPU 가속화 라이브러리, 디버깅 및 최적화 툴, 컴파일러, 그리고 애플리케이션을 배포하기 위한 CUDA 런타임이 포함됩니다. 또한 코드 샘플, 프로그래밍 가이드 API 참조사항 및 기타 설명서도 함께 제공됩니다.
개발자들은 CUDA 툴킷을 사용해서 연산 집약적인 코드 부분을 GPU에서 실행되도록 업데이트하여 C 또는 C ++ 애플리케이션을 가속화할 수 있습니다. 개발자들은 애플리케이션을 가속화하기 위해 C, C ++, Fortran 및 Python을 포함한 널리 사용되는 언어로 사용자 정의 애플리케이션을 개발할 뿐만 아니라 드롭 인 라이브러리에서 함수를 호출할 수도 있습니다.
CUDA 가 적용된 딥 러닝 라이브러리
최근 딥 러닝 기술이 전 산업 분야에서 주목 받으면서 다양한 딥 러닝 알고리즘들을 사용하기 쉽게 해 주는 여러 오픈 소스 소프트웨어(OSS)들이 개발, 상용화되고 있습니다. 여기서 대부분의 소프트웨어는 엔비디아가 제공하는CUDA 라이브러리를 기반으로 하고 있답니다. 바로 전 세계 딥 러닝 연구진 및 프레임워크 개발자들이 엔비디아 GPU를 선호하는 이유이지요.
GPU 기반 가속화된 딥 러닝 애플리케이션 설계 및 배포를 위한 딥 러닝 라이브러리를 아래에서 살펴보세요.
- cuDNN(CUDA® Deep Neural Network library) : cuDNN은 엔비디아 CUDA 딥 뉴럴 네트워크 라이브러리, 즉 딥 뉴럴 네트워크를 위한 GPU 가속화 라이브러리의 기초 요소로 컨볼루션(Convolution), 풀링(Pooling), 표준화(Nomarlization), 활성화(Activation)와 같은 일반적인 루틴을 빠르게 이행할 수 있도록 하는 라이브러리입니다.
- 딥 러닝 추론 엔진(TensorRT) : TensorRT는 딥 러닝 애플리케이션의 배포를 위한 고성능 뉴럴 네트워크 추론 엔진입니다. 주로 하이퍼스케일 데이터센터, 임베디드, 자율주행 플랫폼의 추론에 쓰이는 훈련된 뉴럴 네트워크를 빠르게 최적화하고, 검증, 배포하는데 사용합니다.
- 딥스트림 SDK(DeepStream SDK) : 딥 러닝을 활용한 동영상 분석 애플리케이션의 고 성능 개발을 손쉽게 할 수 있도록 만든 라이브러리. 높은 수준의 C++ API와 고성능 런타임 (High Performance Runtime)을 통해 GPU 가속 트랜스코딩(Transcoding) 과 딥너링 추론(Inference)기능을 빠르게 통합해서 보다 반응이 빠른 AI 기반 서비스를 제공할 수 있도록 합니다.
- cuDNN 가속화 프레임워크: cuDNN의 최적화된 루틴은 딥 러닝 개발자들이 뉴럴 네트워크 모델의 디자인과 훈련에 집중할 수 있도록 돕습니다. cuDNN은 TensorFlow, Theano 및 PyTorch를 포함해서 대중적으로 널리 사용되는 딥 러닝 프레임워크를 가속화합니다.
CUDA는 이미지 프로세싱부터 딥 러닝, 바이오인포매틱스(bioinformatics), 컴퓨터 재정학(computational finance), 데이터 사이언스(data science). 이미징 & 컴퓨터 비전, 머신 러닝, 영상의학, 기후 분석 등 광범위한 영역의 애플리케이션을 가속화하면서 다양한 분야에서 활용되고 있습니다.
CUDA 툴킷을 다운로드하고, 동영상, 코드 샘플, 핸즈온 랩, 그리고 웨비나와 같은 입문 리소스로 CUDA 공부를 시작해 보세요!
CUDA 스터디를 위한 첫 단계: CUDA 설치
STEP 1: CUDA 설치
하나 이상의 CUDA 지원 GPU가있는 리눅스(Linux), 맥(Mac) 또는 윈도우(Windows) 시스템에 무료 CUDA 툴킷을 설치하세요. CUDA 퀵스타트 가이드의 안내에 따라 신속하게 실행해 보세요. 또는 아래의 짧은 영상 가이드 튜토리얼을 따라해 보세요.
만약 여러분이 GPU를 갖고 있지 않다면 아마존 AWS, 마이크로소프트 Azure 및 IBM SoftLayer를 비롯한 클라우드 서비스 제공 업체에서 제공하는 수천 개의 GPU 중 하나에 액세스 하는 방법도 있습니다. 예를 들어, AWS의 엔비디아가 유지 관리하는 CUDA 아마존 머신 이미지(Amazon Machine Image, AMI)에는 CUDA가 이미 설치되어 있으며, 바로 사용할 수 있답니다.
STEP 2: 첫 번째 CUDA 프로그램
설치를 마쳤다면 이제 첫 번째 CUDA 프로그램을 작성할 준비가 되셨을 텐데요. 이제CUDA에 대한 더 쉬운 입문을 돕기 위해 간단한 예제를 통해 주요 개념을 소개합니다.
아래의 동영상은 두 벡터를 더하는 사례를 작성하는 예제를 제시합니다.
CUDA 설명서의 프로그래밍 가이드에는 CUDA 프로그래밍 모델, 중요한 API 및 성능 지침 등 동영상에서 다루는 주요 개념이 소개되어 있습니다.
또한 엔비디아는 Self-Paced Lab 컬렉션을 통해 핸즈온 트레이닝을 제공합니다. 랩에서는 코드 편집 및 실행을 단계별로 안내하고, 비주얼 툴과의 상호작용까지 모두 간단한 몰입형 경험으로 통합합니다.
STEP 3: CUDA 연습하기
위에 제시된 자료에서 배운 기술을 연습하려면 중급 및 심화 레벨의 사용자들을 위한 핸즈온 랩을 확인해 보세요.
CUDA C 최고의 연습 가이드는 구축된 병렬화 및 최적화 기술을 제시하고 GPU 가속화 애플리케이션 프로그래밍을 간단히 만드는 프로그래밍 방식을 설명합니다.
강사 주도로 진행되는 보다 형식적인 CUDA 공부를 해보고 싶다면 유다시티(UDACITY)의 병렬 프로그래밍 소개를 살펴보세요. 이 코스에서는 포토샵, 인스타그램 등에서 볼 수 있는 일련의 이미지 처리 알고리즘을 다룹니다. 이 강의에서는 별도의 GPU를 보유하고 있지 않은 경우에도 하이엔드 GPU에서 과제를 프로그래밍하고 실행할 수 있습니다.
CUDA, 지금 바로 공부하세요!
사용하시는 운영체제에 맞는 CUDA 툴킷을 다운로드하고, CUDA 공부를 시작해 보세요. 보다 많은 개발자 분들이 CUDA의 유용성을 확인하고, 직접 체험해보실 수 있도록 엔비디아가 오는 4월 29일까지 특별 프로모션을 진행합니다.
CUDA 툴킷을 다운로드하고 엔비디아가 전달하는 설문지에 응답해 주세요. 설문에 응답해주시기만 하면 100분에게 스타벅스 음료 쿠폰을 증정합니다. 또한 추첨을 통해 엔비디아 로고가 새겨진 고급 다이어리 세트를 11분께 드릴 예정입니다.
프로모션에 참여하고 싶으신 분들은 CUDA 툴킷을 다운로드하고, 다운로드 인증하여 이벤트에 참여해주세요!