신경망 훈련을위한 CPU와 GPU 중 선택


28

GPU의 '오버 헤드'에 대한 토론을 보았고 '소규모'네트워크의 경우 실제로 GPU보다 CPU (또는 CPU 네트워크)에서 학습하는 것이 더 빠를 수 있습니다.

'작은'이란 무엇입니까?

예를 들어, 숨겨진 단위가 100 개인 단일 계층 MLP가 '작은'입니까?

'소형'에 대한 정의가 반복 아키텍처에 대해 변경됩니까?

CPU 또는 GPU 훈련 여부를 결정할 때 고려해야 할 다른 기준이 있습니까?

편집 1 :

방금 블로그 게시물을 찾았습니다 (아마 구식입니까? 2014 년 이후).

"... 대부분의 네트워크 카드는 CPU에 등록 된 메모리에서만 작동하므로 두 노드 간 GPU에서 GPU 로의 GPU 전송은 다음과 같습니다. GPU 1에서 CPU 1로 네트워크 카드 1에서 네트워크 카드 2로 CPU로 이는 네트워크 속도가 느린 네트워크를 선택하면 한 대의 컴퓨터에서 속도가 향상되지 않을 수 있다는 것입니다. 네트워크 속도가 빠르더라도 클러스터가 크면 비교할 때 GPU 속도가 향상되지 않습니다. GPU는 네트워크 카드가 GPU를 따라 잡기에는 너무 빨리 작동하기 때문에 CPU에

이것이 구글과 마이크로 소프트와 같은 많은 대기업들이 GPU 네트워크 대신 CPU를 사용하여 큰 신경망을 훈련시키는 이유입니다. "

따라서이 게시물에 따르면 어느 시점에서 CPU를 사용하는 것이 더 빠를 수 있습니다. 이것은 여전히 ​​그렇습니까?

편집 2 : 예, 해당 블로그 게시물은 다음과 같은 이유로 인해 오래되었을 수 있습니다.

