2016-06-09 4 views
3

나는 tensorflow를 사용하여 CNN 기반 텍스트 분류를 작성하고 있습니다. 일부 데이터 세트는 크고 일부 데이터 세트는 작습니다.Tensorflow out of memory

저는 feed_dict를 사용하여 시스템 메모리 (GPU 메모리 아님)에서 데이터를 샘플링하여 네트워크에 공급합니다. 네트워크는 배치별로 훈련 된 배치입니다. 배치 크기는 모든 데이터 세트에 대해 고정 된 1024입니다.

내 질문 : 네트워크는 일괄 처리로 훈련되며 각 일괄 처리 코드는 시스템 메모리에서 데이터를 검색합니다. 따라서 데이터 세트의 크기가 아무리 크다해도 코드가이를 동일하게 처리해야합니다. 맞습니까?

하지만 큰 데이터 세트로 인해 메모리 문제가 발생했으며 작은 데이터 세트에서는 문제가 없습니다. 나는 시스템 메모리가 모든 데이터를 보유하기에 충분하다는 것을 확신한다. 그래서 OOM 문제는 텐서 흐름에 관한 문제입니다.

내 코드를 잘못 작성했거나 tensorflow의 메모리 관리에 관한 것입니까?

고맙습니다.

+0

메모리는 각 .run' 호출 (변수 제외) 이후에 릴리스되어야하므로 더 많은 실행 호출을 실행해도 메모리 사용이 증가하지 않아야합니다. –

+0

네, 그게 내가 이해하는 것입니다. 이것에 대한 메모리 사용을 검사 할 수있는 좋은 방법이 있습니까? 감사합니다 – xyd

+0

메모리 할당 [메시지] (https://github.com/tensorflow/tensorflow/commit/ec1403e7dc2b919531e527d36d28659f60621c9e)를 볼 수 있습니다 ([자세한 로깅 필요] (http://stackoverflow.com/a/36505898/419116)) –

답변

1

배치 크기가 1024와 너무 큽니다. 특히 AgaGrad Adam과 같은 드롭 아웃, 관심 및/또는 기타 기능을 사용하는 경우 많은 매트릭스 오버 헤드가 생성됩니다. 100과 같은 더 작은 값을 배치 크기와 같이 시도하십시오. 해결하고 잘 훈련해야합니다.

+0

네, 맞습니다. 배치 크기가 작 으면 문제가 해결됩니다. 하지만 제 질문은 배치 크기 1024가 작은 데이터 세트에서 괜찮은 이유입니까? tensorflow는 네트워크 일괄 처리를 일괄 처리하지 않습니까? 하나의 배치 만 GPU 메모리에로드하고 계산하는 것과 같습니다. 그 후에 배치를 덤프하고 다음 배치를로드합니까? 감사. – xyd

+0

모델에 대한 어휘 정의는 어떻게하고 있습니까? 그것은 데이터 집합의 크기에 좌우됩니까? – Aaron

+0

글쎄요, 큰 배치 크기는 이미 많은 메모리를 소비합니다. 더 큰 데이터 세트를 추가하면 메모리가 부족합니다. 그러나 그것은 단지 야생의 추측입니다 ... – friesel