© 2017 by Doran Bae 

Subscribe!
You are reading Coding Otter, stuffed with articles about big data, data science development, ML in production, managing data science projects, and many more. ​
About the host
I'm Doran Bae, Data Scientist @TVB turning data into products and stories. More about me.

인문계를 위한 CPU vs. GPU

나는 인문계 출신 engineer이다. 대학을 갓 졸업하였을 때 나는, Microsoft Office 시리즈를 이용하여 학교 숙제를 하는 것, 인터넷 쇼핑을 제외하고는 컴퓨터를 잘 사용했다고 하기 어려웠다. 난 심지어 terminal이 무엇인지도 잘 몰랐다. Data scientist로써, 소위 말하는 정통 engineer들과 함께 일을 하다보면 당췌 느낌 잡기 어려운 키워드가 몇 개 있는데, 그 중 하나가 CPU이다. GPU와 CPU가 컴퓨터 성능과 관련있다는 것은 눈치껏 알겠지만, 심도 있는 대화는 어려울 때가 많았다.


엔지니어 1 : 우리 이번에 dev environment 새로 만들때 GPU 몇 개나 올릴까?

나 : 비용 걱정하지 말고, 모델 서빙 할 때 문제 없게, 알아서 세팅하도록 해.

엔지니어 1 : 알았어.

나 : 그래, 난 너의 판단을 믿어.




나의 지식 gap을 설명하자면, (1) 비용에 대한 감도 별로 없었고, (2) 언제 어느정도가 필요한지 requirement에 대한 감이 없었다. 다행히 회사에서 필요한 장비에 대한 지원을 마음껏 아끼지 않아, 문제가 된 적은 한 번도 없었다 (그리고 엔지니어 1이 양심껏 적정한 수준에서 환경세팅을 한 듯 하다!). 그러나 나도 속이 답답해서 한번쯤은 CPU와 GPU가 어떻게 다른지, 어떻게 deep model performance에 영향을 줄 수 있는지 알아봐야겠다고 생각했다. 오늘은 CPU와 GPU에 대해서 살짝 맛만 보겠다.

CPU vs. GPU

기본컨셉

CPU는 Central Processing Unit의 약자, GPU는 Graphics Processing Unit의 약자이다. CPU란 컴퓨터의 뇌라고 볼 수 있다. 분명 CPU만으로도 컴퓨팅을 하는 데에 큰 무리가 없었던 시절이 있었을 것이다. 그러나 모든 기계가 그러하듯, 좀 더 복잡한 작업과 좀 더 많은 작업을 하기위해서 더 좋은 무언가가 필요로 하게 되었다. 바로 그래서 GPU라는 것이 나오게 된 것이다.

GPU는 이미지 렌더링 등 graphically intense한 작업을 빠르고 효율적으로 처리 할 수 있다 (내 뇌도 이렇게 업그레이드가 되었으면 좋겠다!). GPU는 CPU랑 함께 공존하면서, CPU에 과부하 되는 작업들을 가져가 처리하는 용병 역할을 한다. 원래는 graphic rendering 때문에 나오게 되었지만 (그래서 이름이 GPU), mathematical calculation 등 다른 작업도 아주 빠르게 처리하는 똑똑한 놈이다.

GPU를 위해서 CPU보다 성능이 좋은 라고 설명을 하지 않는 이유가 있다. CPU와 GPU의 관계는 뇌와 근육이 더 적합하기 때문이다. CPU는 동시에 여러가지 다른 calculation을 할 수 있는 반면, GPU는 한가지 업무만 죽어라 파고드는 것을 잘하기 때문이다.

Core?

Core는 CPU의 basic computation을 지칭하는 unit이다. 우리 인문계인들이 이해할 수 있는 용어로 (억지로) 번역하자면, 자동차의 기통 정도가 되겠다. CPU는 여러개의 core를 갖고 있다 (마치 4기통 자동차, 6기통 자동차가 되듯이). 각각의 core가 CPU가 시키는 업무를 한다.

