/ GPGPU

Deep Learning 위해서는 어떤 GPU를 사야 할까요?

Comments

많은 사람들이 deep learning에 관심을 가지고, 이를 위해 GPU를 사서 쓴다.
GPU computing 및 architecture를 전공하는 사람으로, 뿌듯(?)하기도 하다.
그래서, deep learning을 위해 GPU를 사고자 하는 사람들을 위한 글을 쓴다.
조금이라도 도움이 되시길... (Blog에 있는 글과 내 개인적인 지식을 바탕으로 작성함.)

AMD? NVIDIA?

NVIDIA 것을 사라. 이견의 여지 조차없다. AMD에서는 OpenCL만 돌지 CUDA는 안돈다. 많은 deep learning framework가 CUDA로 되어있다. 성능이고 발열이고 다 떠나서 무조건 NVIDIA GPU를 쓰는 것이 좋다. AMD GPU를 샀다가는 나중에 누가 개쩌는 net을 공개 했는데, CUDA로 만들어져 있어서 직접 OpenCL 포팅을 해야할 수도 있다.

아래 작성한 글은 NVIDIA GPU를 기준으로 작성하였다.
참고로, 나는 절대 NVIDIA를 좋아하지 않으니, 편향된 시각이라고 생각하지 말아주었으면...

GPU 한 개? 여러 개?

돈이 많아서 제일 좋은 GPU (예를 들면 TESLA 모델)을 사고도 더 빠르게 돌리고 싶다면 여러 개 사도 된다. 실제로 Alex net의 경우는 GPU 2개를 썼다고 한다. 하지만 그런 경우가 아니라면 그냥 1개를 좋은 것으로 사시길. GPU 여러 개 셋팅하기도 쉽지 않고, GPU 간의 메모리도 따로 박혀있어서 관리 하기 쉽지 않다. Caffe 나 TensorFlow 같은 경우 비교적 쉽게 여러 GPU를 쓸 수 있다고는 한다.

성능적인 측면서에도, GPU 둘 간의 통신을 해야할 경우에 엄청 느리다. 분명히 코어수가 두배가 되어도 두배만큼 빠르지 않을테다... 정말 큰 net을 학습시켜야 하는 경우에나 유용하지, 그 외에는 별로 쓸일이 없을 것이다.

학습 속도는 코어 수를 보면 되나요?

음... 아니다. 코어 수가 곧 성능이라고 오해하기 쉬워서 제목을 이렇게 달았다. 코어수가 연산자원의 수이기 때문에 대충 비례하는 것은 맞지만, deep learning 연산에서의 병목은 보통 메모리 대역폭이라고 한다. (그래서 cuDNN의 경우 연산을 추가로 더 하면서 까지 메모리 통신량을 줄이는 노력을 했다.) 그렇다면 무엇을 봐야 하느냐.

  • 세대 수 (무조건 새삥이 좋다.)
  • 브랜드
  • 코어 수, clock, 메모리 대역폭 등등의 하드웨어 스펙

왜 코어수, clock, 메모리 대역폭 등의 스펙을 지웠냐 하면, 어차피 쓸데없다고 필자는 생각한다. 왜냐하면, 학습할 네트워크, 프레임워크 종류 및 버전에 따라 가장 중요한 하드웨어 스펙이 달라진다. 예를 들어, Caffe를 컴파일 할때 CUDA 버전 또는 cuDNN버전을 어떻게 설정했느냐에 따라 다를 수 있다.

그래서 가장 확실하게 높으면 좋은 것은 세대이다. CUDA를 필두로 시작된 GPU computing이라는 것은 생긴지 10년도 안된 기술이다. 아직까지도 엄청난 격변이 매 세대마다 진행되고 있다. (ISA도 microarchitecture도 매번 달라진다.) 따라서, 세대가 올라가면 코어수가 같고 메모리 대역폭이 같아도 효율이 팍팍 달라지기 때문에 무조건 세대가 높은게 좋다.

