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 외부에서 모델 메타데이터를 업데이트하면 레지스트리가 일관되지 않게 될 수 있습니다.

  • 모델을 사용하려면 명시적으로 배포해야 합니다.

  • 개별 모델은 역할 기반 액세스 제어를 가질 수 없습니다(단, 사용자 정의 함수인 모델 배포는 이러한 액세스 제어를 가질 수 있음).

  • 레지스트리 API를 이식하려면 전체 레지스트리 기능을 새 언어로 구현해야 합니다.

모델은 테이블 및 스테이지와 같은 네이티브 스키마 수준 오브젝트입니다. Python 레지스트리 API는 내부적으로 SQL을 사용하여 Python에서 모델 오브젝트와의 상호 작용을 용이하게 하는 클래스입니다.

  • 모델은 기존 스키마에 저장됩니다. 스키마는 레지스트리로 사용하기 위해 특별한 준비가 필요하지 않으며 사용자는 자신이 소유하지 않은 스키마에서 모델을 생성하는 데 하나의 권한만 필요합니다.

  • 모델 오브젝트 외부에는 메타데이터가 저장되지 않으므로 레지스트리가 일관성을 잃을 수 없습니다.

  • 모델에는 SQL 또는 Python에서 호출할 수 있는 메서드가 포함되어 있으며 명시적으로 배포할 필요가 없습니다.

  • 특정 모델에 대해 독립적으로 사용 권한을 부여할 수 있습니다.

  • Python 라이브러리는 SQL 위에 있는 얇은 계층이므로 레지스트리 API을 다른 언어로 간단히 이식할 수 있습니다.

다음 섹션에서는 두 API 사이의 차이점을 더 자세히 설명합니다.

레지스트리 API 가져오기 및 액세스하기

두 레지스트리 API가 모두 주 Snowpark ML 패키지 snowflake.ml 에 있습니다.

Preview API

from snowflake.ml.registry import model_registry
Copy

레지스트리 기능에 액세스하려면 model_registry.ModelRegistry 를 사용하십시오.

Public API

from snowflake.ml.registry import Registry
Copy

레지스트리 기능에 액세스하려면 Registry 클래스를 사용하십시오.

레지스트리 만들기

Preview API에서는 Python 라이브러리로 레지스트리를 생성해야 합니다.

Preview API

model_registry.create_model_registry(...)
Copy

레지스트리를 처음 사용하기 전에 필요합니다.

Public API

해당 없음. 기존 스키마를 레지스트리로 사용할 수 있습니다.

레지스트리 열기

레지스트리를 열어 새 모델을 레지스트리에 추가하고 그 안에 이미 포함된 모델로 작업합니다.

Preview API

reg = model_registry.ModelRegistry(
          session=session,
          database_name="MODEL_REGISTRY")
Copy

Public API

reg = Registry(
          session=session,
          database_name="ML",
          schema_name="REGISTRY")
Copy

모델 로깅하기

레지스트리에 모델을 추가하는 것을 로깅 이라고 합니다. 두 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")
Copy

Public API

모델 버전은 모델 자체와는 별개입니다. 모델에 대한 참조를 가져오는 방법은 다음과 같습니다.

m = reg.get_model("my_model")
Copy

특정 버전에 대한 참조를 가져오려면 먼저 위와 같이 모델에 대한 참조를 가져온 다음 원하는 버전을 검색하십시오. 모델 오브젝트에는 기본값으로 지정한 모델 버전이 포함된 속성인 default 가 있습니다. 이는 문자열이 아닌 실제 ModelVersion 오브젝트입니다.

mv = m.version('v1')
mv = m.default
Copy

모델 배포하기

Preview API

모델은 (사용자 정의 함수로) 웨어하우스에 명시적으로 배포하거나 (서비스로) Snowpark Container Services에 명시적으로 배포해야 합니다. 이 예에서는 웨어하우스에 배포하는 방법을 보여줍니다.

model.deploy(
    deployment_name="my_warehouse_predict",
    target_method="predict",
    permanent=True)
Copy

Public API

모델을 명시적으로 배포할 필요는 없습니다.

모델을 사용하여 추론하기

추론 은 모델을 사용하여 테스트 데이터를 기반으로 예측하는 것을 가리킵니다.

Preview API

추론을 실행하기 위해 모델을 배포할 때 사용한 배포 이름을 지정하십시오.

result_dataframe = model.predict(
    "my_warehouse_predict", test_dataframe)
Copy

Public API

모델은 웨어하우스에서 실행됩니다. Python 또는 SQL에서 모델의 메서드를 호출할 수 있습니다.

Python

모델 버전의 run 메서드를 사용하여 메서드를 호출합니다.

remote_prediction = mv.run(
    test_features, function_name="predict")
Copy

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;
Copy

설명 액세스 및 업데이트하기

Preview API

