본문 바로가기
MLOps

[Tensorboard] Multi Process 에서 하나의 Tensorboard 에 접근할 때 문제점

by ML_MJSHIN 2021. 10. 29.

 프로젝트 도중 pytorch의 nn.DataParallel이 아닌 nn.DistributedDataParallel을 사용하도록 AI Engine의 구조를 변경해야 할 일이 있었습니다.

 

기존에는 Tensorboard에 1개의 프로세스가 혼자 접근을 해서 log data인 events.out.tfevents.<---> 파일이 1개만 생성이 되었기 때문에 텐서보드에서 출력을 하는데 문제가 없었습니다..

 

 그런나, 프로젝트 기반이 되는 엔진의 구조상 Tensorboard의 SummaryWriter를 각각의 프로젝트마다 호출해야 하는 형태가 되는 경우에 텐서보드 웹대쉬에서 업데이트가 제대로 되지 않는 경우가 있습니다.

 

 오류 메시지는 다음과 같습니다. 

 "File <events.out.tfevents.<A>> 가 있지만 <events.out.tfevents.<B>> 를 업데이트 합니다" 라는 메시지가 ㅂ ㅏㄹ생합니다. 

File ./logs\1588205514.6450007\train\events.out.tfevents.1588205515.DE SKTOP.14952.259.v2 updated even though the current file is ./logs\1588205514.6450007\train\events.out.tfevents.1588205515.DE SKTOP.profile-empty"

 

 우선 발생 이유는 SummaryWriter가 생성되면서 log path에 events 파일을 생성하는데 같은 위치에 2개의 파일이 있고 logpath 폴더를 tensorbard --logdir=<logpath폴더>로 살펴보는 경우 실시간 업데이트가 1개의 파일을 통해서만 되기 때문입니다.

 

 이를 해결하기 위해서는 tensorboard의 대쉬보드를 연결할때 아래와 같이 명령어를 입력해주면됩니다.

tensorboard --logdir=<경로> --reload_multifile=true

 

 여기에서 --reload_multifile=true 를 설정해주는 것으로 events 파일이 같은 폴더내에 여러개 있는경우 반복적으로 모든 파일을 새로 업데이트해오기 때문에 실시간 업데이트가 정상적으로 이루어집니다. 

 

 *최신 버전에서는 되는 경우도 있다고 합니다. 저는 docker image를 공유하는 환경이라 구버전에서만 테스트해보았습니다.*