serving

개요

Tensorflow Serving을 통해 예측, 모델의 서빙 상태를 확인하는 명령어

설명

배포된 모델에 대해 예측하거나 서빙 상태를 확인할 수 있습니다. 배포는 적재 , 배포 를 참조해주세요.

serving predict

배포된 모델에 대해 예측합니다. 예측 컬럼, 예측 확률을 출력합니다. tag 옵션이 있으면 예측되는 tag 값도 추가적으로 출력합니다.

DSL 방식과 설정파일 제출 방식을 지원합니다.

관련 USECASE

Parameters

DSL 방식 1

  • feature옵션에 예측에 필요한 정보를 모두 입력합니다.

serving predict model_name feature=[(feature, Conv1_input, double, 28, 28, 1)] version=11 tag=(zero, one, two, three, four, five, six, seven, egiht, nine, ten)

이름

설명

기본값

예시값

타입

필수

model_name

예측할 모델명

mnist_v1

문자열

O

feature

특징 컬럼명, 입력 텐서 이름, 입력 텐서 자료형, 입력 텐서 모양의 리스트

[(body, body, float, 10), (tags, tags, double, 12), (feature, Conv1_input, int, 28, 28, 1)]

list of tuple

O

version

모델의 서빙 버전

최근 버전

3

숫자형

tag

태그값

(‘T-shirt/top’, ‘Trouser’, ‘Pullover’, ‘Dress’, ‘Coat’, ‘Sandal’, ‘Shirt’, ‘Sneaker’, ‘Bag’, ‘Ankle boot’)

튜플형

DSL 방식 2

  • feature 옵션을 col, dtype, shape, layer_name으로 나누어 입력합니다.

serving predict model_name col=(feature) shape=[(28,28,1)] dtype=(float) layer_name=(Conv1_input) version=11 tag=(zero, one, two, three, four, five, six, seven, egiht, nine, ten)

이름

설명

기본값

예시값

타입

필수

model_name

예측할 모델명

mnist_v1

문자열

O

col

특징 컬럼명

(body, tags, title)

튜플형

O

shape

입력 텐서 모양의 리스트

[(-1), (10), (-1)]

list of tuple

O

dtype

입력 텐서 자료형

(float, float, …) col에 정의된 특징 컬럼의 개수

(float, double, int)

튜플형

layer_name

입력 텐서 이름

col과 같은 값으로 간주합니다.

(body, tags, title)

튜플형

version

모델의 서빙 버전

최근 버전

3

숫자형

tag

태그값

(‘T-shirt/top’, ‘Trouser’, ‘Pullover’, ‘Dress’, ‘Coat’, ‘Sandal’, ‘Shirt’, ‘Sneaker’, ‘Bag’, ‘Ankle boot’)

튜플형

설정파일 제출 방식

  • 설정파일을 객체저장소에 업로드하고, 업로드 경로를 입력하여 예측합니다.

  • 설정 파일 포맷

  • 설정 파일 예시

{
"signature_name": "serving_default",
"instances": [[[[0.0], [0.0], [0.0],..., [0.011764705882352941], [0.0], [0.0], [0.45098039215686275], [0.4470588235294118], [0.41568627450980394], [0.5372549019607843],..., [0.0], [0.0]]]]
}

serving predict model_name conf=OBJECTSTORAGE.{CONNECTOR_NAME}:{KEY} version=1 tag=(T-shirt/top, Trouser, Pullover, Dress, Coat, Sandal, Shirt, Sneaker, Bag, Ankle boot)

이름

설명

기본값

예시값

타입

필수

model_name

예측할 모델명

mnist_v1

문자열

O

conf

설정 파일

OBJECTSTORAGE.MINAI:USERS/root/clothes/predict/1.json

문자열

O

version

모델의 서빙 버전

최근 버전

3

숫자형

tag

태그값

(‘T-shirt/top’, ‘Trouser’, ‘Pullover’, ‘Dress’, ‘Coat’, ‘Sandal’, ‘Shirt’, ‘Sneaker’, ‘Bag’, ‘Ankle boot’)

튜플형

CONNECTOR_NAME : Conncetor Name입니다. IRIS UI에서 연결정보 생성 후, 연결정보의 이름 컬럼에서 확인할 수 있는 값입니다.

KEY : OBJECTSTORAGE의 key입니다. bucket은 생략해야 합니다.

Examples

angora mnist test 데이터의 30개 레코드를 소스로하여 예측합니다. 숫자를 분류하는 모델이 사용되었습니다. layer_name은 학습시 input 텐서의 이름을 뜻합니다.

  • layer_name을 잘못 입력하면 아래와 같이 에러 문구가 나옵니다. 에러 문구의 signiture를 참조하여 layer_name을 입력하면 됩니다. 아래 예시에서는 input 텐서의 이름을 feature로 잘못 주었고, input 텐서 이름을 Conv1_input로 주어야 합니다.

