2017-01-25 10 views
0

"Distributed TensorFlow" 노하우를 가지고 "MNIST For ML Beginners" 자습서에 적용하려고 시도했습니다. 나는 (PC의 8 개 코어가) 로컬 세 TensorFlow 노동자 노드를 시작하고이 라인 교체와 함께 훈련 스크립트를 실행 : 함께TensorFlow 클러스터가 명시 적으로 지정되지 않은 경우 시스템에서로드를 분산시키는 방법은 무엇입니까?

sess = tf.InteractiveSession() 

을 다음

sess = tf.InteractiveSession("grpc://localhost:12345") 

12346이 포트 곳입니다 노드 0은 듣고있다 (예 : 마스터 세션은 노드 0에서 생성 됨). 계산을 수행해야하는 부분을 명시 적으로 지정하지 않았습니다.

htop의 출력을 보면 작업이 실제로 클러스터에서 수행 된 것을 볼 수 있습니다. CPU를 소비합니다. 그러나 유일한 소비자는 노드 0이며 나머지 노드는 작업을 수행하지 않습니다. 노드 1을 마스터 세션을 생성 할 장소로 선택하면 그림이 변경됩니다 : 노드 0 (CPU로드로 판단)에서 작업의 ~ 2/3 만 수행되지만 나머지 1/3은 노드 1에서 수행됩니다 노드 2를 마스터로 선택하면 1/3의 작업이 노드 2에서 수행됩니다. 병렬로 두 개의 프로세스를 실행하는 경우 하나는 노드 1을 마스터로 사용하고 다른 하나는 노드 2를 마스터로 사용하여 두 노드 1과 2 로드가 발생하지만 노드 0은 훨씬 더 많이로드됩니다 (예 : 200 % vs 60 % vs 60 % CPU).

지금까지 분산 된 TensorFlow의 "기본"동작은 지금 작업을 자동으로 병렬 처리하는 데 적합하지 않습니다. 나는 행동이 무엇인지 그리고 분산 된 TensorFlow가 데이터 병렬화를위한 것인지 (수동 모델 병렬화와 반대되는) 아닌가 궁금합니다.

+1

꽤 많이 수동입니다 –

+0

@ YaroslavBulatov 그래서 기본적으로 배포 된 TensorFlow는 꽤 낮은 수준이며 모든 계산이 명시 적으로 특정 작업에 배치되는 상황을 목표로하고 있습니까? – yeputons

답변

0

TF는 데이터 병렬화에 매우 적합합니다. 여러 개의 GPU에 분산 된 수많은 데이터를 가려 낼 필요가있을 때.

가중치 병렬 처리에도 좋습니다. tf.train.replica_device_setter을 사용하면 더 나은 IO를 위해 가중치가 여러 장치에 분산됩니다.

이제는 단일 모델 내에서 병렬 처리를 요청하는 것 같습니다. TF는 동일한 모델에 대한 계산을 여러 장치에 배포하는 가장 좋은 방법을 모르기 때문에 자동으로하기가 어렵습니다. 너무 많은 요소에 따라 달라집니다. 장치 간 연결 속도.

+0

단일 모델 내에서 읽기 전용 계산 시퀀스를 병렬 처리하는 간단한 방법이 있습니까? Usecase : 예측 요청 스트림과 고정 된 훈련 된 모델이 있습니다. – yeputons

+0

AFAIK, 유일한 방법은 고정 배치 크기로 모델을 초기화하는 것입니다. 그런 다음 시퀀스의 샘플을 대기열로 전달할 수 있습니다. 대기열이 앞서 설명한 배치 크기에 도달하면 하나의 전달을 수행합니다. – guinny