한개의 CPU가 A부터 Z까지의 여러 작업(tasks)을 처리해야 한다고 가정해보자. 이 26개의 작업을 모두 한꺼번에 처리는 하지 못하고, 컴퓨터가 소화할 수 있는 N개 만큼의 작업을 먼저 처리, 그리고 나머지를 순차적으로 처리를 한다 (OS의 threading, scheduling이라고도 한다).

여기서 N는 다음과 같이 결정되며 core가 많으면 많을 수록 처리 속도가 빠르다.


N = number of cores X namer of hardware threads per core


과거 CPU는 single core만 사용했었다. 점점 처리할 업무 종류와 양이 많아지면서, 제조업체들이 additional cores를 달기 시작했다. 여기까지 알았다면, 감을 잡아보자. Mac 사용자라면 오른쪽 상단 애플 로고를 누르고 About this Mac을 열어보자. Processor 칸에 현재 머신이 사용하는 코어를 볼 수 있다. 내 머신은 3.3 GHz Intel Core i7 을 사용한다고 쓰여 있다. GHz가 뭐고 Intel Core i7이 어느정도를 의미하는지 설명하려다가는 인생이 고달파질 것 같아, 좋은지 안 좋은지 감만 잡기로 한다.

2018년 9월 기준 최신 CPU 성능표이다. 3.3 GHz Intel Core i7는 약 10위 안팎인데, 이 정도면 만족하기로 하자 😎. i7은 기본적으로 4코어와 8 thread의 단위로 데이터 처리가 가능하다 인터넷에 찾아보니 나온다.

GPU의 장점

이 자료에 따르면 GPU는 CPU 대비해서 200배 보다 더 많은 processor per chip을 갖고 있다. Intel Xeon Patinum 8180 processor는 코어가 28개이고, NVIDIA Tesla K80은 4,992 CUDA core를 갖고 있다. CPU의 한 개 core가 GPU의 한 개 core 보다 성능이 좋을지는 몰라도, 대부분의 CPU의 파워는 머신러닝에 사용되기 보다는, 다른 다양한 업무를 처리하는데 사용된다 (웹페이지 로딩, 워드 프로세서 사용 등). 반면 GPU는 (다른 것은 모르겠고) 무조건 데이터 계산만 잘하도록 최적화 되어 있다. 데이터 계산만 잘 하게 설계되어 있으니, GPU의 core는 CPU core 보다 더 간단하여 single chip 안에 대량의 core를 담을 수 있게 되어 있다. 또 한가지, Tensorflow는 GPU와 CPU가 둘 다 가능할 경우, GPU에 먼저 복잡한 계산을 할당한다.

GPU는 CPU 아키텍처를 대신하는 replacement라기 보다는, 위에서 언급 했듯이, CPU가 일을 더 잘 할 수 있게 해주는 용병, accelerator이다. GPU가 특별히 빛을 보는 분야는, 게임, 3D, 이미지 프로세싱, 그리고 당연히 big data와 deep network learning이다. 많은 양의 데이터를 한꺼번에 처리하고, 복잡한 dimensional computation, 그리고 interactive data visualization까지 GPU 없이는 이렇게 머신러닝

이 발전하기 어려울 것이다.





Machine learning을 제대로 하기 위한 단계별 성능은?

대부분의 introductory machine learning tutorial은 머신이 특별히 고사양이 아니더라도 크게 불편함을 못 느낄 것이다 (나도 개인 프로젝트 할 때 대부분 현 머신에서 소화가 가능하다). 그럼 언제부터 속도에 불편함을 느끼고, 그때 얼만큼의 사양을 업그레이드 해야 하는 걸까?

안타깝게도 이 질문에 대한 대답은 한 가지로 정리할 수 없다. 각 모델마다 디자인, 데이터 사이즈가 다르기 때문이다. 다만 이 포스트를 참조하여 보자면, GPU가 CPU 대비 Tensorflow에서의 데이터 트레이닝 스피드가 월등히 빠르다는 것을 볼 수 있다.


여기 다른 회사들은 어떻게 사용하는지 느낌만 보도록 하자.

  • Google Research에서 2017년에 발표한 이 페이퍼에 의하면, 300 million 이미지를 training하는데, 50 NVIDIA K80 GPUs을 사용해서 2달 걸렸다고 한다


Source: