본문으로 건너뛰기

Kubeflow 모델 서빙 API 만들기

카카오클라우드 Kubeflow 환경에서 예제 데이터세트를 활용하여 머신러닝 파이프라인을 구축하고, 이를 통해 생성된 모델을 웹 API 형태로 제공하는 방법을 안내합니다.

기본 정보

시작하기 전에

Kubeflow 환경에서 모델을 서빙하는 과정을 통해, 사용자는 실시간 예측이 가능한 API를 구축하고 관리하는 방법을 학습할 수 있습니다. 이 튜토리얼을 통해 학습된 모델을 KServe를 사용하여 웹 API 형태로 제공하는 전체 프로세스를 이해하고 직접 구현해볼 수 있습니다.

시나리오 소개

이 튜토리얼에서는 카카오클라우드의 Kubeflow 환경에서 KServe를 이용하여 모델 서빙 API를 구축하고 관리하는 과정을 단계별로 소개합니다. KServe를 사용하면 복잡한 인프라 관리 없이도 모델을 서빙하고 확장성 있게 운영할 수 있습니다. 이 시나리오의 주요 내용은 다음과 같습니다.

  • Kubeflow에서 KServe 모델 서버 인스턴스 생성 및 설정
  • 학습된 모델을 사용하여 실시간 예측 API 구축
  • KServe를 활용하여 모델 서빙 프로세스를 관리하고 최적화하는 방법 학습

지원 도구

도구버전설명
KServe0.8.0- 모델 서빙 도구로 빠른 모델 배포 및 업데이트 지원, 높은 가용성과 확장성을 제공
- 머신러닝 모델 서빙을 위한 일반적인 문제(로드밸런싱, 모델 버전 관리, 실패 복구 등) 자동 처리
안내

KServe에 대한 자세한 설명은 Kubeflow > KServe 공식 문서를 확인해 주세요.

사전 작업

모델 서빙 API를 사용하기 위한 환경 설정 및 필수 리소스 준비 과정을 안내합니다.

1. Kubeflow 도메인 연결 확인하기

본 실습을 진행하기 위해서는 Kubeflow 만들기도메인 연결(선택) 항목에 도메인 설정이 필요합니다. 또한, 네임스페이스 쿼터 설정 시 원활한 실습이 어려울 수 있으므로, '도메인 연결' 및 '쿼터 미 설정' 후 실습을 진행합니다.

안내

자세한 설명은 Kubeflow 만들기Kubeflow 쿼터 설정 문서를 확인해주세요.

2. 학습 데이터 준비

2015년 Yelp에서 주최한 레스토랑 등급 예측 대회 식당 리뷰 데이터를 통해 리뷰 등급 예측 모델을 구현해볼 수 있습니다.

항목설명
목표텍스트를 통한 식당 리뷰 등급 예측 모델 구현
데이터 정보Yelp 플랫폼 사용자 식당 리뷰 텍스트, 리뷰 등급

Yelp 실습 예제 원본 데이터세트 정보

3. GPU 이미지 기반의 노트북 준비

이 튜토리얼은 GPU 노드풀 환경에서 노트북을 사용합니다.

Kubeflow 서비스나 적절한 환경이 준비되지 않았다면, Jupyter Notebook 생성하기 문서를 참고하여 GPU 이미지 기반의 노트북을 생성합니다.


작업 단계

Step 1. 노트북에서 파이프라인 생성하고 모델 서버 생성하기

안내
  • 실행(Run)의 Serve a model with KServe 단계에서 오류가 발생하는 경우, 노드 풀의 자원이 부족한 상황일 수 있습니다.
  • 이러한 경우 Worker 노드 풀의 노드 수를 증설하고 실행(Run)을 재실행 하시기 바랍니다.
  1. 실습을 위하여 아래 예제를 다운로드합니다.

  2. 다운로드 후 생성한 노트북 인스턴스에 접속하여 파일을 브라우저에 업로드 합니다.

    이미지. 주피터 노트북 콘솔에 파일 브라우저 업로드하기 주피터 노트북 콘솔에 파일 브라우저 업로드하기

  3. 업로드가 완료되면 우측 화면 영역에서 실습 내용을 확인하고, 두 번째 Cell(셀) 에 필요한 정보를 입력합니다.

    • KUBEFLOW 도메인 주소
    • KUBEFLOW 계정 이메일 입력
    • KUBEFLOW 계정 비밀번호 입력

    이미지. 모델 서버 예제 파일 업로드 완료 모델 서버 예제 파일 업로드 완료

  4. 실습 예제의 [모델 서빙 API 테스트] 이전 단계까지 실행하여 학습 모델, 서빙 컴포넌트, 모델 컴포넌트 및 파이프라인을 생성합니다.

    • 작업을 수행하면 다음과 같은 yelp_review_nlp_model_Pipeline run을 확인할 수 있습니다.

    이미지. 파이프라인 실행 확인하기 파이프라인 실행 확인하기

  5. 모델 생성이 완료되면 Models 탭에서 서빙 API를 사용할 수 있습니다.

    이미지. 모델 서버 확인하기 모델 서버 확인하기

