2018.09.05

GPU 병렬 프로그래밍 CUDA의 모든 것

Martin Heller | InfoWorld

CUDA와 GPU의 병렬 처리 능력을 활용하면 딥러닝을 포함한 컴퓨팅 집약적 애플리케이션을 가속화할 수 있다.

CUDA 는 엔비디아가 자체 GPU에서의 일반 컴퓨팅을 위해 개발한 병렬 컴퓨팅 플랫폼이자 프로그래밍 모델이다, CUDA는 개발자가 연산의 병렬화할 수 있는 부분에 GPU의 성능을 활용해 컴퓨팅 집약적인 애플리케이션의 속도를 높일 수 있도록 해준다.

OpenCL과 같이 GPU용 API도 있고, AMD 같은 다른 업체의 경쟁력 있는 GPU도 있지만, CUDA와 엔비디아 GPU의 조합은 딥러닝을 포함한 여러 애플리케이션 영역을 장악하고 있다. 이 조합은 또한 세계에서 가장 빠른 몇몇 슈퍼컴퓨터의 기반이기도 하다.

Image Credit : GettyImagesBank

그래픽 카드는 PC만큼이나 오래 되었다고 할 수 있다. 물론, 어디까지나 1981년 IBM 모노크롬 디스플레이 어댑터를 그래픽 카드라고 간주하는 경우에 그렇다. 1988년이 되자 ATI(나중에 AMD에 인수)에가 16비트 2D VGA 원더 카드를 내놓았다. 1996년에는 3dfx 인터랙티브가 3D 그래픽 가속기를 출시해 1인칭 슈팅 게임인 퀘이크(Quake)를 최고 속도로 실행할 수 있게 되었다.

엔비디아는 1996년 다소 빈약한 제품으로 3D 액셀러레이터 시장 경쟁에 뛰어들었지만, 시간이 지나면서 그것만으로는 부족함을 알게 되었다. 1999년에 엔비디아는 처음으로 GPU라고 불린 최초의 그래픽 카드 ‘지포스 256’을 선보였다. 당시만 해도 GPU는 주로 게임을 위해서만 사용했다. 사람들이 수학, 과학, 공학에 GPU를 사용한 것은 더 시간이 지나고 나서였다.

CUDA의 기원
2003년에 이안 벅이 이끄는 연구팀은 데이터 병렬 구조로 C를 확장해 최초로 널리 채택된 프로그래밍 모델인 브룩(Brook)을 공개했다. 벅은 이후 엔비디아에 합류해 2006년에 GPU 상의 범용 컴퓨팅을 위한 최초의 상용 솔루션인 CUDA의 출시를 주도한다.

OpenCL vs. CUDA
CUDA의 경쟁자인 OpenCL은 2009년 애플과 크로노스 그룹(Kronos Group)이 인텔/AMD CPU에만 국한되지 않는 이기종 컴퓨팅 표준을 제공하기 위해 출시했다. OpenCL은 그 일반성 때문에 매력적으로 들리지만, 엔비디아 GPU와 CUDA 조합만큼의 성능을 보여주지 못했으며, 많은 딥러닝 프레임워크가 OpenCL을 지원하지 않거나, CUDA를 먼저 지원하고 OpenCL 지원은 추후에 이루어지는 경우가 많다.

CUDA 성능 가속화
CUDA는 몇 년 동안 엔비디아 GPU의 개선과 더불어 활용 범위를 넓혀 왔다. 여러 개의 P100 서버 GPU를 사용하는 CUDA 버전 9.2는 CPU에 비해 최대 50배 향상된 성능을 실현할 수 있다. 로드에 따라서는 V100(이 그림에는 표시되지 않음)이 여기서 추가적으로 3배 더 빠른 성능을 보여준다. 이전 세대의 서버 GPU인 K80은 CPU에 비해 5배~12배 향상된 성능을 보여주었다.



GPU의 속도 향상은 고성능 컴퓨팅에 맞추어 적시에 이루어졌다. 무어의 법칙에 따르면 매 18개월마다 2배로 증가하게 되어 있다고 하는 CPU의 단일 쓰레드 성능 향상은 칩 제조업체들이 칩 마스크 해상도의 크기 제한과 칩 생산량, 그리고 런타임에서의 클럭속도와 열 제한 같은 물리적 한계에 부딪히면서 매년 10%까지 감소해 왔다.



