Data Engineering 및 Infra

kubeflow pipeline 사용해보기 - kubeflow pipeline example with iris data

이수진의 블로그 2020. 4. 7. 09:32
반응형
728x170

포스팅 개요

이번 포스팅은 kubeflow 예제(kubeflow example)에 대해서 작성합니다. 지난 포스팅에서 kubeflow 설치하는 방법에 대해서 알아보았는데요. kubeflow 설치 후 kubeflow pipeline을 이용해서 kubeflow 사용하는 방법에 대해 작성합니다.

지난 포스팅은 아래 링크이므로 혹시 kubeflow install 방법에 대해서 알고 싶으시면 참고하시면 되겠습니다.

 

kubeflow 설치하기 - Machine Learning pipeline kubeflow install

포스팅 개요 이번 포스팅은 지난 글인 머신러닝 파이프라인이란?(Machine Learning pipeline) 글에 이어서 머신러닝 파이프라인인 kubeflow를 설치(kubeflow install)하는 방법에 대해서 작성합니다. 지난 글 내용..

lsjsj92.tistory.com

 

또한, 해당 글에서 작성하는 kubeflow pipeline example은 iris data을 사용합니다. iris data는 캐글 등에서 쉽게 받을 수 있으니 참고바랍니다. 본 글에서 사용하는 관련 파일들은 아래 github repo에 올려두었습니다. 참고하셔서 편리하게 이용하시길 바랍니다.

https://github.com/lsjsj92/kubeflow_example

 

lsjsj92/kubeflow_example

kubeflow example. Contribute to lsjsj92/kubeflow_example development by creating an account on GitHub.

github.com

 

글을 작성하며 참고한 참고자료는 아래와 같습니다.


포스팅 본문

이제 kubeflow를 사용하는 방법에 대해서 알아보겠습니다. 위에서도 말씀드렸듯이 이번 kubeflow example은 iris 데이터를 사용하였습니다. 또한, 이번 kubeflow 예제는 매우매우매우매우 간단한 방법을 소개하므로 참고 부탁드립니다.

 

전체 구조

본격적인 글 작성에 앞서서 전체 구조를 먼저 살펴보고 가겠습니다. 전체 구조는 아래 사진과 같습니다.

이번 kubeflow example의 구조를 간단하게 설명하면 아래와 같습니다. 

  • 2개의 디렉토리와 하나의 파일이 있습니다.
    • 디렉토리 : load, machine learning model training : kubeflow의 각 단계에 해당되는 디렉토리입니다.
    • 파일 :  pipeline.py : kubeflow에서 사용할 pipeline을 구축할 코드입니다. 파이썬(Python) 기반으로 되어있습니다.
  • 각 디렉토리에는 아래와 같은 파일이 존재합니다.
    •  Dockerfile : kubeflow는 kubernetes 환경에서 동작합니다. 즉, docker container 환경을 사용합니다. 그에 필요한 docker image를 생성할 수 있도록 dokcer file을 만들어줍니다.
    • ~.py : 각 container 단계에서(kubeflow pipeline 단계) 실행할 코드가 파이썬 코드 기반으로 들어가있습니다. 
    • requirements.txt : 각 kubeflow pipeline 단계에서 Python 코드가 실행될 때 필요한 패키지를 설치할 수 있도록 관련 내용을 넣어주는 파일입니다.

 

kubeflow에서 사용되는 각 파일 설명

이제 전체적인 구조를 살펴보았으니, 각 파일의 세부내용을 살펴보겠습니다. 먼저 첫 번째 디렉토리에 있던 1_data_preprocessing입니다.

 

1. 1_data_load : 여기서는 단순히 data를 load하는 용도

그 중 먼저 파이썬 코드를 먼저 살펴보겠습니다.

파이썬 파일 이름은 여려분 마음대로 정하시면 됩니다. 이 단계에서 저는 단순히 data를 load 하는 용도로 사용했습니다. 

해당 코드는 굉장히 단순합니다. 굉장히 쉬운 예제인 iris data다보니 더욱 그렇습니다. 여기서 보셔야 할 것이 argument를 받는 부분입니다. 저는 1개의 argument를 받게 했는데요. 그 argument는 iris.csv 파일이 있는 경로를 지정할 수 있도록 data_path를 받도록 했습니다. 여기서는 그냥 단순히 iris data를 가져오고 shape를 찍어본 후 / 경로에 iris.csv 이름으로 데이터를 저장하도록 했습니다. (이렇게 저장하는 이유는 추후 pipeline 부분에서 설명합니다.)

