{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# [모듈 3-2] Endpoint 테스트" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 0. 라이브러리 및 변수 설정" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import boto3\n", "import sagemaker\n", "import pandas as pd\n", "\n", "region = boto3.Session().region_name\n", "sagemaker_session = sagemaker.session.Session()\n", "role = sagemaker.get_execution_role()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. 테스트 데이터셋 로딩" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "test_path= os.path.join('../data/dataset', 'test.csv')\n", "test_df = pd.read_csv(test_path)\n", "test_df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. 추론을 위한 Payload 생성\n", "* Endpoint에 입력 될 수 있도록 CSV String 형태로 변환(Payload)\n", "* 테스트 데이터에서 시범적으로 20개의 샘플만 변환" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def get_payload_list(test_df, label_col):\n", " '''\n", " CSV String 행태로 변경\n", " '''\n", " s = test_df.drop(columns=[label_col])\n", " s = s.to_csv(header=None, index=None)\n", " payload_list = s.splitlines()\n", " return payload_list\n", "payload_list = get_payload_list(test_df[:5], label_col='fraud') # 샘플로 5개의 입력을 변환\n", "y_test = test_df['fraud'].tolist()\n", "\n", "print(\"payload_list: \\n\", payload_list)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. 실시간 추론을 위한 Endpoint를 호출하여 추론 수행\n", "* 엔드포인트가 InService 상태인 경우, 입력 데이터에 대한 추론 결과와 확률값을 제공함\n", "* autogluon_serve.py에서 json 형태로 결과를 반환하기에, JSONDesirializer 사용" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from sagemaker.deserializers import JSONDeserializer\n", "\n", "json_deserializer = JSONDeserializer(accept='application/json')\n", "\n", "endpoint_name = \"ramp-test-staging\"\n", "\n", "predictor = sagemaker.predictor.Predictor(\n", " endpoint_name=endpoint_name,\n", " sagemaker_session= sagemaker_session,\n", " deserializer = json_deserializer, # byte stream을 csv 형태로 변환하여 제공 \n", ")\n", "\n", "for payload in payload_list:\n", " result = predictor.predict(payload, initial_args = {\"ContentType\": \"text/csv\"})\n", " print(result)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import boto3\n", "\n", "region = boto3.Session().region_name\n", "sagemaker_runtime = boto3.client(\"sagemaker-runtime\", region_name=region)\n", "\n", "for payload in payload_list:\n", " result = sagemaker_runtime.invoke_endpoint(\n", " EndpointName=endpoint_name, \n", " Body=payload,\n", " ContentType=\"text/csv\"\n", " )\n", " print(result)" ] } ], "metadata": { "instance_type": "ml.t3.medium", "kernelspec": { "display_name": "Python 3 (Data Science)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:ap-northeast-2:806072073708:image/datascience-1.0" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 4 }