2016-09-02 2 views
1

딥 학습과 그 프레임 워크에서 비교적 새로운입니다. 현재 Caffe 프레임 워크를 실험 중이며 Vgg16_places_365를 미세 조정하려고합니다.Finetuning Caffe Deep Learning Check 실패 : 오류 == cuda 메모리 부족

4 개의 GPU가있는 Amazone EC2 인스턴스 g2.8xlarge를 사용하고 있습니다 (각각 4GB의 RAM이 있음). 나는 몇 가지 조사를 한 후,이 방법 중 하나가 문제입니다 메모리 부족이 문제를 해결하는 것을 발견

Check failed: error == cudaSuccess (2 vs. 0) out of memory

: 나는 (단일 GPU를 사용) 내 모델을 학습 할 때 그러나,이 오류가 발생했습니다 내 train.prototxt에서 배치 크기를 줄이십시오.

Caffe | Check failed: error == cudaSuccess (2 vs. 0) out of memory.

처음에는 배치 크기를 50으로 설정하고 반복적으로 10으로 줄였습니다 (batch_size = 10 일 때부터 작동했기 때문에). 이제 모델이 훈련되고 꽤 오랜 시간이 걸릴 것이라고 확신합니다. 그러나이 도메인의 초보자로서,이 배치 크기와 학습 속도, 단계 크기 및 심지어 solver.prototxt에서 지정하는 최대 반복과 같은 다른 매개 변수 간의 관계에 대해 궁금합니다.

배치의 크기가 모델 정확도에 영향을 미칩니다 (예 : 정확도와 같음). 다른 매개 변수를 사용하여 품질을 활용하는 방법. 또한 배치 크기를 줄이거 나 컴퓨터를 확장하는 대신이 문제를 해결할 다른 방법이 있습니까?

답변

1

배치 크기, 학습 속도 및 최대 반복 횟수와 같은 매개 변수 간의 관계에 관한 첫 번째 질문에 답하려면 수학적 배경에 대해 읽는 것이 가장 좋습니다. 시작하기 좋은 곳은이 stats.stackexchange 질문 일 수도 있습니다 : How large should the batch size be for stochastic gradient descent?. 그 대답은 배치 크기와 학습 속도 사이의 관계에 대해 간략하게 논의 할 것이며 (귀하의 질문에서 나는 학습 속도 = stepsize라고 가정 함) 또한 추가 읽기를위한 참고 자료를 제공 할 것입니다.

마지막 질문에 대한 답을 얻으려면 데이터 세트를 통해 문제를 해결하고 모델 (예 : VGG16)이 고정되어 있어야합니다 (예 : 고정 크기의 입력 데이터와 고정 크기의 모델). 큰 배치 크기에 대한 메모리 부족 문제를 피할 수 있습니다. 그러나 입력 크기 또는 모델 크기를 줄이려면 큰 배치 크기를 사용할 수 있습니다. 모델을 축소하는 방법에 따라 학습 된 레이어를 버리거나 완전히 연결된 레이어의 수/크기를 줄이는 방법으로 이미 모델 크기를 줄이는 방법이 있습니다.

배치 크기가 품질/정확도에 얼마나 큰 영향을 미치는지, 다른 매개 변수가 품질/정확도에 어떤 영향을 주는지 등에 대한 질문은 해결하려는 구체적인 문제를 알지 못하면 대답하기가 어렵습니다. 예를 들어, 달성 된 정확도에 대한 배치 크기는 데이터 세트의 노이즈, 데이터 세트의 차원, 데이터 세트의 크기는 물론 학습 속도 (= 단계 크기) 또는 운동량 매개 변수와 같은 다양한 요소에 따라 달라질 수 있습니다. 이러한 종류의 질문에 대해서는 textbook by Goodfellow et al.을 권장합니다. 11 장에서는 이러한과 매개 변수 선택에 대한 일반적인 지침 (예 : 배치 크기, 학습 속도 등)을 제공 할 수 있습니다.

+0

멋진 답변과 감사를 표합니다. 그래서, 내가 올바르게 이해할 수 있다면, 일반적으로 배치 크기는 체중 업데이트를하기 전에 얼마나 많은 예제를 보는지 결정합니다. 즉, 배치 크기가 작거나 작을수록 트레이닝 신호의 잡음이 커지는 것입니다. 맞습니까? 그렇다면 배치 크기를 줄일 때 학습 속도를 높여야한다는 의미입니까? – bohr

+0

