2017-03-21 3 views
0

다중 gpu 플랫폼에서 하나의 GPU로 tensorflow 모델 (예 : cifar10)을 실행하면 tensorflow가 사용 가능한 모든 GPU에서 데이터를 만들고 브로드 캐스트합니다 (교육/추론). num_gpus를 1로 설정 했으므로 하나의 GPU에서만 실행됩니다. 그러나, 나는 다른 gpus에 동일한 과정을 또한 볼 수있다. 의도 된거야? 이것에 대한 근거가 있습니까? Caffe와 같은 다른 DL 프레임 워크를 사용하여 신속하게 확인했지만 설계/작동이 다릅니다. 물론 코드 레벨에서 device을 지정할 수는 있지만 궁금합니다. 또한이 기본 설계는 시스템이 공유되는 경우 다른 사용자에게 성가신 수 있습니다. 기본적으로다중 T GPG의 기본 Tensorflow 장치

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: 

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:1) -> (device: 1, name: 

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:2) -> (device: 2, name: 

tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:3) -> (device: 3, name: ... 



+-----------------------------------------------------------------------------+ 
| Processes:              GPU Memory | 
| GPU  PID Type Process name        Usage  | 
|=============================================================================| 
| 0  67056 C python          15623MiB | 
| 1  67056 C python          15499MiB | 
| 2  67056 C python          15499MiB | 
| 3  67056 C python          15499MiB | 
| 4  67056 C python          15499MiB | 

답변

1

는 시작시 TensorFlow 그것에 볼 수을 모든 장치에서 거의 모든 GPU 메모리를 할당합니다. 당신이 with tf.device(): 블록 (별도로 지정하지 않는 한, 그것은 "/gpu:0"로() TensorFlow로 알려진 장치 및 다른 GPU에서 유일한 곳의 작업이 유휴 상태 일 것이다 것

이 해결 방법의 몇 가지가 있습니다.

  1. . 이것은 또한 제 tf.Session 작성시 tf.ConfigProto 옵션 visible_device_list를 사용 TensorFlow 볼 수있는 디바이스 제어 python를 실행하기 전에 환경 변수 CUDA_VISIBLE_DEVICES=0 (또는 1, 2 등 적절하게) 구성 가능 세트.

  2. 첫 번째 tf.Session을 만들 때 tf.ConfigProto 옵션 allow_growth=True을 설정하십시오. 이렇게하면 TensorFlow가 모든 GPU 메모리를 사전 할당하지 못하게됩니다.