앱에 학습된 모델 포함하기¶
이 항목에서는 Snowflake Native App 에서 이전에 학습된 모드를 포함하는 방법을 설명합니다.
워크플로 - 앱에 모델 추가하기¶
다음 절차에서는 공급자가 Snowflake ML 모델을 만들고 앱에 추가하는 일반적인 워크플로를 간략하게 설명합니다.
공급자는 Snowflake ML 모델을 개발하여 Snowflake Model Registry 에 로그합니다.
공급자는 모델 아티팩트를 Snowflake Model Registry에서 내보내고 스테이지에 업로드하여 애플리케이션 패키지에서 액세스할 수 있도록 합니다.
공급자는 앱의 설정 스크립트에서 모델을 생성합니다.
앱은 설치 중 또는 업그레이드 후 컨슈머 계정에 이러한 아티팩트로부터 모델을 생성합니다. 선택적으로, 앱에서 모델에 애플리케이션 역할에 대한 액세스 권한을 부여할 수 있습니다.
공급자가 앱에 액세스 권한을 부여하도록 앱을 구성하면 컨슈머는 머신 러닝 모델을 사용합니다.
참고
공급자가 컨슈머에게 모델에 대한 액세스 권한을 부여할 필요는 없습니다. 모델은 앱이 내부적으로 사용하지만 컨슈머가 액세스할 수 없는 오브젝트로 생성할 수 있습니다.
머신 러닝 모델 개발하기¶
공급자는 새로운 머신 러닝 모델을 개발하거나 기존 모델을 앱에 포함할 수 있습니다.
모델 개발에 대한 자세한 내용은 Snowflake ML 모델 개발 섹션을 참조하십시오.
Snowflake Model Registry에서 모델을 관리하는 방법에 대한 자세한 내용은 Snowflake Model Registry 섹션을 참조하십시오.
모델 아티팩트를 내보내고 스테이지에 업로드하기¶
앱에 모델을 포함하려면 공급자는 모델 아티팩트를 내보내고 애플리케이션 패키지에서 액세스할 수 있는 스테이지에 업로드해야 합니다.
모델 아티팩트를 수동으로 내보내고 스테이지에 업로드하기¶
모델 아티팩트를 다운로드합니다. Snowflake Model Registry 섹션을 참조하십시오.
다음 방법 중 하나를 사용하여 앱 리소스가 위치한 스테이지에 머신 러닝 아티팩트를 업로드합니다.
Snowsight를 사용하여 파일을 업로드하려면 Snowsight를 사용하여 파일 스테이징하기 섹션을 참조하십시오.
Snowflake CLI 를 사용하여 파일을 업로드하려면
snow app deploy
명령을 사용합니다. 애플리케이션 패키지와 애플리케이션 오브젝트를 함께 생성하는 방법 섹션을 참조하십시오.SQL 을 사용하여 파일을 업로드하려면 로컬 파일 시스템에서 데이터 파일 스테이징하기 섹션을 참조하십시오.
저장 프로시저를 사용하여 모델 아티팩트를 내보내고 스테이지에 업로드하기¶
공급자는 다음 저장 프로시저 예제를 템플릿으로 사용하여 모델 아티팩트를 다운로드하고 스테이지에 업로드하는 프로세스를 자동화할 수 있습니다.
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');
컨슈머 계정에서 모델 오브젝트 만들기¶
컨슈머 계정에 모델 오브젝트를 생성하기 위해 공급자는 다음 예시와 같이 설정 스크립트에 필요한 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;
선택적으로, 공급자는 모델에 대한 USAGE 권한을 애플리케이션 역할에 부여하여 컨슈머에게 모델에 대한 액세스 권한을 부여할 수 있습니다.
GRANT USAGE ON MODEL app_code.my_model TO APPLICATION ROLE app_user;
앱 내에서 모델에 액세스하기¶
앱의 일부로 내부적으로 모델을 사용하려면 공급자는 다음 예시와 같이 설정 스크립트에 SELECT 문을 추가합니다.
SELECT app_code.my_model!predict(...);
컨슈머로 모델 사용하기¶
공급자가 컨슈머에게 모델에 대한 액세스 권한을 부여하면 컨슈머는 다음 명령을 실행하여 모델에 액세스할 수 있습니다.
SELECT app_code.my_model!predict(...);
이 명령을 실행하려면 컨슈머는 다음 중 하나가 포함된 역할을 사용해야 합니다.
모델에 부여된 USAGE 권한.
애플리케이션 오브젝트에 대한 OWNERSHIP 권한.