2016-09-30 3 views
1

저는 Distributed Tensorflow, 특히 https://github.com/Russell91/TensorBox에있는 Distributed Tensorflow를 사용하여 Reinspect 모델을 구현하고 있습니다.Reinpect의 분산 된 Tensorflow 교육 인간 감지 모델

우리는 Distributed tensorflow 설정 간의 그래프 - 비동기 구현을 사용하고 있지만 결과는 매우 놀랍습니다. 벤치 마킹 동안 Distributed 교육은 단일 기계 교육보다 거의 2 배 이상의 교육 시간이 필요하다는 것을 알게되었습니다. 어떤 일이 일어날 수 있는지에 대한 모든 단서와 그 밖의 시도가있을 수 있다면 정말 감사 할 것입니다. 감사합니다

참고 사항 : 게시물에 수정이 있습니다. 우리는 그래프 내 구현이 아닌 그래프 구현을 사용하고 있습니다. 실수로 죄송합니다.

답변

2

relevant discussion입니다. 귀하의 질문에서, 그것은에 갈 수있는 것을 분명 아니지만, 여기에 몇 가지 일반적인 포인터 : 모델이 계산의 양을 기준으로 매개 변수의 수가 많은 경우

  • (예를 들어이 대부분 큰 수행하는 경우는 행렬 곱셈보다는 곱셈 곱셈), 그러면 네트워크가 병목 현상이라는 것을 알 수 있습니다. 네트워크 연결의 대역폭은 얼마입니까?

  • 불행한 장치 배치로 인해 프로세스간에 많은 복사본이 있습니까? 타임 라인을 수집하고 시각화하여 모델을 실행할 때 어떤 일이 일어나는지 확인하십시오.

  • 확장 성을 위해 not currently recommended 인 "그래프 내 복제"를 사용한다고 언급했습니다. 그래프 내 복제는 단일 마스터에서 병목 현상을 일으킬 수 있습니다. 특히 복제본이 많은 대형 모델 그래프가있는 경우에 그러합니다.

  • 복제본 또는 여러 입력 파이프 라인에서 단일 입력 파이프 라인을 사용하고 있습니까? 단일 입력 파이프 라인을 사용하면 입력 파이프 라인을 실행하는 프로세스에 병목 현상이 발생할 수 있습니다. (그러나 그래프 내 복제를 사용하면 많은 수의 스레드로 I/O를 구동하는 파이썬 프로세스가 하나이기 때문에 여러 입력 파이프 라인을 실행하면 병목 현상이 발생할 수 있습니다.)

  • 아니면 피드 메커니즘을 사용하고 있습니까? ? 데이터를 공급하는 것은 복제 된 설정에서와 같이 프로세스 경계를 ​​넘어야 할 때 훨씬 느립니다. 그래프 간 복제를 사용하면 단일 클라이언트 프로세스에서 병목 현상을 제거 할 수 있지만 더 나은 성능을 얻으려면 입력 파이프 라인을 사용해야합니다. (Yaroslav observed으로, 큰 텐서 값을 공급 및 가져 오는 것은 RPC를 통해 데이터가 전송되기 때문에 분산 버전에서 느립니다. 단일 프로세스에서는 대신 간단하게 memcpy()을 사용합니다.)

  • 몇 개의 프로세스를 사용하고 있습니까? 스케일링 커브는 어떻게 생겼습니까?매개 변수 서버와 단일 작업자 복제본을 사용할 때 (단일 결합 된 프로세스와 비교할 때) 즉각적인 속도 저하가 있습니까? 더 많은 복제본을 추가 할 때 성능이 향상됩니까?

1

저는 최근에 비슷한 일을보고 있었고 grpc에서 Python 런타임으로 데이터를 이동하는 것이 예상보다 느립니다. add_op 다른 프로세스에 놓여 있다면 특히

add_op = params.assign_add(update) 
... 
sess.run(add_op) 

패턴

다음 고려하고 sess.run/초 50-100 메가 바이트 비율로 발생하는 디코딩 단계를 추가한다.

는 여기에 다중 시스템 구현 모델의 단일 프로세스 구현에서 이동하는 둔화로 이어질 것인지 나는 놀라지 않을 것이다하는 benchmark 및 일반적으로

관련 문제