모델 서명 지정하기

모델이 어디에서 실행되든 일관적인 경험을 보장하기 위해 Snowflake Model Registry는 모델 추론 메서드의 입력 및 출력 스키마, 즉 입력 또는 출력 DataFrame의 모든 열 이름과 유형을 알고 있어야 합니다. 이를 통해 필요한 경우 이러한 열을 Python과 SQL 데이터 타입 간에 매핑할 수 있습니다. 이 스키마는 함수의 인자와 그 유형에 비유하여 서명 이라고 합니다.

특정 ML 프레임워크의 경우 모델 레지스트리는 모델 자체의 데이터 구조 또는 샘플 입력 데이터에서 이러한 스키마를 추론할 수 있습니다. 그러나 모델은 NumPy 배열과 같이 이러한 정보가 없는 오브젝트를 수락하거나 반환하는 경우가 많습니다. 이 경우 Snowpark ML은 입력된 기능 이름을 input_feature_1, input_feature_2 등으로 유추합니다. 마찬가지로 출력 기능의 이름은 output_feature_1, output_feature_2 등으로 지정됩니다.

사용자 지정 모델에 더 의미 있는 이름을 사용하려면 다음 메서드 중 하나를 사용할 수 있습니다.

  • 일반적으로 데이터 세트를 pandas 또는 Snowpark DataFrame 으로 변환하여 열 이름으로 sample_input_data 를 업데이트합니다.

  • 명시적으로 log_model 에 서명을 전달합니다. 모델이 출력에서 이름을 생성하지 않는 경우 명시적 서명이 유일한 옵션일 수 있습니다.

서명 추론하기

모델 레지스트리 자체와 마찬가지로 서명을 자동으로 생성할 수 있습니다. snowflake.ml.model.model_signature.infer_signature 를 사용하여 제공된 샘플 입력, 출력 및 열 이름을 기반으로 서명을 추론한 후, 다음 예제에서와 같이 모델을 로깅할 때 해당 서명을 적절한 메서드에 적용합니다.

import pandas as pd
from sklearn import svm, datasets

from snowflake.ml.model import model_signature

digits = datasets.load_digits()
target_digit = 6

def one_vs_all(dataset, digit):
    return [x == digit for x in dataset]

train_features = digits.data[:10]
train_labels = one_vs_all(digits.target[:10], target_digit)
clf = svm.SVC(gamma=0.001, C=10.0, probability=True)
clf.fit(train_features, train_labels)

sig = model_signature.infer_signature(
    train_features,
    labels_df,
    input_feature_names=['column1', 'column2', ...],
    output_feature_names=['is_target_digit'])

# Supply signature for every functions the model exposes. In this case only `predict`.
mv = reg.log_model(clf, model_name='my_model', version_name='v1', signatures={"predict": sig})
Copy

이 예제에서는 하나의 모델에만 서명을 적용하지만, 모델이 노출하는 각 메서드에 대한 서명을 추론할 수 있습니다. 동일한 서명을 가진 모든 메서드에 동일한 서명 오브젝트(예제에서는 sig)를 사용할 수 있습니다.

서명 구성하기

또한 snowflake.ml.model.model_signature.ModelSignature 를 사용하여 수동으로 서명을 구성할 수도 있습니다. 스칼라 및 텐서 유형(비정형 텐서 포함)이 모두 지원됩니다.

예:

sig = ModelSignature(
    inputs=[
        FeatureSpec(dtype=DataType.DOUBLE, name=f_0),
        FeatureSpec(dtype=DataType.INT64,
                name=sparse_0_fixed_len, shape=(5, 5)),
                FeatureSpec(dtype=DataType.INT64, name=sparse_1_variable_len, shape=(-1,)),
    ],
    outputs=[
        FeatureSpec(dtype=DataType.FLOAT, name=output),
    ]
)
Copy

그런 다음 서명 오브젝트 sig 를 위와 같이 log_model 에 전달하여 해당 메서드를 적용합니다.

데이터 타입 매핑

이 섹션에서는 지원되는 유형 시스템에 대한 Snowflake Model Registry의 유형 등가성에 대해 설명합니다.

열 데이터 타입

다음 테이블은 모델 서명(SQL) 유형, pandas DataFrames(NumPy) 유형, Snowpark Python 유형의 등가성을 보여줍니다.

모델 서명(SQL) 유형

pandas DataFrame(NumPy) 유형

Snowpark Python 유형

INT8

np.int8

ByteType

INT16

np.int16

ShortType

INT32

np.int32

IntegerType

INT64

np.int64

LongType

FLOAT

np.float32

FloatType

DOUBLE

np.float64

DoubleType

UINT8

np.uint8

ByteType

UINT16

np.uint16

ShortType

UINT32

np.uint32

IntegerType

UINT64

np.uint64

LongType

BOOL

np.bool_

BooleanType

STRING

np.str_

StringType

BYTES

np.bytes_

BinaryType

TIMESTAMP_NTZ

np.datetime64

TimestampType

모양이 지정된 텐서 기능의 표현은 np.object_ 를 사용합니다.

누락된 값

샘플 입력 데이터 또는 추론 입력 데이터에는 NULL 값이 허용되지 않습니다.

NumPy에서 변환

NumPy 데이터 타입을 열 데이터 타입 에 표시된 NumPy 타입으로 안전하게 형변환할 수 있는 경우 해당 데이터 타입으로 추론됩니다.

PyTorch에서 변환

PyTorch 형식

모델 서명(SQL) 유형

torch.uint8

UINT8

torch.int8

INT8

torch.int16

INT16

torch.int32

INT32

torch.int64

INT64

torch.float32

FLOAT

torch.float64

DOUBLE

torch.bool

BOOL

Snowpark에서 변환

열 데이터 타입 에 표시된 매핑 외에도 다음과 같은 변환이 적용됩니다.

  • INT64로 매핑되는 소수 자릿수가 0인 DecimalType.

  • DOUBLE로 매핑되는 소수 자릿수가 0보다 큰 DecimalType.