DNN 교육의 CPU 및 GPU 메모리 요구 사항 예측


10

선택한 미니 배치 크기와 딥 러닝 모델 아키텍처가 있다고 가정 해보십시오. 해당 모델을 학습하기 위해 예상되는 메모리 요구 사항에서 어떻게 도출합니까?

예를 들어, 차원 1000의 입력, 차원 100의 완전히 연결된 숨겨진 계층 4 개 및 차원 10의 추가 출력 계층이있는 (반복되지 않은) 모델을 고려하십시오. 미니 배치 크기는 256 개의 예입니다. CPU와 GPU에서 훈련 과정의 대략적인 메모리 (RAM) 풋 프린트를 어떻게 결정합니까? 차이가 있다면 모델이 TensorFlow를 사용하여 GPU에서 훈련되었다고 가정합니다 (따라서 cuDNN 사용).

답변:


3

@ik_vision의 답은 가중치를 저장하는 데 필요한 메모리 공간을 추정하는 방법을 설명하지만 중간 활성화, 특히 3D 데이터로 작업하는 컨볼 루션 네트워크를 저장해야합니다. 이것이 필요한 메모리의 주요 부분입니다.

예제를 분석하려면

  1. 입력에는 1000 개의 요소가 필요합니다
  2. 레이어 1-4 레이어 후에는 총 400 개의 요소가 있습니다.
    1. 마지막 레이어 후에는 10 개의 요소가 있습니다

1 개의 샘플에 대해 총 1410 개의 요소가 필요합니다. 입력을 제외하고, 역방향 통과를 위해 각각에 대한 그라디언트 정보가 필요합니다. 즉, 샘플 당1820 개의 요소 가 410 이상 입니다. 배치 크기를 곱하면 465 920이됩니다.

요소 당 필요한 크기는 사용 된 데이터 유형에 따라 다르므로 "요소"라고 말했습니다. 단 정밀도의 float32경우 4B이며 데이터 블롭을 저장하는 데 필요한 총 메모리는 약 1.8MB입니다.


1

두 가지 옵션이 있습니다.

  1. 네트워크가 디스크에서로드됩니다
  2. 네트워크가 즉시 생성됩니다

두 경우 모두 대부분의 네트워크가 각 샘플에 대해 복사되므로 GPU의 메모리 크기에 배치 크기를 곱해야합니다.

디스크에서로드 된 경우의 경험 법칙 : DNN이 디스크에서 X MB를 사용하는 경우 네트워크는 배치 크기 1의 GPU 메모리에서 2 배가됩니다.

일괄 처리 크기 1에 대해 네트워크가 즉시 생성됩니다. 매개 변수를 계산하고 4 바이트 (float32 비트)를 곱합니다. 수동으로 매개 변수 수 계산 : fc1 : 1000x100 (무게) + 100 (바이어스) fc2 : 100x100 (무게) + 100 (바이어스) fc3 : 100x100 (웨이트) + 100 (바이어스) fc4 : 100x100 (웨이트) + 100 (바이어스) 출력 : 100x10 (웨이트) + 10 (바이어스)

Keras를 사용하여 매개 변수 수 계산 : model.count_params ()


3
내가 알 수있는 한, 이것은 가중치 자체 를 저장하기위한 메모리 요구 사항을 제공 하지만 그라디언트와 같이 훈련에 엄격하게 필요한 것을 저장하기위한 모든 메모리는 무시 합니다. 운동량을 구현하려면 그라디언트를 저장해야합니다. 내가 그리워?
Whaa

1
@Whaa 이것은 정확합니다. 정상 훈련을 위해서는 가중치, 순방향 패스의 활성화 및 후면 전파 패스의 그라디언트를 저장하는 메모리가 필요합니다 (모멘텀이 없어도 메모리의 3 배).
mjul December

@ mjul 내 실험은 ik_vision의 4.5 배 추정치를 보여줍니다. 3x 배후의 이론적 근거를 이해하지만 실제로 4.5x를 사용하는 이유는 확실하지 않습니다. 다른 Keras / TF 오버 헤드가 있어야합니까 ??
Wes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.