안녕, 세상!

(2)-1 자연어 처리 하기 전에 본문

It공부/Deep learning

(2)-1 자연어 처리 하기 전에

dev_Lumin 2020. 6. 29. 12:25

(1) 계산 고속화

 

신경망의 학습과 추론에 드는 연산량이 상당하기 때문에 신경망 고속화에 도움되는 '비트정밀도'와 'GPU'에 관해 가볍게 설명하겠습니다.

 

비트 정밀도

사용자의 환경에 따라 다르겠지만 넘파이의 부동소수점은 기본적으로 64비트 데이터타입을 사용합니다.

이와 같이 넘파이는 64비트 부동소수점 수를 표준으로 사용합니다.

그러나 신경망의 추론과 학습은 32비트 부동소수점 수로도 문제없이 수행할 수 있다고 합니다.

32비트가 64비트의 절반이므로 메모리 관점에서도 32비트가 좋다고 말할 수 있습니다.

또한 신경망 계산 시 데이터를 전송하는 버스 대역폭(bus bandwidth)이 병목이 되는 경우가 있어서 데이터타입이 작은것이 유리합니다.

계산속도 측면에서도 32비트 부동소수점 수가 일반적으로 더 빠릅니다.

 

넘파이에서 32비트 부동소수점 수를 사용하려면 다음과 같이 'np.float32'나 'f'로 지정합니다.

 

16비트 부동소수점 수를 사용해도 인식률이 거의 떨어지지 않지만 일반적으로 CPU와 GPU는 연산자체를 32비트로 수행하기 때문에 16비트 부동소수점 수로 변환하더라도 계산 자체는 32비트로 이뤄져서 처리 속도 측면에서 혜택이 없을 수도 있습니다.

이에 최근, 딥러닝이 주목 받으면서 최신 GPU들은 '저장'과 '연산' 모두 16비트 반정밀도 부동소수점 수를 지원하도록 진화했습니다. 구글의 TPU칩은 8비트 계산도 지원합니다.

 

학습된 가중치를 파일에 저장할 때는 16비트 부동소수점 수가 32비트를 쓸 때보다 절반의 용량만 사용하므로 학습된 가중치를 저장할 땐 16비트 부동소수점 수로 변환하겠습니다.

 

 

② GPU(쿠파이)

딥려닝의 계산은 대량의 곱하기 연산으로 구성되며 대량의 곱하기 연산 대부분은 병렬로 계산할 수 있는데, 이 점에서 CPU보다 GPU가 유리합니다.

쿠파이라는 파이썬 라이브러리는 GPU를 이용해 병렬 계산을 수행해주는 라이브러리인데, 엔비디아의 GPU에서만 동작합니다. 또한 CUDA라는 GPU 전용 범용 병렬 컴퓨팅 플랫폼을 설치해야합니다.

쿠파이는 넘파이와 호환되는 API를 제공하기 때문에 사용법이 기본적으로 넘파이와 같습니다.

numpy 대신 cupy로 대체해주기만 하면 됩니다.

아마 쿠파이는 넘파이와 100% 호환되지 않을 수도 있지만, 공통된 API를 많이 제공합니다.

 

 

 

 

 

'It공부 > Deep learning' 카테고리의 다른 글

SVD를 이용한 차원 축소가 의미하는 바  (0) 2021.01.16
(2)-2. 자연어와 단어의 분산 표현  (2) 2020.06.30
7. CNN  (0) 2020.06.26
6. 학습 관련 기술들  (0) 2020.06.21
5. 오차역전파법  (0) 2020.06.19
Comments