앱에 학습된 모델 포함하기

이 항목에서는 Snowflake Native App 에서 이전에 학습된 모드를 포함하는 방법을 설명합니다.

워크플로 - 앱에 모델 추가하기

다음 절차에서는 공급자가 Snowflake ML 모델을 만들고 앱에 추가하는 일반적인 워크플로를 간략하게 설명합니다.

  1. 공급자는 Snowflake ML 모델을 개발하여 Snowflake Model Registry 에 로그합니다.

  2. 공급자는 모델 아티팩트를 Snowflake Model Registry에서 내보내고 스테이지에 업로드하여 애플리케이션 패키지에서 액세스할 수 있도록 합니다.

  3. 공급자는 앱의 설정 스크립트에서 모델을 생성합니다.

  4. 앱은 설치 중 또는 업그레이드 후 컨슈머 계정에 이러한 아티팩트로부터 모델을 생성합니다. 선택적으로, 앱에서 모델에 애플리케이션 역할에 대한 액세스 권한을 부여할 수 있습니다.

  5. 공급자가 앱에 액세스 권한을 부여하도록 앱을 구성하면 컨슈머는 머신 러닝 모델을 사용합니다.

참고

공급자가 컨슈머에게 모델에 대한 액세스 권한을 부여할 필요는 없습니다. 모델은 앱이 내부적으로 사용하지만 컨슈머가 액세스할 수 없는 오브젝트로 생성할 수 있습니다.

머신 러닝 모델 개발하기

공급자는 새로운 머신 러닝 모델을 개발하거나 기존 모델을 앱에 포함할 수 있습니다.

모델 아티팩트를 내보내고 스테이지에 업로드하기

앱에 모델을 포함하려면 공급자는 모델 아티팩트를 내보내고 애플리케이션 패키지에서 액세스할 수 있는 스테이지에 업로드해야 합니다.

모델 아티팩트를 수동으로 내보내고 스테이지에 업로드하기

  1. 모델 아티팩트를 다운로드합니다. Snowflake Model Registry 섹션을 참조하십시오.

  2. 다음 방법 중 하나를 사용하여 앱 리소스가 위치한 스테이지에 머신 러닝 아티팩트를 업로드합니다.

저장 프로시저를 사용하여 모델 아티팩트를 내보내고 스테이지에 업로드하기

공급자는 다음 저장 프로시저 예제를 템플릿으로 사용하여 모델 아티팩트를 다운로드하고 스테이지에 업로드하는 프로세스를 자동화할 수 있습니다.

CREATE OR REPLACE PROCEDURE copy_model_artifacts_to_stage(src_registry_schema_fqn string, src_model string, src_model_version string, dst string)
  RETURNS STRING
  LANGUAGE python
  runtime_version = 3.11
  handler = 'copy_model_artifacts_to_stage'
  packages = ('snowflake-snowpark-python')
  execute as caller
as
$$

def copy_model_artifacts_to_stage(session, src_registry_schema_fqn, src_model, src_model_version, dst):
  session.use_schema(src_registry_schema_fqn)
  list_files = session.sql(f"list 'snow://model/{src_model}/versions/{src_model_version}/'")
  list_files.collect()
  for row in list_files.toLocalIterator():
     parts = row["name"].rsplit('/', 1)
     directory = parts[0]
     filename = parts[1]
     session.file.get(f"snow://model/{src_model}/{directory}/{filename}", f"/tmp/{directory}")
     session.file.put(f"/tmp/{directory}/{filename}", f"{dst}/{src_model}/{directory}", auto_compress=False, overwrite=True, source_compression="NONE")

  return f"Copied [snow://model/{src_model}/versions/{src_model_version}/*] to [{dst}/{src_model}/{directory}/]"
$$;

CALL copy_model_artifacts_to_stage('my_db.my_model_registry, 'my_model', 'V1', '@my_app_pkg.source_schema.source_stage/models');
Copy

컨슈머 계정에서 모델 오브젝트 만들기

컨슈머 계정에 모델 오브젝트를 생성하기 위해 공급자는 다음 예시와 같이 설정 스크립트에 필요한 SQL 명령을 추가합니다.

CREATE APPLICATION ROLE IF NOT EXISTS app_user;

CREATE OR ALTER VERSIONED SCHEMA app_code;
GRANT USAGE ON SCHEMA app_code TO APPLICATION ROLE app_user;

CREATE OR REPLACE MODEL app_code.my_model FROM '/models/my_model/versions/V1;
Copy

선택적으로, 공급자는 모델에 대한 USAGE 권한을 애플리케이션 역할에 부여하여 컨슈머에게 모델에 대한 액세스 권한을 부여할 수 있습니다.

GRANT USAGE ON MODEL app_code.my_model TO APPLICATION ROLE app_user;
Copy

앱 내에서 모델에 액세스하기

앱의 일부로 내부적으로 모델을 사용하려면 공급자는 다음 예시와 같이 설정 스크립트에 SELECT 문을 추가합니다.

SELECT app_code.my_model!predict(...);
Copy

컨슈머로 모델 사용하기

공급자가 컨슈머에게 모델에 대한 액세스 권한을 부여하면 컨슈머는 다음 명령을 실행하여 모델에 액세스할 수 있습니다.

SELECT app_code.my_model!predict(...);
Copy

이 명령을 실행하려면 컨슈머는 다음 중 하나가 포함된 역할을 사용해야 합니다.

  • 모델에 부여된 USAGE 권한.

  • 애플리케이션 오브젝트에 대한 OWNERSHIP 권한.