변수와 작전 실제로 replica_device_setter
(defined here)를 사용하는 tf.estimator.Estimator
에 정의되어 있습니다. 보시다시피 데이터 병렬 처리를 처리하는 일반적인 방법 인 ps
작업에 작업을 할당하고 worker
작업에 작업을 할당합니다.
replica_device_setter
은 장치에 ops 및 변수를 할당하는 장치 기능을 반환합니다. 데이터 병렬 처리를 사용하는 경우에도 많은 매개 변수 서버가있을 수 있으며 장치 기능을 사용하면 각 매개 변수 서버가 ps_strategy
에 의해 결정되는 별도의 변수를 얻게됩니다 (replica_device_setter
). 예 : /job:ps/tasks:0
은 W1
및 b1
이 될 수 있으며 /job:ps/tasks:1
은 W2
및 b2
이 될 수 있습니다. 이 함수는 작업자 복제본이 인스턴스화 될 때마다 호출되고 작업자가 어떤 변수를 보유하고 있는지에 동의해야하므로 장치 서버 함수는 매개 변수 서버에 변수를 할당 할 때 결정적이어야합니다.
tf. (기여) 학습 라이브러리 use between-graph replication. 즉, 각 작업자 복제본은 해당 작업자에게 할당 된 변수가 아닌 작업을 별도의 그래프로 작성합니다. 작업 인덱스가 2 인 작업자는 ops를 /job:worker/task:2
으로 정의하고 변수는 /job:ps
(ps
은 ps_strategy
)으로 정의합니다. 이는 작업자 복제본이 운영 손실 (& 그라디언트 값) 자체를 계산하고 결과 변수 업데이트 (그라데이션)를 특정 변수를 보유하는 특정 매개 변수 서버로 보냅니다.
변수/장치를 장치에 할당하는 메커니즘이 없다면 어떤 복제본이 어떤 변수와 연산을 보유해야하는지 명확하지 않습니다. 작업자 복제본에 여러 개의 GPU가있는 경우 특정 장치에 할당하는 것이 필요할 수도 있습니다. 변수가 매개 변수 서버에 저장되어 있더라도 각 GPU에 대해 계산 중심의 그래프 부분을 한 번씩 만들어야합니다 (명시 적으로 생성 된 작업을 관련 GPU에 할당).
자세한 답변을 주셔서 감사합니다. @ mattias! 명확히하기 : tf. (contrib). 라이브러리가 나를위한 장치 할당을 처리합니다. 하지만 내가 명시 적으로 장치를 직접 지정해야하는 것보다 특별한 과제 (예 : 모델 패럴림, 여러 GPU 등)가있는 경우? 나는 그 권리를 얻었습니까? – user3429596
네, 맞습니다. 위의 질문에 대한 답변을하시기 바랍니다 upvote :) –