이제 해당 파일을 실행할 수 있도록 Dockerfile을 만들어주면 됩니다. Dockerfile 이름은 아래와 같습니다.

만약에 해당 파이썬 환경에서 다른 패키지 설치가 필요하다고 하면 requirements.txt에 내용을 작성해주면 됩니다. 그리고 Dockerfile에 RUN pip install -r requirements.txt를 넣어주면 됩니다. 또한, 해당 Dockerfile에서 FROM 부분을 Python:3으로 했는데요. 이 부분이 이따 training_model 부분과 다르므로 유의해주시면 될 것 같습니다.

 

2. iris data를 활용해서 machine learning model training 하기

다음 코드는 load된 데이터를 활용해서 머신러닝 모델을 만드는 코드를 구현합니다.

반응형

위 코드는 여러분들 마음대로 작성하시면 됩니다. 다만, 주의하셔야 할 것이 여기서도 마찬가지로 data argument를 받아야 합니다. 앞에서 load된 데이터를 받아야합니다. 그래서 데이터를 받을 수 있도록 argument 설정을 해주어서 받도록합니다.

또한, 하나 더 주의하셔야 할 것이 앞에서의 load data 부분에서 csv 파일을 저장했는데요. 이 저장된 데이터를 해당 pipeline 단계에서 사용하려면 StringIO로 변환해주어야 합니다. StringIO로 변환하는 것은 Python의 from io import StringIO를 가져와서 변환해주면 됩니다. 위 사진 맨 위에 보시면 관련 코드가 보이실 겁니다.

마찬가지로 여기서도 Dockerfile을 만들어줍니다. 그럼 이제 우리는 2개의 Dockerfile을 만드는 것입니다. 하나는 데이터 load를 위한 container, 하나는 모델 훈련을 위한 container입니다. 이 부분은 모델 훈련을 위한 container가 되겠죠?

보시면 아시겠지만 load_data 부분에서의 Dockerfile과 다른 점이 저 FROM 절입니다. 해당 도커 이미지는 scikit-learn이 미리 설치되어 있는 환경입니다. 따라서 저 환경을 사용해 docker image를 만들 것입니다.

 

kubeflow에서 사용되는 Docker image 생성

이제 kubeflow 환경에서 사용할 Python 코드와 Dockerfile 설정을 끝냈습니다. 이 코드를 실제로 kubeflow 환경에서 사용할 수 있도록(kubernetes를 이용하므로) 이미지를 만들어주고 이미지를 배포해줍니다.

 

Dockerfile이 있는 경로에 들어가서 아래와 같은 명령어를 입력해주면 됩니다. 

  • 예시) docker build -t soojin-iris-preprocessing . 

맨 마지막에 . 이 있는 것을 놓치지마세요! 그러면 docker image가 만들어질 것입니다. 이제 이 docker image를 사용할 수 있도록 docker hub에 배포합니다.

 

docker hub에 image를 배포하기 위해서 tag를 달아주고 push해줍니다.

 

마찬가지로 training 부분도 똑같이 진행해줍니다.

실수로 빨간색 선으로 글자를 가렸네요. docker tag soojin-iris-train:latest lsjsj92/soojin-iris-train:0.5 입니다.

 

그러면 아래와 같이 본인의 docker hub 환경에 이미지가 올라간 것을 확인할 수 있습니다.

 

kubeflow 사용을 위한 pipeline 코드 작성

kubeflow를 사용하는 방법은 다양한 방법이 있습니다.(정확히는 있는 것으로 알고 있습니다.) 저는 그 중 pipeline을 구성하여 사용하는 방법으로 iris data를 load하고 훈련할까 합니다.

kubeflow pipeline을 작성하기 위해서는 kfp 라는 패키지를 활용해야 합니다. 관련 패키지 설치 방법 및 다루는 방법은 제가 개요에 작성한 참고자료를 보시면 됩니다.

일단, 제가 이번에 kubeflow pipeline을 구축하기 위한 pipeline.py 코드는 아래와 같습니다.

여기서 참고하셔야 할 사항은 다음과 같습니다.

  • 파이프라인 이름 구성
  • 파이프라인 함수 생성
  • 각 pipeline에서 사용되는 name과 image(docker container를 만들기 위한 이미지) 그리고 각 container 환경에서 사용되는 arguments 설정
  • ml.after(add_p)와 같은 순서
    • 순서에서 ml 부분은 arguments로 add_p에서 나온 output['iris']를 사용합니다.
    • add_p 부분에서 자세히 보시면 file_outputs{'iris':'/iris.csv'}로 표시했는데요. 해당 부분은 load_data.py에서 저장한 경로를 지정한 것입니다.

