2016-08-03 3 views
4

후 내가 대기열에 대한 나의 이해에 뭔가 빠진 것 같은 기분이 GitHub의 문제 읽기 :이해 tensorflow 큐와 CPU <-> GPU 전송

https://github.com/tensorflow/tensorflow/issues/3009

는 생각을 그 큐에 데이터를로드 할 때, 그것은 마지막 일괄 처리가 계산되는 동안 GPU로 미리 전송되므로 다음 일괄 처리를로드하는 데 걸리는 시간보다 처리 시간이 오래 걸리면 대역폭 병목 현상이 거의 발생하지 않습니다.

그러나 위의 링크는 대기열에서 그래프 (numpy < -> TF)로 값 비싼 복사본이 있으며 그래프에 파일을로드하고 대신에 사전 처리하는 것이 더 빠를 것이라고 제안합니다. 그러나 그것은 나에게 이해가되지 않는다. 파일에서 256x256 이미지를로드하고 원시 numpy 배열을로드하는 것이 중요한 이유는 무엇입니까? 어떤 것이 든, 나는 numpy 버전이 더 빠르다고 생각할 것이다. 내가 뭘 놓치고 있니?

+0

numpy 배열로 피드하는 경우 Python에서 TensorFlow 런타임으로 데이터를 가져 오는 추가 단일 스레드 메모리 복사본이 있습니다. TensorFlow 작업을 사용하여 파일에서로드하면 데이터가 TF 런타임에 남아 있기 때문에 해당 복사본이 필요하지 않습니다. –

+0

마지막 배치가 교육을받는 동안 GPU로 사전 전송하는 것은 어떻습니까? 그런 다음 데이터가 어디서 오는지는 중요하지 않습니다. 마지막 배치가 완료되면 TF로 이동할 준비가 되었기 때문입니다. 그게 작동하는 방법 아닌가요? 하루가 끝나면 디스크 또는 대기열에서 어딘가에 전송해야하지만 비동기라면 중요합니까? – jstaker7

+0

BTW, 그 문제에서 당신은'QueueDequeueMany'가/cpu : 0에 위치한다는 것을 알 수 있습니다. 그런 식으로 대기열을 사용하면 비동기식으로 GPU에 물건을 전송하지 않습니다. –

답변

4

GPU 대기열이 구현되어 있지 않으므로 메인 메모리에 내용을로드하기 만하므로 GPU에 비동기 프리 페치가 없습니다. 당신은 gpu:0

+0

이 기능은 GPU 대기열에 대한 지원을 추적합니다. https://github.com/tensorflow/tensorflow/issues/5722 –

2

에 고정 된 변수를 사용하여 GPU 기반의 큐 같은 것을 만들 수 documentation가이 장치에 큐를 고정 할 수 있음을 제안하는 :

N.B. 큐 메소드 (예 : q.enqueue (...))는 큐와 동일한 디바이스에서 실행해야합니다. 호환되지 않는 장치 배치 지시문은 이러한 작업을 생성 할 때 무시됩니다.

그러나 위의 내용은 내가 들으려고하는 모든 변수가 이미 GPU에 있어야 함을 의미합니다.

This 의견을 제안하면 tf.identity을 사용하여 프리 페치를 수행 할 수 있습니다.