2017-10-27 1 views
1

tf.estimator.Estimator, tf.contrib.learn.Experimenttf.contrib.learn.learn_runner.run을 사용하여 분산 텐서 흐름 프로그램을 만들었습니다.tf.train.replica_device_setter가 tf.contrib.learn.Experiment와 함께 필요합니까?

지금은 제대로 작동하는 것 같습니다. 그러나 tensorflow distributed tutorialtf.train.replica_device_setter을 사용하여 작업을 작업에 고정합니다.

내 모델 기능에서 with device 주석을 사용하지 않습니다. 이 작업은 Experiment 클래스에 의해 자동으로 수행됩니까? 아니면 중요한 부분을 놓치고 있습니까?

필자는 필자가 데이터 패럴림을 사용할 때 특정 장치를 할당해야하는 이유가 무엇인지 확실하지 않습니다. 여기에 대한 도움과 힌트를

감사합니다, 토비아스

답변

0

변수와 작전 실제로 replica_device_setter (defined here)를 사용하는 tf.estimator.Estimator에 정의되어 있습니다. 보시다시피 데이터 병렬 처리를 처리하는 일반적인 방법 인 ps 작업에 작업을 할당하고 worker 작업에 작업을 할당합니다.

replica_device_setter은 장치에 ops 및 변수를 할당하는 장치 기능을 반환합니다. 데이터 병렬 처리를 사용하는 경우에도 많은 매개 변수 서버가있을 수 있으며 장치 기능을 사용하면 각 매개 변수 서버가 ps_strategy에 의해 결정되는 별도의 변수를 얻게됩니다 (replica_device_setter). 예 : /job:ps/tasks:0W1b1이 될 수 있으며 /job:ps/tasks:1W2b2이 될 수 있습니다. 이 함수는 작업자 복제본이 인스턴스화 될 때마다 호출되고 작업자가 어떤 변수를 보유하고 있는지에 동의해야하므로 장치 서버 함수는 매개 변수 서버에 변수를 할당 할 때 결정적이어야합니다.

tf. (기여) 학습 라이브러리 use between-graph replication. 즉, 각 작업자 복제본은 해당 작업자에게 할당 된 변수가 아닌 작업을 별도의 그래프로 작성합니다. 작업 인덱스가 2 인 작업자는 ops를 /job:worker/task:2으로 정의하고 변수는 /job:ps (psps_strategy)으로 정의합니다. 이는 작업자 복제본이 운영 손실 (& 그라디언트 값) 자체를 계산하고 결과 변수 업데이트 (그라데이션)를 특정 변수를 보유하는 특정 매개 변수 서버로 보냅니다.

변수/장치를 장치에 할당하는 메커니즘이 없다면 어떤 복제본이 어떤 변수와 연산을 보유해야하는지 명확하지 않습니다. 작업자 복제본에 여러 개의 GPU가있는 경우 특정 장치에 할당하는 것이 필요할 수도 있습니다. 변수가 매개 변수 서버에 저장되어 있더라도 각 GPU에 대해 계산 중심의 그래프 부분을 한 번씩 만들어야합니다 (명시 적으로 생성 된 작업을 관련 GPU에 할당).

+0

자세한 답변을 주셔서 감사합니다. @ mattias! 명확히하기 : tf. (contrib). 라이브러리가 나를위한 장치 할당을 처리합니다. 하지만 내가 명시 적으로 장치를 직접 지정해야하는 것보다 특별한 과제 (예 : 모델 패럴림, 여러 GPU 등)가있는 경우? 나는 그 권리를 얻었습니까? – user3429596

+0

네, 맞습니다. 위의 질문에 대한 답변을하시기 바랍니다 upvote :) –

관련 문제