머신러닝을 위한 GPU

머신러닝 영역에서는 CPU보다는 GPU 사용을 강력히 추천한다. GPU는 수학과 과학 계산에 특화된 장치로, 매우 빠른 계산 속도를 보여준다. CPU는 직렬처리를 하지만, GPU는 병렬처리를 하므로 동일한 시간이라도 병렬처리하는 GPU의 수행속도가 훨씬 빠르다. 최신 CPU는 4코어, 8코어를 가지고 있지만, GPU는 수천 개의 코어를 가지고 있어 병렬로 처리했을 때 GPU는 동일한 시간에 수천 개 의 코어로, 수천 개의 계산을 동시에 처리할 수 있다.

①GPU 벤더
nVidia : CUDA를 지원. 머신러닝 영역에서 소프트웨어는 대부분 CUDA를 지원

AMD : OpenCL을 지원

②GPU 선택시 검토사항
GPU의 성능은 일반적으로 FLOPS(FLoating-point OPerations per Second) 라는 초당 부동소수점 연산으로 측정

그러나 중요한 건 그게 아니라 bandwidth가 몇 GB/s 가 나오느냐이며 이는 메모리를 초당 몇번이나 읽고 쓸 수 있는지를 의미

dot product 등의 모든 수학 연산이 전부 이 memory read/write bandwidth에 의존

Tensorflow를 돌리려면 CUDA 3.5 이상 (https://developer.nvidia.com/cuda-gpus)

**nVidia
①GPU Architecture별 CUDA 버전
PASCAL : CUDA 6.1

MAXWELL : CUDA 5.2 , 5.1

KEPLER : CUDA 3.7 , 3.5 , 3.2 , 3.0

②GPU Architecture별 제품 및 CUDA core (괄호()는 CUDA core수)
TESLA

PASCAL : P100(3584), P40(3840)

MAXWELL : M40(3072)

QUADRO

PASCAL : P6000(3840), P5000(2560)

MAXWELL : M6000(3072), M5000(2048), M4000(1664), K2200(640)

KEPLER : K6000(2880), K5200(2304), K5000(1536), K4200(1344), K4000(768)

FERMI : 6000(448), 5000(352)

TITAN

MAXWELL : X(3584)

KEPLER : Z(5760)

GTX

PASCAL : 1080TI(3584), 1080(2560), 1070(1920), 1060(1280)

MAXWELL : 980TI(2816), 980(2048), 970(1664), 950(768)

KEPLER : 780(2304)

FERMI : 580(512)

** GTX 970/580 : 이상한 구조 때문에 메모리를 3.5GB 이상 사용하면 문제가 생길 수 있음

**CUDA core수는 GPU의 메모리용량 모델이 따라 달라질 수 있음.

[1] CUDA (“Compute Unified Device Architecture”, 쿠다)는 그래픽 처리 장치(GPU)에서 수행하는 (병렬 처리) 알고리즘을 C 프로그래밍 언어를 비롯한 산업 표준 언어를 사용하여 작성할 수 있도록 하는 GPGPU 기술이다. CUDA는 엔비디아가 개발해오고 있으며 이 아키텍처를 사용하려면 엔비디아 GPU와 특별한 스트림 처리 드라이버가 필요하다. CUDA는 G8X GPU로 구성된 지포스 8 시리즈급 이상에서 동작한다. CUDA 플랫폼은 컴퓨터 커널의 실행을 위해 GPU의 가상 명령 집합과 병렬 연산 요소들을 직접 접근할 수 있는 소프트웨어 계층이다.

[2] OpenCL(Open Computing Language)은 개방형 범용 병렬 컴퓨팅 프레임워크이다. CPU, GPU, DSP 등의 프로세서로 이루어진 이종 플랫폼에서 실행되는 프로그램을 작성할 수 있게 해 준다. OpenCL은 커널 코드를 작성하기 위한 C99 기반의 언어인 OpenCL C와 플랫폼을 정의하고 제어하기 위한 API를 포함하고 있다. OpenCL은 작업 기반(task-based) 및 데이터 기반(data-based) 병렬 컴퓨팅을 제공한다.