또한 앞서 언급 한 두 가지 대안에 대해 말하면서 - ** 입력 크기를 줄이거 나 모델 크기를 줄이십시오 ** - 이것에 대해서는 약간의 걱정이 있습니다. 내가 아는 한 일부 모델의 입력 크기는 고정되어 있으며 고유하므로 수정하면 오류가 발생합니다. 반면에, vgg 나 googlenet과 같은 기존 모델을 사용하고 있기 때문에 (계산 속도와 모델 품질 측면에서) 얼마나 중요한지, 레이어 중 일부를 버리거나 완전히 연결된 크기를 줄이면 레이어? – bohr

+0

예, 배치 크기에 대한 이해가 정확합니다. 그러나 배치 크기를 줄이는 것이 반드시 학습 속도를 높이거나 그 반대로하는 것을 의미하지는 않습니다. 두 번째 질문 : 데이터 세트가 고정되어 있으면 (예 : 이미지 크기) 입력 크기를 줄이는 것은 옵션이 아니지만 VGG 모델에서 오류가 발생하지 않을 경우 완전히 연결된 레이어를 재교육 (따라서 크기를 조정) 할 수 있습니다 완전히 연결된 레이어 만 원래 입력 크기로 제한됩니다. 예를 들어, 컨볼 루션 레이어를 유지하면서 완전히 연결된 레이어의 크기를 줄임으로써 모델 크기를 줄이는 것이 가능합니다. –

1

문제를 해결하는 또 다른 방법은 컴퓨터의 모든 GPU를 사용하는 것입니다. GPU에 4x4=16GB의 RAM이 있다면 충분합니다. 당신은 파이썬을 사용하는 경우에는

build/tools/caffe train --solver=solver.prototxt --gpu=0,1,2,3 

: 당신은 명령 모드에서 CAFFE를 실행하는 경우 (당신은 기본 0, 1, 2, 3으로 인덱스 4의 GPU가 가정) 다음과 같이 바로 --gpu 인수를 추가 인터페이스는 여러 GPU로 실행되지 않습니다.

배치 크기에 대한 질문에 대답하는 데 도움이되는 몇 가지 일반적인 힌트를 지적 할 수 있습니다. - 배치 크기가 작을수록 학습 데이터가 과도하게 확률이 낮아집니다. 수렴하지 않을 확률이 높습니다. - caffe의 각 반복은 하나의 데이터 배치를 가져오고, 앞쪽으로 실행하고, 뒤 전이로 끝납니다. - 교육 데이터가 50,000이고 배치 크기가 10이라고 가정 해 보겠습니다. 1000 번 반복하면 데이터의 10,000 개가 네트워크에 공급됩니다. 동일한 시나리오 시나리오에서 배치 크기가 50 일 경우 1000 회 반복으로 모든 교육 데이터가 네트워크에 표시됩니다. 이를 일신 시대라고합니다. 특정 기간 동안 네트워크가 훈련되는 방식으로 배치 크기 및 최대 반복을 설계해야합니다. - caffe의 stepsize는 학습 속도에 감마 값을 곱하기 전에 해결사가 실행될 반복 횟수입니다 (교육 방법을 "단계"로 설정 한 경우).

+0

답변 해 주셔서 감사합니다. 여러 gpus를 사용하는 것이 좋은 선택이지만 아직 모든 매개 변수를 최적화하는 방법을 알아 내려고합니다. 몇 가지 고려 사항으로 인해 하나의 GPU 만 사용할 수 있습니다. 또한 설명에 감사드립니다. 간단하지만 유익한 정보. 그러나, 귀하의 경험을 바탕으로 배치 크기, 학습 속도 등과 같은 하이퍼 매개 변수를 지정하는 데있어 어떤 규칙이 있습니까? – bohr

+0

학습 속도와 관련하여 문헌에서 많은 경험 법을 발견 할 수 있습니다. 예를 들어 VGG 문서 (https://arxiv.org/pdf/1409.1556.pdf (섹션 3.1) 참조) 또는 Caffe 문서 (http : //caffe.berkeleyvision.org/tutorial/solver.html ("학습 속도 및 운동량 설정에 관한 엄지 손가락 규칙"섹션), Alex Krizhevsky의 논문에서도 인기가 있습니다. https://papers.nips.cc /paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf (5 절). 논문은 일반적으로 사용 된 배치 크기와 학습 속도의 감축 방식을보고합니다. –

+0

굉장해 !! 언젠가 모든 출처를 읽을 것입니다. 그러나, 나는 모든 gpus ('caffe train --solver = solver.prototxt --gpu = 0,1,2,3')를 사용하여 교육을 실행하려고 시도하고 있지만 googlenet 모델을 사용하고 있습니다 (train.prototxt에서 배치 크기 : 50). 그러나 나는 똑같은 기억 문제를 안고있다. @DavidStutz – bohr