모델 서명 지정하기¶
모델이 어디에서 실행되든 일관적인 경험을 보장하기 위해 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})
이 예제에서는 하나의 모델에만 서명을 적용하지만, 모델이 노출하는 각 메서드에 대한 서명을 추론할 수 있습니다. 동일한 서명을 가진 모든 메서드에 동일한 서명 오브젝트(예제에서는 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),
]
)
그런 다음 서명 오브젝트 sig
를 위와 같이 log_model
에 전달하여 해당 메서드를 적용합니다.
데이터 타입 매핑¶
이 섹션에서는 지원되는 유형 시스템에 대한 Snowflake Model Registry의 유형 등가성에 대해 설명합니다.
열 데이터 타입¶
다음 테이블은 모델 서명(SQL) 유형, pandas DataFrames(NumPy) 유형, Snowpark Python 유형의 등가성을 보여줍니다.
모델 서명(SQL) 유형 |
pandas DataFrame(NumPy) 유형 |
Snowpark Python 유형 |
---|---|---|
INT8 |
|
|
INT16 |
|
|
INT32 |
|
|
INT64 |
|
|
FLOAT |
|
|
DOUBLE |
|
|
UINT8 |
|
|
UINT16 |
|
|
UINT32 |
|
|
UINT64 |
|
|
BOOL |
|
|
STRING |
|
|
BYTES |
|
|
TIMESTAMP_NTZ |
|
|
모양이 지정된 텐서 기능의 표현은 np.object_
를 사용합니다.
누락된 값¶
샘플 입력 데이터 또는 추론 입력 데이터에는 NULL 값이 허용되지 않습니다.
NumPy에서 변환¶
NumPy 데이터 타입을 열 데이터 타입 에 표시된 NumPy 타입으로 안전하게 형변환할 수 있는 경우 해당 데이터 타입으로 추론됩니다.
PyTorch에서 변환¶
PyTorch 형식 |
모델 서명(SQL) 유형 |
---|---|
|
UINT8 |
|
INT8 |
|
INT16 |
|
INT32 |
|
INT64 |
|
FLOAT |
|
DOUBLE |
|
BOOL |
Snowpark에서 변환¶
열 데이터 타입 에 표시된 매핑 외에도 다음과 같은 변환이 적용됩니다.
INT64로 매핑되는 소수 자릿수가 0인
DecimalType
.DOUBLE로 매핑되는 소수 자릿수가 0보다 큰
DecimalType
.