본문 바로가기

인공지능

[인공지능] 왜 Deep Learning에 GPU가 적합한가?

https://www.youtube.com/watch?v=-LkLKIY8FwQ

웨비나 내용 일부를 요약한것임.

 

코어가 굉장히

cpu가 최대 24코어인 것에 비해서 

gpu는 천단위의 코어를 가지고 있다.

굉장히 단순한 연산(floating point) 덧셈 뺄셈 곱셈 나눗셈만 이것만 전문으로 하는 코어들을 수천개씩 가지고 있다. 

따라서 GPU는 병렬 연산에만 강하다. gpu가 빠른 대표적인 이유.

딥러닝의 식.

왜? : 딥러닝은 기본적으로 행렬 곱하기 연산이기 때문이다.

 

수많은 행렬에 대해서 곱셈 덧셈을 해 나가는 과정이 딥 러닝이다. 

이러다보니 행렬연산에 강한 gpu가 cpu보다 훨씬 빠를 수 밖에 없다. 

GPU는 혼자서는 아무것도 못한다. (accelerator일 뿐이다.)

파일을 읽어들일 수도 없고 정성껏 짠 프로그램을 받아들일 수도 없다. 

모든것을 CPU가 도와주어야할 수 있다. CPU가 os 부팅, 파일도 읽고, 인터페이스 역할을 하고

cpu가 뭔가를 계산을 하다가 굉장히 많은 행렬 연산이 보이네? 이건 gpu가 더 잘하겠다. 그걸 gpu로 보내서 연산을 시키고 결과를 다시 받는다. 

문제는 cpu와 gpu의 협엽에서 병목이 생긴다. 

1. 메모리 size 

2. cpu, gpu간 연결 속도 

 

gpu는 HBM2라는 DDR4보다 훨씬 더 빠르고 비싼 메모리를 쓴다. 보통 16, 32GB

자율주행 machine translation같은 경우는 모델 사이즈가 워낙 크기 때문에  메모리 속에 안 들어간다. 따라서 여러개 gpu를 모아서 하나의 모델을 담는 방식으로 사용해왔다. 또 문제가 있다. 즉 모든것을(데이터,로직)을 cpu로 부터 받아와야하는데 cpu와 연결방식이 여태까지는  PCI Gen3  slot을 사용했었다. 10gbps ehternet이나.  , 16gbps hba 이런거에는 충분한 속도이지만. cpu와 memory가 왔다갔다 하는 것 정도의 속력을 내야하는 gpu와의 연결에는 굉장히 불충붅한 속도였다. 이것때문에 많은 연구원들이 골치아파 했다. 

좀더 극단적으로 이 문제를 보기 위해서 과장된 경우를 보자면. 

앞의 array와 뒤 array를 더하는 연산을 보자. 이것이야 말로 병렬 연산이기 때문에 gpu가 아주 좋아하는 연산

 

cpu로 계산하면 5000*5000으로 계산하면. 한 1.6초정도 나온다.

gpu로 계산하면(cuda프로그램을 통해서) 딱 한줄로 표현이 된다. add라는 한줄로.

 

이렇게하면 0.1초만에 해결이 된다.엄청나게 빠르다. 그런데 가만히 보면 add위 아래에 뭔가 붙어있다. 

cuMemcpyHtoD : cuday memcpy Host to Device --> Host는 cpu Device는 gpu를 말한다.

그리고 그 결과를 다시 D to H로 cpy한다. 

 

이부분이 시간이 오래걸린다!!

오히려 cpu로 처리해버리는게 2배이상 빠른.. 

딥러닝같은 경우는 이보다 훨씬 더 큰 행렬을 이용하기 때문에 gpu가 대부분 훨씬 더 빠르다.

이러한 gpu의 병목문제를 해결하기 위해서 nvl은 물론이고 ibm같은 cpu회사들도 굉장히 많은 노력을 해왔다.IBM이 그렇게 노력한 결과로 내놓은것이 power9