2016-08-03 6 views
7

TensorFlow에서 마스터 및 작업자 서비스의 정확한 역할을 이해하려고합니다.TensorFlow 마스터 및 작업자 서비스

지금까지 나는 내가 시작하는 각 TensorFlow 작업이 tf.train.Server 인스턴스와 관련되어 있음을 이해합니다. 나는 이것이 의미하는 바로 것을, 하나 개의 작업 만과 관련된 오전 :.이 인스턴스는

1 질문

는 "마스터 서비스"및 tensorflow::Session 인터페이스를 구현하여 "직원 서비스" "(마스터)와 worker_service.proto (노동자) 수출 ONE 노동자 또한


, 내가 이해 ... 마스터에 대한

...은? 그것은 t의 범위입니다 그는 마스터 서비스를 ...

(1) ... 클라이언트가 예를 들어 세션을 실행할 수 있도록 클라이언트에 기능을 제공합니다.

(2) ... 세션 실행을 계산하기 위해 작업을 사용 가능한 작업자에게 위임합니다.

두 번째 질문 : 두 개 이상의 작업을 사용하여 분산 된 그래프를 실행하는 경우 하나의 마스터 서비스 만 사용됩니까?

세 번째 질문 : tf.Session.run은 한 번만 호출해야합니까?

이 적어도 내가 the whitepaper에서이 그림을 해석하는 방법이다 : 작업자에 대한

enter image description here


...

: 그것은 작업자 서비스의 범위는 ...

(1) 작업자가 관리하는 장치에서 노드 (마스터 서비스에서 위임받은 노드)를 실행합니다.

네 번째 질문 : 한 명의 작업자가 여러 장치를 어떻게 사용합니까? 작업자가 단일 작업 배포 방법을 자동으로 결정합니까?


잘못된 진술을 내놓았을 경우를 대비하여 제발 정정하십시오! 미리 감사드립니다 !!

+0

이전 버전에서는 GPU 장치에서 라운드 로빈 방식 이었지만 이후 버전에서는 모든 것을 GPU : 0에 배치 한 것으로 보입니다. 따라서 멀티 GPU 구성의 경우 수동 배치가 필요합니다 –

답변

8

첫 번째 질문 : 즉, 하나의 작업이 오직 하나의 작업자와 관련된 이라는 것을 의미합니까?

이것은 일반적인 구성입니다. 예. 각 tf.train.Server 인스턴스에는 전체 TensorFlow 런타임이 포함되어 있으며 기본 구성에서는이 런타임에 머신에 대한 단독 액세스 권한이 있다고 가정합니다 (GPU에 할당되는 메모리 양 등).

같은 프로세스에서 여러 개의 tf.train.Server 인스턴스를 만들 수 있습니다. 우리는 때로는 for testing을 사용합니다. 그러나 이러한 인스턴스 간에는 리소스 격리가 거의 없으므로 단일 인스턴스에서 여러 인스턴스를 실행하면 현재 버전에서 성능이 좋지 않을 수 있습니다.

두번째 질문 : 경우에 우리는 하나의 마스터 서비스가 익숙해 않는 이상 하나의 작업을 사용하여 분산 그래프를 실행?

사용중인 form of replication에 따라 다릅니다. '그래프 복제'를 사용하는 경우 모델의 모든 복제본 (예 : 작업자 작업)을 아는 단일 마스터 서비스를 사용할 수 있습니다. "그래프 간 복제"를 사용하는 경우 모델의 단일 복제본에 대해 각각 알고있는 다수의 마스터 서비스를 사용하며 일반적으로 해당 서비스가 실행되는 작업자 태스크와 함께 배치됩니다. 일반적으로 그래프 간 복제를 사용하는 것이 더 우수하다는 것을 알았습니다. tf.train.Supervisor 라이브러리는이 모드에서 작업을 단순화하도록 설계되었습니다.

세 번째 질문 : tf.Session.run()은 한 번만 호출해야합니까?

는 (나는.이 "한 번 훈련 단계 당"을 의미 루프에서 tf.Session.run()를 호출 모델을 훈련에 대한 간단한 TensorFlow 프로그램을 믿고있어.)

이 사용중인 복제의 형태에 따라 달라집니다 , 교육 업데이트 사이에 원하는 조정.

  • 에서 그래프 복제를 사용하면 실행하는 하나의 train_op 수있는 단일 tf.train.Optimizer에 손실 또는 그라디언트를 통합하여 동기 업데이트를 할 수 있습니다. 이 경우 훈련 단계 당 한 번 tf.Session.run(train_op)으로 전화하십시오. 복제, 여러에게 실행 train_op 작업을 제공 복제 당 하나의 tf.train.Optimizer를 정의하여 비동기 업데이트 할에 그래프 를 사용

  • . 이 경우 일반적으로 각각 tf.Session.run(train_op[i])을 다른 스레드에서 동시에 호출합니다.

  • 사이의 그래프 복제를 사용하면 각 복제에서 별도로 구성되어있는 tf.train.SyncReplicasOptimizer를 사용하여 동기 업데이트를 확인합니다. 각 복제본에는 tf.Session.run(train_op)에 대한 단일 호출을 수행하는 고유 한 교육 루프가 있으며 SyncReplicasOptimizer은 이들을 조정하여 업데이트가 동 기적으로 (작업자 중 하나의 백그라운드 스레드에 의해) 적용되도록합니다.

  • 사이의 그래프 복제를 사용하면 동기식의 경우와 유사한 훈련 루프 것을 사용하여, (tf.train.SyncReplicasOptimizer 이외의) 다른 tf.train.Optimizer 서브 클래스를 사용하여 비동기 업데이트 할 수 있지만, 배경 조정없이.

4 질문 : 하나의 작업자가 여러 장치를 사용합니다 하는가? 작업자가 단일 작업을 배포하는 방법을 자동으로 결정합니까 아니면 ... ...?

각 작업자는 단일 프로세스 TensorFlow에서 사용되는 동일한 배치 알고리즘을 실행합니다. 별도로 지시가없는 한, 배치자가 GPU를 사용할 수있는 경우 GPU에 작업을 배치하고 (GPU 가속 구현이 있음) 그렇지 않으면 CPU로 폴백합니다. tf.train.replica_device_setter() 장치 기능을 사용하여 "매개 변수 서버"역할을하는 여러 태스크에서 변수를 분할 할 수 있습니다. 보다 복잡한 요구 사항 (예 : 여러 GPU, 작업자의 지역 변수 등)을 사용하는 경우 명시적인 with tf.device(...): 블록을 사용하여 하위 그래프를 특정 장치에 할당 할 수 있습니다.

관련 문제