서빙 명령어 활용 - boston housing 데이터 예제

boston housing 데이터로 집값 예측 예제 입니다.

학습

13개의 집값 관련 속성으로 이루어진 404 레코드를 다운로드, 전처리, 학습합니다.

데이터에 대한 설명은 여기 를 참조해주세요.

tensorflow 2.1.0 패키지가 필요합니다.

pip install tensorflow==2.1.0

import numpy as np # linear algebra

from keras.datasets import boston_housing
from tensorflow import keras
from tensorflow.keras import layers

# 다운로드
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()

# 전처리
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std

# 학습 모델
def build_model():
    model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(train_data.shape[1],)),
    layers.Dense(64, activation='relu'),
    layers.Dense(1)
    ])
    model.compile(optimizer='rmsprop',
              loss='mse',
              metrics=['mae'])
    return model

model = build_model()
# 학습
model.fit(train_data, train_targets, epochs=80, batch_size=16, verbose=0)
# 평가
test_mse_score, test_mae_score = model.evaluate(test_data, test_targets)

개인 객체저장소에 모델 업로드

IRIS Discovery Service에 적재하기 위해, tar 파일로 압축하여 개인 객체저장소에 업로드합니다.

boto3 패키지가 필요합니다.

pip install boto3

  • 아래 인자를 입력해주세요.
  • bucket : 개인 객체 저장소의 bucket
  • key : 개인 객체 저장소의 key
  • endpoint_url : 개인 객체 저장소의 url
  • aws_access_key_id : 개인 객체 저장소의 access_key
  • aws_secret_access_key : 개인 객체 저장소의 secret_access_key
import tempfile
import tarfile
import os
import boto3
import tensorflow as tf

# 개인 객체저장소 설정
bucket = 'iris'
key = 'boston_housing/model.tar'
setting = {
    'endpoint_url': "http://192.168.102.138:9003",
    'verify': False,
    'aws_access_key_id': 'minio',
    'aws_secret_access_key': 'minio123'
}

# 모델 생성
export_path = tempfile.mkdtemp()
tf.keras.models.save_model(
    model,
    export_path,
    overwrite=True,
    include_optimizer=True,
    save_format=None,
    signatures=None,
    options=None
)

# 모델 압축
tar_name = export_path + '/model.tar'
with tarfile.open(tar_name, "w:tar") as tar:
    tar.add(export_path, arcname='./')

# 모델 업로드
cli = boto3.client('s3', **setting)
cli.upload_file(tar_name, bucket, key)

적재

IRIS Discovery Service에 모델을 적재합니다.

적재는 IRIS Discovery Service의 mlmodel import 를 사용합니다.

IRIS Discovery Service의 검색창에 아래 명령어를 입력합니다. path 옵션에 개인 객체저장소 정보, tar로 압축한 모델 경로를 입력합니다.

mlmodel import name=house type=tf category=classification algorithm=deep format=saved_model path=OBJECTSTORAGE.{CONNECTOR NAME}:boston_housing/model.tar

결과

result
ok

배포

IRIS Discovery Service가 관리하는 tensorflow serving에 모델을 배포합니다.

배포는 IRIS Discovery Service의 mlmodel deploy 를 사용합니다.

IRIS Discovery Service의 검색창에 아래 명령어를 입력합니다.

mlmodel deploy house label='first house'

결과

  • house이 root_house 이름으로 배포되었습니다.
result latest_version serving_name
ok 1 root_house

서빙 상태 확인

배포한 multi_in_out모델의 서빙 상태를 확인합니다.

서빙 상태 확인은 IRIS Discovery Service의 serving status 를 사용합니다.

IRIS Discovery Service의 검색창에 아래 명령어를 입력합니다.

serving status house

결과

  • multi_in_out 모델로 생성한 version 1이 사용 가능한 상태로 배포되었습니다.
version state label
1 AVAILABLE first house

테스트 데이터 업로드

아래 스크립트를 실행하여, 로컬에 boston_housing_test.csv파일 생성 후, 개인 객체 저장소에 업로드합니다.

from keras.datasets import boston_housing
import numpy as np

# 다운로드
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()

# 전처리
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std

# 로컬에 저장
filename = 'boston_housing_test.csv'
save_data = []
for t in test_data:
    save_data.append(','.join([str(x) for x in t]))
new_test_data = np.array(save_data)
np.savetxt(filename, new_test_data, fmt="%s", delimiter=",", header="feature", comments='')

연결 정보 생성 가이드 를 참고하여, 개인 객체 저장소를 연결 정보에 추가합니다.

데이터 모델 생성 가이드 를 참고하여, boston_housing_test 이름으로 데이터 모델을 생성합니다.

예측

배포된 모델에 대해 4가지 유형의 예측 방법이 있습니다.

  • python 스크립트 방식
  • DSL 설정파일 방식
  • DSL 데이터 소스 입력 방식
  • curl 방식

이중 DSL 데이터 소스 입력 방식에 대해 진행합니다. python 스크립트 방식, DSL 설정파일 방식, curl 방식은 다음 유즈케이스를 참조해주세요. mnist 옷 모델 적재, 예측 을 참조해주세요.

DSL 데이터 소스 입력 방식

데이터 소스를 입력하여 예측합니다.

예측(서빙)은 IRIS Discovery Service의 serving predict 를 사용합니다.

IRIS Discovery Service에서 boston_housing_test 모델 선택 후, 검색창에 아래 명령어를 입력합니다.

* | serving predict house feature=[(feature,dense_input,float,13)]

결과

feature predictions
1.5536935453162368,-0.4836154708652843,1.02832… [8.03]
0.39242675047976094,-0.4836154708652843,-0.16… [17.92]
-0.2678050396682621,-0.4836154708652843,1.2458… [32.57]