"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가 데이터 병렬화를위한 것인지 (수동 모델 병렬화와 반대되는) 아닌가 궁금합니다.
꽤 많이 수동입니다 –
@ YaroslavBulatov 그래서 기본적으로 배포 된 TensorFlow는 꽤 낮은 수준이며 모든 계산이 명시 적으로 특정 작업에 배치되는 상황을 목표로하고 있습니까? – yeputons