Snowpark ML Ops: Model Registry Preview API에서 마이그레이션하기¶
Snowflake는 이전에 특정 고객에게 모델 레지스트리 미리 보기를 비공개로 제공했습니다. 이 항목에서 설명하는 레지스트리 기능은 미리 보기 버전에 비해 기능과 API가 대폭 변경되었습니다. 가장 주목할 만한 점은 이제 핵심 레지스트리 기능이 새로운 스키마 수준 모델 오브젝트를 사용하여 Snowflake 내에서 기본적으로 호스팅된다는 것입니다.
참고
공개 미리 보기 버전은 아직 Snowpark Container Services (SPCS)에 모델 배포를 지원하지 않습니다. 이 기능을 사용하는 경우 지금은 비공개 미리 보기 레지스트리를 계속 사용하십시오.
이 테이블에는 두 레지스트리 구현 간의 주요 차이점이 요약되어 있습니다. 비공개로 제공되는 미리 보기 버전의 API의 명칭은 “Preview API”인 반면, 현재 공개적으로 출시된 API는 “Public API”라고 합니다.
Preview API |
Public API |
---|---|
메타데이터는 테이블에 저장됩니다. 모델은 스테이지에 저장됩니다. 레지스트리 API는 레지스트리에 저장된 모델에 대해 이러한 오브젝트를 생성하고 유지 관리하는 Python 라이브러리입니다.
|
모델은 테이블 및 스테이지와 같은 네이티브 스키마 수준 오브젝트입니다. Python 레지스트리 API는 내부적으로 SQL을 사용하여 Python에서 모델 오브젝트와의 상호 작용을 용이하게 하는 클래스입니다.
|
다음 섹션에서는 두 API 사이의 차이점을 더 자세히 설명합니다.
레지스트리 API 가져오기 및 액세스하기¶
두 레지스트리 API가 모두 주 Snowpark ML 패키지 snowflake.ml
에 있습니다.
Preview API |
from snowflake.ml.registry import model_registry
레지스트리 기능에 액세스하려면 |
---|---|
Public API |
from snowflake.ml.registry import Registry
레지스트리 기능에 액세스하려면 |
레지스트리 만들기¶
Preview API에서는 Python 라이브러리로 레지스트리를 생성해야 합니다.
Preview API |
model_registry.create_model_registry(...)
레지스트리를 처음 사용하기 전에 필요합니다. |
---|---|
Public API |
해당 없음. 기존 스키마를 레지스트리로 사용할 수 있습니다. |
레지스트리 열기¶
레지스트리를 열어 새 모델을 레지스트리에 추가하고 그 안에 이미 포함된 모델로 작업합니다.
Preview API |
reg = model_registry.ModelRegistry(
session=session,
database_name="MODEL_REGISTRY")
|
---|---|
Public API |
reg = Registry(
session=session,
database_name="ML",
schema_name="REGISTRY")
|
모델 로깅하기¶
레지스트리에 모델을 추가하는 것을 로깅 이라고 합니다. 두 API 모두 이 목적으로 log_model
이라는 레지스트리 메서드를 사용합니다. 이 메서드는 Public API에서 두 가지 사소한 차이점이 있습니다.
이전에
model_version
이라는 모델 버전을 지정하는 매개 변수는 이제 그 의미 체계를 더 잘 반영하기 위해version_name
이라고 합니다.모델을 로깅할 때는 태그를 설정할 수 없습니다. 대신 모델의
set_tag
메서드를 사용하여 로깅한 후 태그를 추가하십시오.
모델에 대한 참조 가져오기¶
모델에 대한 참조를 가져오면 해당 메타데이터를 업데이트하고 그에 대해 다른 작업도 수행할 수 있습니다.
Preview API |
레지스트리에서 모델을 가져오면 항상 특정 버전의 모델이 반환되므로 모델을 검색할 때 원하는 버전을 지정해야 합니다. model = model_registry.ModelReference(
registry=registry,
model_name="my_model",
model_version="101")
|
---|---|
Public API |
모델 버전은 모델 자체와는 별개입니다. 모델에 대한 참조를 가져오는 방법은 다음과 같습니다. m = reg.get_model("my_model")
특정 버전에 대한 참조를 가져오려면 먼저 위와 같이 모델에 대한 참조를 가져온 다음 원하는 버전을 검색하십시오. 모델 오브젝트에는 기본값으로 지정한 모델 버전이 포함된 속성인 mv = m.version('v1')
mv = m.default
|
모델 배포하기¶
Preview API |
모델은 (사용자 정의 함수로) 웨어하우스에 명시적으로 배포하거나 (서비스로) Snowpark Container Services에 명시적으로 배포해야 합니다. 이 예에서는 웨어하우스에 배포하는 방법을 보여줍니다. model.deploy(
deployment_name="my_warehouse_predict",
target_method="predict",
permanent=True)
|
---|---|
Public API |
모델을 명시적으로 배포할 필요는 없습니다. |
모델을 사용하여 추론하기¶
추론 은 모델을 사용하여 테스트 데이터를 기반으로 예측하는 것을 가리킵니다.
Preview API |
추론을 실행하기 위해 모델을 배포할 때 사용한 배포 이름을 지정하십시오. result_dataframe = model.predict(
"my_warehouse_predict", test_dataframe)
|
---|---|
Public API |
모델은 웨어하우스에서 실행됩니다. Python 또는 SQL에서 모델의 메서드를 호출할 수 있습니다. Python 모델 버전의 remote_prediction = mv.run(
test_features, function_name="predict")
SQL 간단한 SELECT 쿼리를 사용하여 기본 버전의 메서드를 호출하거나 WITH 절을 사용하여 버전을 지정할 수 있습니다. -- Use default version
SELECT my_model!predict() FROM test_table;
-- Use a specific version
WITH my_model_v1 AS MODEL my_model VERSION "1"
SELECT my_model_v1!predict() FROM test_table;
|
설명 액세스 및 업데이트하기¶
Preview API |
모델 참조는 설명을 위한 getter 및 setter 메서드를 제공합니다. (이 API에서 모델 참조는 항상 모델의 특정 버전을 참조합니다.) print(model.get_model_description())
model.set_model_description("A better description")
|
---|---|
Public API |
모델과 모델 버전은 모두 동등한 print(m.comment)
m.comment = "A better description"
print(m.description)
m.description = "A better description"
print(mv.comment)
mv.comment = "A better description"
print(mv.description)
mv.description = "A better description"
|
메트릭 액세스 및 업데이트하기¶
두 API에서 모두 메트릭이 모델 버전 수준에서 설정됩니다.
Preview API |
스칼라 메트릭 설정 model.set_metric("test_accuracy", test_accuracy)
계층 구조(사전) 메트릭 설정 model.set_metric("dataset_test", {"accuracy": test_accuracy})
다면적(행렬) 메트릭 설정 model.set_metric("confusion_matrix", test_confusion_matrix)
모든 메트릭 가져오기 print(model.get_metrics())
메트릭 제거 model.remove_metric("test_accuracy")
|
---|---|
Public API |
스칼라 메트릭 설정 m.set_metric("test_accuracy", test_accuracy)
계층 구조(사전) 메트릭 설정 mo.set_metric("dataset_test", {"accuracy": test_accuracy})
다면적(행렬) 메트릭 설정 m.set_metric("confusion_matrix", test_confusion_matrix)
모든 메트릭 가져오기 print(m.get_metrics())
메트릭 제거 m.remove_metric("test_accuracy")
|
모델 삭제하기¶
Preview API |
모델의 특정 버전만 삭제할 수 있습니다. 모델을 완전히 삭제하려면 해당 버전을 모두 삭제하십시오. registry.delete_model(
model_name="my_model",
model_version="100")
|
---|---|
Public API |
모델을 삭제하면 모든 버전이 삭제됩니다. 현재는 한 버전만 삭제할 수는 없습니다. reg.delete_model("mymodel")
|
모델 버전 나열하기¶
Preview API |
model_list = registry.list_models()
model_list.filter(model_list["NAME"] == "mymodel").show()
|
---|---|
Public API |
모델 참조가 주어지면 모델 버전을 ModelVersions 인스턴스 목록 가져오기 version_list = m.versions()
정보용 DataFrame 가져오기 version_df = m.show_versions()
|
모델 수명 주기 관리하기¶
태그를 사용하여 모델의 수명 주기를 관리하려고 합니다. 예를 들어, “experimental”, “alpha”, “beta”, “production”, “deprecated”, “obsolete” 등의 값을 사용하여 모델의 현재 상태를 기록하기 위해 stage
라는 태그를 생성할 수 있습니다.
Public API에서 태그는 SQL 태그 오브젝트를 사용하여 구현됩니다. 태그를 생성하고 허용 가능한 값을 정의하는 방법을 알아보려면 오브젝트 태그 지정 섹션을 참조하십시오.
Public API에도 모델의 기본 버전 이라는 개념이 있는데, 이는 특히 SQL에서 버전이 지정되지 않은 경우 사용되는 모델입니다. 새 버전의 모델을 학습하고 새 모델을 널리 사용할 준비가 되면 기본 버전을 업데이트할 수 있습니다. 모델의 default
속성을 사용하여 기본 버전을 설정할 수 있습니다.
m.default = "2"
그러면 다음과 같이 모델의 기본 버전을 ModelVersion
오브젝트로 가져올 수 있습니다.
mv = m.default
또는 즉시 predict
메서드를 호출할 수 있습니다.
m.default.run(test_features, function_name="predict"))