Step 2. 모델 서빙 API 사용하기

Kubeflow 노트북 또는 내부 환경에서 테스트하기

Cluster IP를 활용하여 노트북이나 Kubeflow가 설치된 쿠버네티스의 내부 네트워크에서 서빙 API를 사용할 수 있습니다.

  • 노트북에서 [모델 서빙 API 테스트] 항목을 실행하여 서빙 API를 테스트합니다.

    이미지. 모델 서빙 API 테스트하기 모델 서빙 API 테스트하기

Kubeflow 외부에서 추론 API 테스트 하기

Kubeflow 외부에서 서빙 API를 사용하기 위해서는 Kubeflow 만들기 시 도메인 연결 항목에 도메인 주소를 입력해야 합니다. Kubeflow 만들기 시 도메인 주소를 입력했다면, 아래의 Python 스크립트로 테스트해볼 수 있습니다.

  1. 알맞은 host, kbm_namespace, username, password를 입력하고 스크립트를 실행합니다.

    예제 스크립트
    host = "${HOST}"
    kbm_namespace = "${NAMESPACE}"
    username = "${USER_EMAIL}"
    password = "${USER_PASSWORD}"
    input_text_data = "Hello World!" # 테스트 문자열

    model_name = "torch-model"
    model_serv_name = "torchserve"

    session = requests.Session()
    \_kargs = {
    "verify": False
    }
    response = session.get(
    "https://" + host, \*\*\_kargs
    )

    headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    }

    session.post(response.url, headers=headers, data={"login": username, "password": password})
    session_cookie = session.cookies.get_dict()["authservice_session"]
    print(session_cookie)

    url = f"http://{host}/v1/models/{model_name}:predict"
    host = f"{model_serv_name}.{kbm_namespace}.{host}"
    print(url)
    print(host)

    session={'authservice_session': session_cookie}
    data = {"instances": [{"data": input_text_data}]}

    headers = {
    "Host": host,
    }

    x = requests.post(
    url=url,
    cookies=session,
    headers=headers,
    json=data
    )

    print(f"입력값: {data}")
    print(f"결과값: {x.text}")

    환경변수설명
    HOST🖌'http://' 를 제외한 도메인 주소 ex:testkbm.dev.kakaoi.io
    NAMESPACE🖌kubeflow 네임스페이스 ex:kbm-admin
    USER_EMAIL🖌kubeflow 계정 이메일 ex:kbm@kakaoenterprise.com
    USER_PASSWORD🖌kubeflow 계정 비밀번호 ex:kbm@password
  2. 실행 결과는 다음과 같습니다.

    이미지. 외부에서 서빙 API 실행하기 외부에서 서빙 API 실행하기

Step 3. 모델 서버 삭제하기

안내

KServe 도구에 대한 자세한 설명은 Kubeflow > KServe 공식 문서를 확인해 주세요.

Models 탭에서 삭제하고자 하는 모델서버 행의 [Delete Server] 버튼을 클릭하면 더 이상 사용하지 않는 모델 서버를 삭제할 수 있습니다.

이미지. 모델 서버 삭제하기 모델 서버 삭제하기

Step 4. 실행(Run) 삭제하기

안내

완료 또는 미사용 실행은 리소스 관리를 위해 삭제를 권고드립니다

  1. Kubeflow 대시보드에 접속하여 Runs 탭을 클릭한 후, 목록에서 삭제할 실행을 선택하고 [Archive] 버튼을 클릭 합니다.

    이미지. 실행 보관하기 실행 삭제하기

  2. 보관한 실행은 Runs 탭 목록화면의 Archived 항목에서 확인할 수 있으며, 실행을 선택하고 [Delete] 버튼을 클릭하면 실행을 삭제할 수 있습니다.

    이미지. 실행 삭제하기 실행 삭제하기

  3. 실행 삭제 시, 파드까지 삭제된걸 확인할 수 있습니다.

    이미지. 실행 삭제 확인하기 실행 삭제 확인하기