CUDA 적용 영역



그림에서 보듯이 CUDA와 엔비디아 GPU는 높은 부동 소수점 컴퓨팅 성능을 필요로 하는 여러 분야에서 도입했다. 좀더 보다 포괄적인 목록은 다음과 같다.

1. 컴퓨터 재정학(Computational finance)
2. 기후, 날씨 및 해양 모델링
3. 데이터 과학 및 분석
4. 딥러닝 및 머신러닝
5. 국방 및 첩보 활동
6. 제조/AEC(Architecture, Engineering, and Construction): CAD 및 CAE (전산유체역학, 전선구조역학, 설계 및 시각화, 전자설계 자동화 등 포함)
7. 미디어 및 엔터테인먼트(애니메이션, 모델링 및 렌더링, 색 보정 및 그레인 관리, 영상 합성, 편집, 인코딩 및 디지털 배포, 온에어 그래픽, 온세트, 리뷰 및 스테레오 툴, 날씨 그래픽 등).
8. 의료 영상
9. 석유 및 가스
10. 연구: 고등교육 및 슈퍼컴퓨터 (컴퓨터 화학, 생물학, 수치 해석학, 물리학, 과학적 시각화 등)
11. 안전 및 보안
12. 도구 및 관리

딥러닝과 CUDA
딥러닝은 엄청난 연산 속도를 필요로 한다. 예를 들어, 2016년 구글 브레인 및 구글 트랜슬레이트 팀은 구글 번역 모델을 교육하기 위해 GPU를 사용하여 1주일 단위로 수백 차례 텐서플로우를 실행했다. 두 팀은 이를 위하여 엔비디아로부터 2,000대의 서버급 GPU를 구입하기도 했다. GPU가 없었다면, 이런 학습은 1주일이 아니라 몇 달이 걸릴 것이다. 텐서플로우 변환 모델의 생산을 위해 구글은 새로운 맞춤형 칩인 TPU(Tensor Processing Unit)를 사용했다.



2018.09.05

GPU 병렬 프로그래밍 CUDA의 모든 것

Martin Heller | InfoWorld

CUDA와 GPU의 병렬 처리 능력을 활용하면 딥러닝을 포함한 컴퓨팅 집약적 애플리케이션을 가속화할 수 있다.

CUDA 는 엔비디아가 자체 GPU에서의 일반 컴퓨팅을 위해 개발한 병렬 컴퓨팅 플랫폼이자 프로그래밍 모델이다, CUDA는 개발자가 연산의 병렬화할 수 있는 부분에 GPU의 성능을 활용해 컴퓨팅 집약적인 애플리케이션의 속도를 높일 수 있도록 해준다.

OpenCL과 같이 GPU용 API도 있고, AMD 같은 다른 업체의 경쟁력 있는 GPU도 있지만, CUDA와 엔비디아 GPU의 조합은 딥러닝을 포함한 여러 애플리케이션 영역을 장악하고 있다. 이 조합은 또한 세계에서 가장 빠른 몇몇 슈퍼컴퓨터의 기반이기도 하다.

Image Credit : GettyImagesBank

그래픽 카드는 PC만큼이나 오래 되었다고 할 수 있다. 물론, 어디까지나 1981년 IBM 모노크롬 디스플레이 어댑터를 그래픽 카드라고 간주하는 경우에 그렇다. 1988년이 되자 ATI(나중에 AMD에 인수)에가 16비트 2D VGA 원더 카드를 내놓았다. 1996년에는 3dfx 인터랙티브가 3D 그래픽 가속기를 출시해 1인칭 슈팅 게임인 퀘이크(Quake)를 최고 속도로 실행할 수 있게 되었다.

엔비디아는 1996년 다소 빈약한 제품으로 3D 액셀러레이터 시장 경쟁에 뛰어들었지만, 시간이 지나면서 그것만으로는 부족함을 알게 되었다. 1999년에 엔비디아는 처음으로 GPU라고 불린 최초의 그래픽 카드 ‘지포스 256’을 선보였다. 당시만 해도 GPU는 주로 게임을 위해서만 사용했다. 사람들이 수학, 과학, 공학에 GPU를 사용한 것은 더 시간이 지나고 나서였다.

