MLOps

[MLOps] 쿠브플로우 파이프라인 - 컴포넌트 생성하기

by seokii 2023. 1. 16.
728x90
반응형

GitHub

쿠브플로우 관련 코드 내용은 GitHub에서 관리하고 있습니다.

https://github.com/Seokii/Study-MLOps

 

GitHub - Seokii/Study-MLOps: Study MLOps with Kubeflow

Study MLOps with Kubeflow. Contribute to Seokii/Study-MLOps development by creating an account on GitHub.

github.com

 

참고사이트 : 모두의 MLOps

(쿠브플로우 공부에 많은 도움이 된 사이트입니다!)

 

 

Install kfp

pip install kfp==1.8.18

kfp 1.8.18 버전을 설치해 실습을 진행했습니다.

 

 

argument와 type 작성

def print_and_return_number(number: int) -> int:
    print(number)
    return number

숫자를 입력받고 출력해 주는 간단한 함수 코드입니다.

쿠브플로우는 컴포넌트 컨텐츠에서 필요한 값들을 Config로 정의해야 합니다.

필요한 Config를 전달하기 위해서 Component Wrapper를 작성해야 하며,

이 과정에서 함수에 argument, argument의 타입, 반환받는 값의 타입을 위의 코드와 같이 작성해야 합니다.

쿠브플로우에서 반환 받을 수 있는 값의 타입은 json에서 표현할 수 있는 타입만 가능합니다.

대표적인 예로는 int, float, str이 있습니다.

 

from typing import NamedTuple

def divide_and_return_number(
    number: int,
) -> NamedTuple("DivideOutputs", [("quotient", int), ("remainder", int)]):
    from collections import namedtuple

    quotient, remainder = divmod(number, 2)
    print("quotient is", quotient)
    print("remainder is", remainder)

    divide_outputs = namedtuple(
        "DivideOutputs",
        [
            "quotient",
            "remainder",
        ],
    )
    return divide_outputs(quotient, remainder)

만약, 여러 값을 반환하려면 collections.namedtuple을 사용해 구현할 수 있습니다.
위의 코드는 입력받은 숫자를 2로 나눈 몫과 나머지를 반환하는 컴포넌트 작성 예시입니다.

 

 

쿠브플로우 형식으로 변환

from kfp.components import create_component_from_func

@create_component_from_func
def print_and_return_number(number: int) -> int:
    print(number)
    return number

작성한 함수를 쿠브플로우에서 사용할 수 있는 형식으로 변환하기 위해서

kfp.components.create_component_from_func 함수를 사용합니다.

 

 

Yaml 파일 생성하기

from kfp.components import create_component_from_func

@create_component_from_func
def print_and_return_number(number: int) -> int:
    print(number)
    return number

if __name__ == "__main__":
    print_and_return_number.component_spec.save("print_and_return_number.yaml")

파이썬 코드를 공유할 수 없는 경우라면, yaml파일로 생성하여 공유할 수 있습니다.

 

from kfp.components import load_component_from_file

print_and_return_number = load_component_from_file("print_and_return_number.yaml")
print(print_and_return_number(100))

load_component_from_file 함수를 통해 yaml파일을 통해 작성한 컴포넌트를 불러오고,

100의 인자값을 넣어 출력한 결과의 일부입니다.

 

 

728x90
반응형

댓글