포스팅 개요
이번 포스팅은 kubeflow pipeline을 cron job(batch job)으로 반복 실행시키는 방법에 대해서 작성합니다. kubeflow cron job은 내부적으로 recurring job으로 보이고 이를 설정했을 때 scheduled workflows로 설정되는데요. 이를 설정하면 특정 시간, 혹은 특정 기간 마다 kubeflow pipeline을 반복적으로 실행합니다. 이번 포스팅은 이와 같은 방법에 대해 정리합니다.
kubeflow 설치와 기본적인 설명은 지난 포스팅에서 작성했던 내용을 기반으로 설명합니다. 지난 포스팅은 아래 링크이므로 글을 읽다가 잘 모르시겠으면 참고해주세요.
그 외 글을 작성하기 위해 참고한 자료는 아래와 같습니다.
포스팅 본문
kubeflow pipeline을 만들면 Machine Learning pipeline이 만든 것입니다. 근데 이를 매번 수작업으로 실행할 수는 없습니다. 그렇기 때문에 자동으로 특정 시간 혹은 특정 기간이 되면 실행하도록 batch job을 설정할 수 있습니다. kubeflow batch job은 kubeflow web 환경에서는 recurring으로 표시되어 있습니다.
Kubeflow에서 batch job(cron job)을 설정하는 것은 매우 간단합니다. 자! kubeflow를 실행 시키는 것을 시작으로 알아보겠습니다.
1. kubeflow 실행 및 web 접속
저는 kubeflow를 minikube에 설치해두었습니다. 포스팅 개요 첫 번째 제 블로그 글을 참고하시면 됩니다. minikube 환경에 이미 kubeflow를 설치해두었으니 minikube start로 실행시켜주면 알아서 동작이 됩니다.
해당 명령어를 입력하면 minikube가 실행되면서 kubeflow가 실행되는데요. 이제 웹 환경에 접속하기 위해 port forward를 해줍니다.
- kubectl port-forward -n istio-system svc/istio-ingressgateway 8080:80
자! 그러면 아래와 같이 웹 환경에 접속할 수 있을겁니다.
2. kubeflow pipeline upload
이제 다음으로 pipeline을 업로드합니다. 저는 포스팅 개요 2번째 글에서 작성된 iris data를 사용하겠습니다.
위 사진과 같이 미리 만들어둔 iris pipeline을 kubeflow 환경에 올려놓고 pipeline 환경을 생성합니다.
upload 파일 이름이나 이런 것은 테스트 용으로 해놨기 때문에 신경안쓰셔도 됩니다. dsl-compile할 때 파일 이름을 알맞게 설정해주세요.
3. kubeflow cron job (batch job) 설정하기
자! 이제 pipeline 환경을 설정해두었으니 experiment를 생성합니다. 이 experiment 환경에서 recurring job을 설정할 수 있습니다.
위 사진과 같이 오른쪽 상단에 create experiment가 있는데 여기로 들어갑니다.
그러면 아래 사진과 같이 experiment를 생성할 수 있는데요. 여기서 name을 설정한 뒤 넘어가도록 합니다.
자! 그러면 experiments의 detail한 설정으로 넘어오는데요. 보통은 여기서 run type의 default 설정이 one-off로 되어있습니다. 하지만 cron job을 돌리기 위해서는 recurring으로 맞춰주어야 합니다.
위 부분을 recurring으로 선택하면 됩니다. 그러면 run trigger 부분이 나오면서 trigger를 설정할 수 있습니다. kubeflow pipeline에서의 trigger type은 2가지가 있습니다.
- Periodic : 특정 기간마다 experiment 실행
- Cron : linux 환경에서 자주 보이는 cron job 실행
여기서 Periodic은 설정만 해주면 매우 간단하게 사용할 수 있기 때문에 Cron으로 설명하도록 하겠습니다.
Cron을 선택하면 위 사진과 같이 cron expression을 사용할 수 있습니다. cron expression 기준은 아래와 같습니다.
- 초 분 시 일 월 요일
이것에 맞도록 설정하면 해당 시간에 맞추어서 cron job이 실행되는 것을 확인할 수 있습니다. 저는 2분마다 돌아가도록 설정하였습니다.
주의사항
여기서 조금 혼란스러울 수도 있는 것이, 저기 cron expression 부분을 보면 format is specified here 부분에 here이 있습니다. 여기서 자료를 보시면 아래와 같이 설명이 되어 있는데요.
마치 처음이 분으로 설명이 되어 있는 것으로 나와있습니다. 이를 참고하여 헷갈려서 만약 cron expression을 2분으로 설정한다고 가정했을 때
*/2 * * * * ?
와 같이 설정해둔다면 의도했던 2분이 아닌, 2초마다 실행이 됩니다. 꼭 주의해주세요.
저렇게 cron job을 설정하고 start를 하면 ㅏ래와 같이 recurring run configs에 active가 되었다고 나옵니다.
저 부분의 manage를 클릭하시면
recurring runs 라는 것을 볼 수 있고 현재 kubeflow pipeline의 experiment가 어떤 Recurring을 가지고 있는지 볼 수 있습니다. 그리고 Enabled로 나와 있으면 실행되고 있는 상태이며, 저 Enabled를 클릭하면 Disabled로 바뀌게 됩니다.
4. kubeflow pipeline batch cron job 확인하기
이렇게 cron job을 설정해두면 매 2분마다 실행이 되고 있는 것을 web과 kubectl 명령어로 확인할 수 있습니다. web에서 확인하는 것은 쉽게 experiments를 클릭해서 확인할 수 있습니다.
이런식으로 웹에서 표현됩니다.
그럼 터미널에서 kubectl 명령어로는 어떻게 확인할까요? 다음과 같이 확인할 수 있습니다.
1. kubectl -n kubeflow get pods
kubectl -n kubeflow get pods를 통해 동작되고 있는, 아니면 동작이 끝난 kubeflow pipeline에 대해서 pods로 확인할 수 있습니다.
위와 같이 말이죠!
2. kubetl get workflow -n kubeflow
cron job이 동작되면 workflow 기록에 남아있습니다. kubectl get workflow -n kubeflow 명령어로 확인해보시면 runof~로 해서 workflow가 동작된 것을 확인할 수 있습니다. 무엇보다 AGE를 통해 대략 어느정도 주기(cron으로 설정해둔 주기와 1초정도 차이나고 똑같습니다)로 동작되었는지 확인도 가능합니다.
3. kubectl get scheduledworkflows -n kubeflow
cron job으로 설정해둔 (recurring) 값은 kubeflow의 scheduledworkflows에서 관리됩니다. kubectl get scheduledworkflows -n kubeflow를 입력하면 설정해둔 recurring job이 보이게 됩니다. 또한, 이를 kubectl 명령어로 터미널 환경에서 삭제하고 싶으시다면 아래와 같은 형태의 명령어로 지울 수 있습니다.
- kubectl delete scheduledworkflows -n kubeflow RUNNAME
마무리
이번 포스팅은 kubeflow에서 batch job(그 중 cron job)에 대해서 알아보았습니다. 이는 매 batch 마다 kubeflow가 동작이 될 수 있도록 설정할 수 있어 매우 유용합니다. 그리고 설정하는 방법도 어렵지 않습니다.
부디 도움이 되길 바랍니다. 감사합니다.
'Data Engineering 및 Infra' 카테고리의 다른 글
Metabase 설치 방법 - MySQL(MariaDB) 연동 및 Athena, Oracle 연동하기 (0) | 2021.02.04 |
---|---|
Mac OS 환경에서 Git 설치하기 - Mac git, github 셋팅 방법 (16) | 2020.08.23 |
kubeflow pipeline 예제(example) - pipeline metrics 출력과 condition 체크하기 (8) | 2020.06.11 |
kubeflow pipeline AWS와 연동하기 - kubeflow pipeline example with titanic data (2) | 2020.05.23 |
사용자 정의 kubernetes helm 생성 및 배포하기 - django helm으로 배포하기 (2) | 2020.04.19 |