Kubeflow 모델 서빙 API 만들기
카카오클라우드 Kubeflow 환경에서 예제 데이터세트를 활용하여 머신러닝 파이프라인을 구축하고, 이를 통해 생성된 모델을 웹 API 형태로 제공하는 방법을 안내합니다.
- 예상 소요 시간: 20분
- 사용자 환경
- 권장 운영 체제: MacOS, Ubuntu
- Region: kr-central-2
- 사전 준비 사항
- 참고 문서
- 참고 사항
- Private 네트워크 환경에서는 학습 파일 다운로드가 원활하지 않을 수 있습니다.
시나리오 소개
이 시나리오에서는 카카오클라우드 Kubeflow 환경에서 KServe를 활용해 학습된 모델을 실시간 예측이 가능한 API로 제공하고 관리하는 과정을 단계별로 안내합니다. 이를 통해 복잡한 인프라 관리 없이도 효율적으로 모델을 서빙하고 확장성 있게 운영하는 방법을 익힐 수 있습니다.
사용자는 KServe를 활용한 모델 서빙 API 구축 과정을 직접 구현하며, 전체 프로세스를 이해하고 실시간 예측 시스템을 효과적으로 관리하는 방법을 학습할 수 있습니다.
주요 내용은 다음과 같습니다.
- Kubeflow에서 KServe 모델 서버 인스턴스 생성 및 설정
- 학습된 모델을 사용하여 실시간 예측 API 구축
- KServe를 활용하여 모델 서빙 프로세스를 관리하고 최적화하는 방법 학습
지원 도구
도구 | 버전 | 설명 |
---|---|---|
KServe | 0.11.2 | - 모델 서빙 도구로 빠른 모델 배포 및 업데이트 지원, 높은 가용성과 확장성을 제공 - 머신러닝 모델 서빙을 위한 일반적인 문제(로드 밸런싱, 모델 버전 관리, 실패 복구 등) 자동 처리 |
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)을 재실행 하시기 바랍니다.
-
실습을 위하여 아래 예제를 다운로드합니다.
-
다운로드 후 생성한 노트북 인스턴스에 접속하여 파일을 브라우저에 업로드합니다.
주피터 노트북 콘솔에 파일 브라우저 업로드하기
-
업로드가 완료되면 우측 화면 영역에서 실습 내용을 확인하고, 두 번째 Cell(셀) 에 필요한 정보를 입력합니다.
- KUBEFLOW 도메인 주소
- KUBEFLOW 계정 이메일 입력
- KUBEFLOW 계정 비밀번호 입력
모델 서버 예제 파일 업로드 완료
-
실습 예제의 [모델 서빙 API 테스트] 이전 단계까지 실행하여 학습 모델, 서빙 컴포넌트, 모델 컴포넌트 및 파이프라인을 생성합니다.
- 작업을 수행하면 다음과 같은 yelp_review_nlp_model_Pipeline run을 확인할 수 있습니다.
파이프라인 실행 확인하기
-
모델 생성이 완료되면 Models 탭에서 서빙 API를 사용할 수 있습니다.
(Kubeflow v1.8 버전에서는 Endpoints로 메뉴명이 변경되었습니다.)모델 서버 확인하기
Step 2. 모델 서빙 API 사용하기
Kubeflow 노트북 또는 내부 환경에서 테스트하기
Cluster IP를 활용하여 노트북이나 Kubeflow가 설치된 쿠버네티스의 내부 네트워크에서 서빙 API를 사용할 수 있습니다.
-
노트북에서 [모델 서빙 API 테스트] 항목을 실행하여 서빙 API를 테스트합니다.
모델 서빙 API 테스트하기
Kubeflow 외부에서 추론 API 테스트 하기
Kubeflow 외부에서 서빙 API를 사용하기 위해서는 Kubeflow 만들기 시 도메인 연결 항목에 도메인 주소를 입력해야 합니다. Kubeflow 만들기 시 도메인 주소를 입력했다면, 아래의 Python 스크립트로 테스트해볼 수 있습니다.
-
알맞은 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 -
실행 결과는 다음과 같습니다.
외부에서 서빙 API 실행하기
Step 3. 모델 서버 삭제하기
KServe 도구에 대한 자세한 설명은 Kubeflow > KServe 공식 문서를 확인해 주세요.
Models 탭에서 삭제하고자 하는 모델서버 행의 [Delete Server] 버튼을 클릭하면 더 이상 사용하지 않는 모델 서버를 삭제할 수 있습니다.
(Kubeflow v1.8 버전에서는 Endpoints로 메뉴명이 변경되었습니다.)
모델 서버 삭제하기
Step 4. 실행(Run) 삭제하기
완료 또는 미사용 실행은 리소스 관리를 위해 삭제를 권고드립니다
-
Kubeflow 대시보드에 접속하여 Runs 탭을 클릭한 후, 목록에서 삭제할 실행을 선택하고 [Archive] 버튼을 클릭합니다.
실행 삭제하기
-
보관한 실행은 Runs 탭 목록화면의 Archived 항목에서 확인할 수 있으며, 실행을 선택하고 [Delete] 버튼을 클릭하면 실행을 삭제할 수 있습니다.
실행 삭제하기
-
실행 삭제 시, 파드까지 삭제된걸 확인할 수 있습니다.
실행 삭제 확인하기