kubeflow에서 사용되는 pipeline 단계의 이미지는 아까 저희가 만들었던 docker image를 사용하면 됩니다. 그리고 그 docker image를 만들 때 파이썬 코드 안에 argument를 넣었었는데요. 그 argument를 여기서 다시 설정해주어 argument를 제공해주면서 실행되도록 합니다.

 

이렇게 pipeline.py 파일이 구성되었으면 이제 아래와 같은 명령어로 tar.gz파일로 만들어줍니다.

300x250

dsl-compile --py 파이프라인코드이름.py --outout 파이프라인이름.tar.gz

dsl-compile 명령어도 제가 참고 사항에 올려드린 kubeflow 공식 문서에 나와있습니다. 관련해서 설치해주시면 됩니다.

 

위 명령어를 입력하게 되면 아래와 같이 soojin-iris-pipeine.tar.gz 파일이 만들어지게 됩니다!

자! 이제 드디어 kubeflow 예제를 돌리기 위해서 iris kubeflow example 환경이 전부 갖추어졌습니다.

이제 실제로 관련 코드를 동작시키면 끝입니다!

 

kubeflow example 실행시키기 - training machine learning model with iris data

이전 글에서 kubeflow를 잘 설치하셨다면 kubeflow 환경에 접속하시면 됩니다. 그러면 웹 환경을 볼 수 있을탠데요. 왼쪽에 pipelines를 클릭하셔서 들어가신 다음 upload pipeline을 클릭합니다.

 

이제 새로운 pipeline을 kubeflow 환경에서 만들겁니다. 즉, kubeflow pipeline을 만드는 것이죠

여기서 방금전에 만들었던 pipeline.tar.gz 파일을 업로드해주면 됩니다. 아래 사진과 같이 말이죠!

 

자! 여기까지 잘 되셨다면 아래 사진과 같이 kubeflow pipeline graph가 나오는 것을 확인할 수 있으실겁니다. 여기서 create experiment를 눌러서 실험을 해봅니다.

 

실험을 한다는 것은 이 파이프라인을 동작시켜보는 것입니다. 실험을 누르게 되면 experiment name 등을 입력하게 됩니다.

 

필요한 입력사항을 입력하게 되면 밑에 run paramentes 부분에서 start 버튼이 활성화됩니다. start 버튼을 누르게 되면 kubeflow pipeline이 동작되게 됩니다. start를 눌러봅시다.

 

그러면 위와 같이 run name에서 방금 실행시킨 experiment가 나오게 됩니다. status도 확인할 수 있는데요. 해당 부분에 마우스를 클릭하거나 아니면 저 run name 부분을 마우스 클릭하게 되면 상세한 것을 볼 수 있게 됩니다.

저 부분을 눌러서 들어가보겠습니다.

 

클릭해서 들어가게 되면 kubeflow pipeline이 동작되는 순서가 눈에 보이게 됩니다. 저 graph 부분의 박스를 클릭하게 되면 동작되고 있는 log 등을 확인할 수 있습니다. 저는 iris data로 kubeflow pipeline을 구성했기 때문에 굉장히 단순하고 빠르게 pipeline이 동작됩니다.

 

 

그리고 이렇게 잘 동작이 되면 전부 초록색 버튼으로 나오게 되고(실패하면 빨간색) log를 살펴보면 실제로 정확도를 측정한 로그값이 나와있습니다. 여기까지 실행하면 kubeflow example을 동작시켜본 것입니다!


맺음말

본 글은 개요에서도 설명드렸듯이 매우 간단한 kubeflow pipeline 예제(kubeflow pipeline example)을 담고 있습니다. iris data를 활용해서 kubeflow pipeline을 만들었기 때문에 단순할 수 밖에 없겠네요 ㅎㅎ

kubeflow pipeline 예제가 그렇게 많지 않아서 굉장히 삽질을 많이 하면서 진행했네요..

부디 kubeflow를 사용해보시려는 입문자 분들에게 도움이 되길 바랍니다.

다음 포스팅에서는 AWS와 연동하는 방법에 대해서 작성하겠습니다. 

다음 글 : https://lsjsj92.tistory.com/586

 

kubeflow pipeline AWS와 연동하기 - kubeflow pipeline example with titanic data

포스팅 개요 이번 포스팅은 지난 글(kubeflow pipeline iris data)에 이어 kubeflow 예제(kubeflow example)에 대해서 작성합니다. 지난 글은 kubeflow 설치하는 방법과 kubeflow를 간단하게 사용할 수 있는 방법..

lsjsj92.tistory.com

감사합니다.

반응형
그리드형