TensorFlow의 실행 모델과 관련하여 CPU 장치 만 있고 네트워크가 추론을 위해서만 사용되는 경우 (예 : 이미지 인식 (https://www.tensorflow.org/tutorials/image_recognition) C++ 멀티 코어 플랫폼 예제.TensorFlow 단일 (멀티 코어) CPU 장치에서 실행
다음은 몇 가지 질문을하면서 이해 한 내용을 요약하려고합니다.
세션 -> 실행() (파일 direct_session.cc)은 ExecutionState :: RynAsynch를 호출합니다. ExecutorState :: RynAsynch는 루트 노드로 TensorFlow 준비 대기열을 초기화합니다. 이어서
, 명령
runner_([=]() { Process(tagged_node, scheduled_usec); }); (executor.cc, function ScheduleReady, line 2088)
는 inter_op 풀 쓰레드에 노드 (따라서 관련된 동작)을 할당한다. 그러나 어떻게 작동하는지 완전히 이해하지 못합니다. 예를 들어, ScheduleReady가 inter_op 풀의 크기보다 많은 작업을 할당하려는 경우 작업이 대기열에 추가되는 방법 (FIFO 순서?) 풀의 각 스레드에 작업 대기열이 있거나 공유 대기열? 어디에서 코드를 찾을 수 있습니까? 풀의 각 스레드의 본문은 어디에서 찾을 수 있습니까?
또 다른 질문은 inline_ready가 관리하는 노드에 관한 것입니다. 이러한 (값이 싼 또는 죽은) 노드의 실행이 다른 노드의 실행과 어떻게 다릅니 까?
그럼에도 불구하고 (여전히 내 이해에 따라) 실행 흐름은 동기 및 비동기 작업을 구별하는 작업을 실행하는 ExecutorState :: Process에서 계속됩니다. 동기 및 비동기 작업이 실행 측면에서 어떻게 다른가요?
조작이 실행되면 PropagateOutputs (ActivateNodes 호출)는 현재 노드 (선행자) 실행으로 인해 준비된 모든 후속 노드를 준비 대기열에 추가합니다.
마지막으로 NodeDone()은 현재 TensorFlow 준비 대기열에있는 노드를 처리하는 ScheduleReady()를 호출합니다.
반대로 intra_op 스레드 풀이 관리되는 방식은 특정 커널에 따라 다릅니다. 맞습니까? 커널이 intra_op 쓰레드 풀 크기보다 더 많은 연산을 요구할 가능성이 있습니까? 예인 경우 어떤 종류의 주문을 대기열에 추가합니까? (FIFO?)
작업이 풀의 스레드에 할당되면 해당 운영 체제의 스케줄링이 기본 운영 체제에 맡겨 지거나 TensorFlow가 일종의 스케줄링 정책을 적용합니까?
문서에서 실행 모델의이 부분에 대해 거의 아무것도 찾지 못했기 때문에 여기에서 묻습니다. 일부 문서를 놓친 경우 모두 나를 가리켜주십시오.
대단히 감사합니다. – Dan
@Dan Glad 내가 도울 수있다. – iga