세대는 architecture를 기준으로 크게 바뀌니 이것을 보면 된다 (전 post 참고).
같은 브랜드에서는 모델명에서 쉽게 알아 볼 수 있는 데, GeForce GTX980 에서 9가 세대 이다. 참고로 뒤의 80은 급을 나타낸다.
그래서 앞으로 나올 GPU가 GeForce GTX1080 이고, 예전 모델이 780 이었다.

그리고 꼭 고려해야 할 것이 브랜드이다. 모든 제품이 그렇듯, NVIDIA GPU도 라인업이 있다. 대충 보면 GeForce GTX, Quadro, Tesla 정도가 있다.
Quadro는 전문가용 그래픽 카드로 용도가 다르니 무조건 패스. 가성비가 똥망이다. (자세한 설명은 전 post 참조)
Tesla 계열은 computing용이라 용도는 어울리지만 주로 슈퍼컴퓨터에 들어가는 모델로 비싸다. 정말 돈이 많은 것이 아니면 패스.
남은 건 GeForce GTX 계열인데, 여기에는 750 ti, 960, 980, Titan X등 여러가지 모델들이 있다.
사실 GeForce GTX 계열이 게임용으로 나온 모델이지만, deep learning을 하기에도 무난하다. Titan 계열이 비싸지만, 그나마 computing 을 고려하여 만든 모델들이기 때문에, 메모리 사이즈도 크고 가장 좋다. 다른 브랜드랑 다르게 deep learning을 위해서는 쓸데없이 비싼것이 아니니 돈이 있다면 고민없이 지르시길.
참고로 Titan X를 제외한 다른 Titan들은 한세대 뒤쳐지니 Titan Z보다는 980 ti를 추천한다.

메모리 크기가 가끔 문제가 되는데....

Deep learning 알고리즘을 연구하는 친구의 말을 들어보니, 메모리 사이즈가 문제가 되는 경우가 꽤나 있다고 한다.
Net이 너무 커지고, batch 사이즈가 커지면 메모리가 꽉차면서 돌지 않는다고 한다.
그러니, 큰 모델을 학습하고 싶으신 분들은 메모리 사이즈를 고려하시길.
(Titan 계열이 역시 메모리가 크다.)

미래에는 이런 문제를 해결한 framework 이 있을 수도 있으니, 이게 걱정이라면 한 번 찾아보길 바란다.
내 지식에 따르면 사실 메모리 크기는 이론적으로 문제가 아니다. 그냥 코딩을 잘 하면 되는데, 아직까지 이것을 해결한 framework이 없다고 한다.

예외

GTX 970이 여기저기서 뻗는 문제가 있다고 하던데...
Minor 하게 돌리고 싶은 사람들은 큰 문제 없을테니 그냥 사도 되지만, 우려가 되면 970은 피하시는게 좋을 듯하다.

다음 세대를 기다리는 건?

이 글이 쓰인 2016.5.2를 기준으로 보면, 다음 세대는 무조건 기다려야 한다.
다음 세대라 하면 Pascal를 말한다. (GTX 1080이 가장 대표적인 예가 될 것이다.)
Tesla계열의 GPU가 발표되었고, 소비자 제품이 몇달내로 곧 출시될 것이다.
Deep learning을 위해서 half-precision 연산이 지원될 것으로 발표가 되었고, 공정도 몇세대만에 내려갔으니, 성능 차이가 확연히 날 것으로 예상된다.
무조건 기다리는게 좋다.

그래서 뭐 살지 추천 좀?!
  • 나는 돈이 엄청 많다! --> TESLA 최신 모델 ㄱㄱ.
  • 한 백만원 정도는 쓸 수 있지 --> 몇달만 기다려서 GTX1080, 지금 당장은 Titan X
  • 엄청 큰 네트워크를 학습할래 --> Titan X
  • 돈이 별로 없어... --> 750 ti
  • Deep Learning 재미로 한번 해볼까? --> GTX 680 또는 GTX 980로 시작한 후 Pascal GPU가 나오면 GTX 1080으로.