CUDA의 기원
2003년에 이안 벅이 이끄는 연구팀은 데이터 병렬 구조로 C를 확장해 최초로 널리 채택된 프로그래밍 모델인 브룩(Brook)을 공개했다. 벅은 이후 엔비디아에 합류해 2006년에 GPU 상의 범용 컴퓨팅을 위한 최초의 상용 솔루션인 CUDA의 출시를 주도한다.

OpenCL vs. CUDA
CUDA의 경쟁자인 OpenCL은 2009년 애플과 크로노스 그룹(Kronos Group)이 인텔/AMD CPU에만 국한되지 않는 이기종 컴퓨팅 표준을 제공하기 위해 출시했다. OpenCL은 그 일반성 때문에 매력적으로 들리지만, 엔비디아 GPU와 CUDA 조합만큼의 성능을 보여주지 못했으며, 많은 딥러닝 프레임워크가 OpenCL을 지원하지 않거나, CUDA를 먼저 지원하고 OpenCL 지원은 추후에 이루어지는 경우가 많다.

CUDA 성능 가속화
CUDA는 몇 년 동안 엔비디아 GPU의 개선과 더불어 활용 범위를 넓혀 왔다. 여러 개의 P100 서버 GPU를 사용하는 CUDA 버전 9.2는 CPU에 비해 최대 50배 향상된 성능을 실현할 수 있다. 로드에 따라서는 V100(이 그림에는 표시되지 않음)이 여기서 추가적으로 3배 더 빠른 성능을 보여준다. 이전 세대의 서버 GPU인 K80은 CPU에 비해 5배~12배 향상된 성능을 보여주었다.



GPU의 속도 향상은 고성능 컴퓨팅에 맞추어 적시에 이루어졌다. 무어의 법칙에 따르면 매 18개월마다 2배로 증가하게 되어 있다고 하는 CPU의 단일 쓰레드 성능 향상은 칩 제조업체들이 칩 마스크 해상도의 크기 제한과 칩 생산량, 그리고 런타임에서의 클럭속도와 열 제한 같은 물리적 한계에 부딪히면서 매년 10%까지 감소해 왔다.



CUDA 적용 영역



그림에서 보듯이 CUDA와 엔비디아 GPU는 높은 부동 소수점 컴퓨팅 성능을 필요로 하는 여러 분야에서 도입했다. 좀더 보다 포괄적인 목록은 다음과 같다.

1. 컴퓨터 재정학(Computational finance)
2. 기후, 날씨 및 해양 모델링
3. 데이터 과학 및 분석
4. 딥러닝 및 머신러닝
5. 국방 및 첩보 활동
6. 제조/AEC(Architecture, Engineering, and Construction): CAD 및 CAE (전산유체역학, 전선구조역학, 설계 및 시각화, 전자설계 자동화 등 포함)
7. 미디어 및 엔터테인먼트(애니메이션, 모델링 및 렌더링, 색 보정 및 그레인 관리, 영상 합성, 편집, 인코딩 및 디지털 배포, 온에어 그래픽, 온세트, 리뷰 및 스테레오 툴, 날씨 그래픽 등).
8. 의료 영상
9. 석유 및 가스
10. 연구: 고등교육 및 슈퍼컴퓨터 (컴퓨터 화학, 생물학, 수치 해석학, 물리학, 과학적 시각화 등)
11. 안전 및 보안
12. 도구 및 관리

딥러닝과 CUDA
딥러닝은 엄청난 연산 속도를 필요로 한다. 예를 들어, 2016년 구글 브레인 및 구글 트랜슬레이트 팀은 구글 번역 모델을 교육하기 위해 GPU를 사용하여 1주일 단위로 수백 차례 텐서플로우를 실행했다. 두 팀은 이를 위하여 엔비디아로부터 2,000대의 서버급 GPU를 구입하기도 했다. GPU가 없었다면, 이런 학습은 1주일이 아니라 몇 달이 걸릴 것이다. 텐서플로우 변환 모델의 생산을 위해 구글은 새로운 맞춤형 칩인 TPU(Tensor Processing Unit)를 사용했다.



X