모델 참조는 설명을 위한 getter 및 setter 메서드를 제공합니다. (이 API에서 모델 참조는 항상 모델의 특정 버전을 참조합니다.)

print(model.get_model_description())

model.set_model_description("A better description")
Copy

Public API

모델과 모델 버전은 모두 동등한 commentdescription 속성을 통해 설명에 대한 액세스를 제공합니다.

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"
Copy

태그 액세스 및 업데이트하기

Preview API

태그는 모델 버전 수준에서 설정하고 액세스합니다(모델 참조는 항상 특정 버전을 참조함).

모든 태그 가져오기

print(model.get_tags())
Copy

태그 추가 또는 새 태그 값 설정

model.set_tag("minor_rev", "1")
Copy

태그 제거

model.remove_tag("minor_rev")
Copy

Public API

태그는 모델 수준(모델은 버전 모음으로 구성됨)에서 설정하며 SQL 태그를 사용하여 구현합니다. 태그를 생성하고 허용 가능한 값을 정의하는 방법을 알아보려면 오브젝트 태그 지정 섹션을 참조하십시오.

모든 태그 가져오기

print(m.show_tags())
Copy

태그 추가 또는 새 태그 값 설정

m.set_tag("minor_rev", "1")
Copy

태그 제거

m.unset_tag("minor_rev")
Copy

메트릭 액세스 및 업데이트하기

두 API에서 모두 메트릭이 모델 버전 수준에서 설정됩니다.

Preview API

스칼라 메트릭 설정

model.set_metric("test_accuracy", test_accuracy)
Copy

계층 구조(사전) 메트릭 설정

model.set_metric("dataset_test", {"accuracy": test_accuracy})
Copy

다면적(행렬) 메트릭 설정

model.set_metric("confusion_matrix", test_confusion_matrix)
Copy

모든 메트릭 가져오기

print(model.get_metrics())
Copy

메트릭 제거

model.remove_metric("test_accuracy")
Copy

Public API

스칼라 메트릭 설정

m.set_metric("test_accuracy", test_accuracy)
Copy

계층 구조(사전) 메트릭 설정

mo.set_metric("dataset_test", {"accuracy": test_accuracy})
Copy

다면적(행렬) 메트릭 설정

m.set_metric("confusion_matrix", test_confusion_matrix)
Copy

모든 메트릭 가져오기

print(m.get_metrics())
Copy

메트릭 제거

m.remove_metric("test_accuracy")
Copy

모델 삭제하기

Preview API

모델의 특정 버전만 삭제할 수 있습니다. 모델을 완전히 삭제하려면 해당 버전을 모두 삭제하십시오.

registry.delete_model(
    model_name="my_model",
    model_version="100")
Copy

Public API

모델을 삭제하면 모든 버전이 삭제됩니다. 현재는 한 버전만 삭제할 수는 없습니다.

reg.delete_model("mymodel")
Copy

모델 버전 나열하기

Preview API

list_models 메서드는 모든 모델 버전의 DataFrame을 반환합니다. 이를 필터링하여 특정 모델의 버전만 표시할 수 있습니다.

model_list = registry.list_models()
model_list.filter(model_list["NAME"] == "mymodel").show()
Copy

Public API

모델 참조가 주어지면 모델 버전을 ModelVersion 인스턴스 목록 또는 모델 버전에 대한 정보가 포함된 DataFrame으로 가져올 수 있습니다.

ModelVersions 인스턴스 목록 가져오기

version_list = m.versions()
Copy

정보용 DataFrame 가져오기

version_df = m.show_versions()
Copy

모델 수명 주기 관리하기

태그를 사용하여 모델의 수명 주기를 관리하려고 합니다. 예를 들어, “experimental”, “alpha”, “beta”, “production”, “deprecated”, “obsolete” 등의 값을 사용하여 모델의 현재 상태를 기록하기 위해 stage 라는 태그를 생성할 수 있습니다.

Public API에서 태그는 SQL 태그 오브젝트를 사용하여 구현됩니다. 태그를 생성하고 허용 가능한 값을 정의하는 방법을 알아보려면 오브젝트 태그 지정 섹션을 참조하십시오.

Public API에도 모델의 기본 버전 이라는 개념이 있는데, 이는 특히 SQL에서 버전이 지정되지 않은 경우 사용되는 모델입니다. 새 버전의 모델을 학습하고 새 모델을 널리 사용할 준비가 되면 기본 버전을 업데이트할 수 있습니다. 모델의 default 속성을 사용하여 기본 버전을 설정할 수 있습니다.

m.default = "2"
Copy

그러면 다음과 같이 모델의 기본 버전을 ModelVersion 오브젝트로 가져올 수 있습니다.

mv = m.default
Copy

또는 즉시 predict 메서드를 호출할 수 있습니다.

m.default.run(test_features, function_name="predict"))
Copy