이제 노드 내의 GPU가 PCIe 버스를 통해 연결된 것으로 보이므로 약 6GiB / s에서 통신이 이루어질 수 있습니다. (예 : https://www.youtube.com/watch?v=el1iSlP1uOs , 약 35 분) 스피커는 이것이 GPU1에서 CPU2로가는 것보다 빠르다는 것을 암시합니다. 네트워크 카드가 더 이상 병목 현상이 없음을 의미합니다.


그의 블로그 게시물을 가진 사람은 좋은 지적을합니다. 나는 그의 모든 칭의를 이해하지 못했다. 그러나 Google, Facebook, Twitter 및 학계의 모든 주요 딥 러닝 그룹이 주로 GPU에서 코드를 실행한다는 사실은 좋은 생각임을 시사합니다. : 바이어스 비록 nvidia.com/content/events/geoInt2015/LBrown_DL.pdf
JahKnows

답변:


27

다른 답변들과 달리, 나는 전혀 생각하지 않고 GPU에 대해 항상 훈련하는 것에 대해 충고합니다. 이는 데이터가 매우 풍부하고 (예 : 많은 픽셀 = 많은 변수) 이미지에는 수백만 개의 매개 변수가있는 이미지 및 텍스트에 대한 딥 러닝 방법의 사용으로 인해 발생합니다. 다른 도메인의 경우에는 그렇지 않을 수 있습니다.

'작은'이란 무엇입니까? 예를 들어, 숨겨진 단위가 100 개인 단일 계층 MLP가 '작은'입니까?

그렇습니다. 현대 표준으로는 분명히 매우 작습니다. 훈련에 적합한 GPU (예 : NVIDIA 1080 또는 NVIDIA Titan)가 없다면 CPU가 더 빠르다는 사실에 놀라지 않을 것입니다.

신경망의 복잡성은 숨겨진 계층의 단위 수뿐만 아니라 입력 기능의 수에 따라 달라집니다. 숨겨진 계층에 100 개의 단위가 있고 데이터 세트의 각 관측치에 4 개의 입력 기능이있는 경우 네트워크가 작습니다 (최대 400 개의 매개 변수). 일부 의료 / 바이오 테크 상황에서와 같이 각 관측치에 1M 입력 기능이있는 경우 네트워크의 매개 변수 수는 상당히 큽니다. 내 대답의 나머지 부분에 대해서는 입력 기능이 거의 없다고 가정합니다. 관측.

내가 CPU와 GPU 성능을 비교 한 좋은 예는 강화 학습을 사용하여 포커 봇을 훈련했을 때였습니다. 강화 학습을 위해 신경망에서 많은 레이어를 원하지 않는 경우가 많으며 매개 변수가 적은 레이어 만 필요하다는 것을 알았습니다. 또한 입력 기능의 수가 상당히 적었습니다. 처음에 GPU (NVIDIA Titan)에 대해 교육했지만 강화 학습에 많은 반복이 필요하므로 시간이 오래 걸렸습니다. 운 좋게도, CPU에 대한 훈련이 대신 훈련 속도가 10 배 빠르다는 것을 알았습니다! 이것은 CPU가 때때로 훈련을 위해 더 나을 수 있다고 말하는 것입니다.

CPU 또는 GPU 훈련 여부를 결정할 때 고려해야 할 다른 기준이 있습니까?

GPU에서 배치 크기를 늘림으로써 항상 전체 GPU 메모리를 채우려 고한다는 점에 유의해야합니다. 이는 CPU에서는 그렇지 않습니다. CPU에서 배치 크기가 증가하면 시간이 증가합니다. 일괄. 따라서 매우 큰 배치 크기를 갖는 것이 중요하다면 (예 : 잡음이 심한 신호로 인해) GPU를 사용하는 것이 유리할 수 있습니다. 나는 실제로 이것을 경험하지 않았으며 일반적으로 작은 배치 크기가 선호됩니다.


@pir 감사합니다! 더 읽을 수있는 특정 참조 자료가 있습니까?
StatsSorceress가

비교할 VGG와 같은 매개 변수의 수를 쉽게 찾아서 비교할 수있는 네트워크가 적다는 것을 알 수 있습니다.
pir

3
소규모 네트워크에서 많은 CPU / GPU 비교를 보지 못했습니다. 이는 대기업과 연구소의 관심사가 아니기 때문입니다.
pir

@StatsSorceress 직접 테스트하고 싶다면 간단한 Keras MLP를 설정하고 GPU와 CPU의 성능을 테스트 해보십시오. 또한 업데이트 된 답변 wrt를 참조하십시오. 네트워크의 크기.
pir

5

CPU는 지점의 관리자이며 약간의 모든 작업을 수행 할 수 있지만 위임 작업을 제외하고는 훌륭하지 않습니다. 그러나 GPU는 컴퓨터에 숨어있는 전용 수학자입니다. 수학적으로 많은 프로세스를 수행하는 경우 GPU를 사용해야합니다. 항상.

파이썬이나 MATLAB과 같은 머신 러닝에 널리 사용되는 프로그래밍 언어를 사용하는 경우 GPU에서 작업을 실행하도록 컴퓨터에 알리는 코드가 한 줄입니다.

또한 머신의 모든 코어를 사용해야합니다. 이는 병렬 컴퓨팅을 사용한다는 의미입니다. 특히 독립적으로 작업을 수행 할 수있는 신경망의 경우 속도가 엄청나게 증가합니다.


4
때로는 GPU와 데이터를주고받는 오버 헤드로 인해 병렬 처리의 속도 증가가 완전히 사라지는 것을 발견했습니다. GPU로 이동하는 것이 항상 좋은 생각은 아닙니다.
Adrian Keister

1
모델의 복잡성에 따라 다릅니다. 간단한 K-NN을 훈련하고 있다면 가치가 없을 것입니다. 그러나 역행렬 또는 많은 순차 행렬 연산이 필요한 신경망이 필요한 모델을 훈련하는 경우 항상 GPU를 선택하는 것이 좋습니다.
JahKnows

1
@AdrianKeister 동의합니다. 내가 대답하려고했던 것은. OP에 언급 된 네트워크의 경우 병목 현상이 발생할 수 있습니다.
pir

1
내 컴퓨터를 사용하면 GPU에서 100 개의 숨겨진 단위가 더 빠릅니다. CPU 속도를 높이려면 매우 적은 수의 숨겨진 장치가 필요합니다. 또한, 나는 항상 배치 훈련을하는 경향이 있습니다. 이 경우 CPU가 밀도가 높은 데이터를 고려할 때 병목 현상이 의심됩니다.
JahKnows

3

먼저 비슷한 질문의 인용문을 인용하겠습니다.

매트릭스 연산에 관해서는 두 번 생각하지 않고 항상 GPU를 선택합니다. 출처

GPU의 병렬 아키텍처는 벡터 및 행렬 연산에 적합합니다. 출처

따라서이 질문들을 읽으면, 어떤 경우 든 GPU 사용을 권유합니다. 그것은 항상 약간의 개선을 제공 할 것입니다.

'소규모'네트워크에 CPU를 훈련시켜야한다는 이유는 소규모 네트워크에 대해서만 GPU 훈련을 구현하는 것이 단순히 CPU를 훈련하는 것보다 시간이 더 오래 걸리기 때문입니다.

100- 숨겨진 단위 네트워크는 일종의 작은 것 입니다. 네트워크에 비해 작은 네트워크라고 부릅니다 . 반복 아키텍처는 대부분 피드 포워드 네트워크보다 시냅스가 더 많으므로 100 숨김 장치 RNN이 100 숨김 장치 FFN보다 '더 크게'나타납니다.


단일 숨겨진 계층이 100 단위 인 MLP가있는 경우 가중치 공유로 인해 숨겨진 100 단위가있는 표준 RNN과 동일한 수의 매개 변수를 갖는 것이 사실이 아닙니까? 그것은 더 많은 '시냅스', 더 많은 '활성화'를 가지고 있지만 같은 수의 매개 변수가 있습니다.
StatsSorceress가

나는 '무게'공유라는 용어에 익숙하지 않습니다. 그것은 같은 양의 활성화를 가지고 있지만 더 많은 연결은 더 많은 매개 변수를 가지고 있습니다 ...
Thomas W

가중치 공유는 RNN의 하나의 숨겨진 레이어에서 다음 숨겨진 레이어까지의 가중치 매트릭스가 동일 함을 의미합니다. 시간이 지남에 따라 복제 된 동일한 'U'행렬입니다. 또한 입력에서 숨겨진 레이어까지의 가중치는 시간이 지남에 따라 동일합니다.
StatsSorceress가

@StatsSorceress 저는 매트릭스 작업에 익숙하지 않습니다. 예, 숨겨진 레이어에서 다음 레이어까지의 가중치 매트릭스는 동일합니다. 그러나 레이어가 PREVIOUS 레이어에 연결될 수 있기 때문에 총 연결 수가 더 많습니다. 어떻게 설명 할 수 있는지 잘 모르겠지만, 연결된 레이어가 많을수록 RNN에는 더 많은 매개 변수가 있습니다.
Thomas W

예, 물리적으로 더 많은 매개 변수가 있지만 많은 매개 변수가 동일한 값을 사용한다는 것을 이해합니다. 즉, 입력 치수 수가 동일하고 숨겨진 치수가 동일한 MLP 및 RNN 의 유효 매개 변수 수는 같은.
StatsSorceress가
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.