sortteam / HyKuFe

MIT License
4 stars 0 forks source link

[Cloud] 학습 모니터링, 로깅 #10

Open wonjong-yoo opened 5 years ago

wonjong-yoo commented 5 years ago

작업 목표

이벤트 핸들링을 위해 Sidecar 컨테이너를 추가한다. CheckPoint(나중에 오류복구를 위해.), Model, 학습 Log는 EmptyDir 볼륨에 저장되고 Sidecar 컨테이너는 이것을 외부 저장소(S3, Local...)에 저장하는 역할을 한다. 이때 학습 Log는 Container

Horovod Master Job에 Sidecar 컨테이너는 Horovod 컨테이너의 MPI 프로세스를 감시하고 종료되었을 때 해당 프로세스의 Exit code를 분석(0이면 정상종료, 아니면 비정상종료)하여 적절히 핸들링한다.

  1. Exit code가 0일때 Exit code가 0일 때 학습이 정상적으로 종료되었음으로 생각하고 Model, Log를 외부 저장소에 저장한다. (+ 향후 Dashboard가 추가된다면 웹서버에 저장 위치, 상태 등을 추가적으로 전송한다.)
  2. Exit code가 0이 아닐 때 Exit code가 0이 아닐 떄 학습이 비정상적으로 종료되었으므로 CheckPoint, Log를 외부 저장소에 저장한다.

Done Of Done(Subtask)

commit hash

Additional context

wait 백그라운드로 실행중인 모든 작업이나 옵션으로 주어진 특정 작업 번호나 프로세스 아이디가 끝날 때까지 스크립트 실행을 중단 시킵니다. 자신이 기다리고 있던 명령어의 종료 상태를 리턴합니다.

백그라운드 작업이 끝나기 전에 스크립트가 끝나는 것(무서운 고아 프로세스를 만들어 낼 수 있습니다)을 피하기 위해 wait 명령어를 쓸 수도 있습니다.

$? 가 최근 실행한 명령어의 exit code를 가져오는 명령어이다.

wonjong-yoo commented 5 years ago

wait 명령어는 현재 실행중인 쉘의 서브 프로세스만 접근 가능하다... 종료 후 처리 로직을 다시 생각해봐야할 듯.

wonjong-yoo commented 5 years ago

Linux에서 Pipe의 첫번째 명령어의 exit code를 가져오는 방법

https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another/73180#73180

set -o pipefail