raise AngoraException(servingCommand.EXCEPTION_05.format(res.status_code, res.text, signature))
angora.exceptions.AngoraException: Incorrect response[404]. Please check the signature.
"error": "Failed to process element: 0 key: feature of \'instances\' list. Error: Invalid argument: JSON object: does not have named input: feature" }
signature=b\"The given SavedModel SignatureDef contains the following input(s):\\n
inputs['Conv1_input'] tensor_info:\\n
dtype: DT_FLOAT\\n
shape: (-1, 28, 28, 1)\\n
name: serving_default_Conv1_input:0\\n
The given SavedModel SignatureDef contains the following output(s):\\n
outputs['Softmax'] tensor_info:\\n
dtype: DT_FLOAT\\n
shape: (-1, 10)\\n
name: StatefulPartitionedCall:0\\nMethod name is: tensorflow/serving/predict\\n\"\n

model name = 'angora mnist test' | top 30 feature | serving predict mnist_v1 col=feature shape=[(28,28,1)] layer_name=Conv1_input version=12 tag=(zero, one, two, three, four, five, six, seven, egiht, nine, ten)

출력 결과

  • predictions은 output 텐서의 각 확률 값을 출력합니다.

  • probability컬럼은 predictions 중 가장 높은 값을 출력합니다.

  • interpreted는 tag 옵션이 있는 경우 predictions에서 가장 큰값의 index를 tag에서 선택하여 출력합니다.

label

tag

feature

predictions

probability

interpreted

0,0,0,0,0,1,0,0,0,0

five

0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0…

[0.62, 0.01, 0.04…]

0.62

five

1,0,0,0,0,0,0,0,0,0

zero

0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0…

[0.14, 0.03, 0.03…]

0.38

zero

multi_in_out test 데이터를 소스로 예측합니다. 다중 컬럼을 입력으로하고 다중 컬럼을 출력합니다. 특징 컬럼과 input 텐서이름이 같다면 layer_name을 생략합니다. version을 최신 버전을 사용할거라면 생략합니다.

model name = 'multi_in_out test' | serving predict multi_in_out col=(title, body, tags) shape=[(10), (10), (12)]

출력 결과

  • 다중 출력의 경우 각 출력의 텐서 이름을 컬럼명으로 하여 값을 출력합니다.

title

body

tags

department

priority

[0.43, 0.77, 0.3, 0.19, 0.38, 0.37, 0.56, 0.48, 0.8, 0.4]

[0.9, 0.5, 0.16, 0.74, 0.9, 0.64, 0.37, 0.18, 0.08, 0.87]

[0.44, 0.45, 0.56, 0.63, 0.72, 0.28, 0.57, 0.19, 0.66, 0.47, 0.89, 0.37]

[-0.17423968, -0.243361622, -0.155712008, -0.312662631]

[-0.115426637]

설정파일을 제출하여 예측합니다. 옷을 분류하는 모델이 사용되었습니다.

serving predict clothes conf=OBJECTSTORAGE.MIN_AI:USERS/namjals/clothes/predict/1.json version=1 tag=(T-shirt/top, Trouser, Pullover, Dress, Coat, Sandal, Shirt, Sneaker, Bag, Ankle boot)

출력 결과

predictions

probability

interpreted

[0.14, 0.03, 0.03…]

0.38

Ankle boot

Parameters BNF

serving_command : PREDICT WORD options
options : option
        | options option
        |
option : WORD EQ WORD
        | WORD EQ WORD_WITH_BRACKET
        | WORD EQ WORD_WITH_SQUARE_BRACKET

WORD = [^ |^\|^\'|\"|^\=]+
WORD_WITH_BRACKET =  \([^\|^\'|\"|^\=]+\)
WORD_WITH_SQUARE_BRACKET = \[[^\|^\'|\"|^\=]+\]
EQ = \=
PREDICT = (?i)predict

serving status

서빙 중인 모델의 서빙 상태를 확인합니다.

Parameters

serving status model_name

이름

설명

기본값

예시값

타입

필수

model_name

서빙 상태를 확인할 모델명

mnist_v1

문자열

O

Examples

mnist_v1모델의 서빙 상태를 확인합니다.

serving status mnist_v1

version

state

label

12

AVAILABLE

stable

11

AVAILABLE

unstable

Parameters BNF

serving_command : STATUS WORD

WORD = [^ |^\|^\'|\"|^\=]+
STATUS = (?i)status