Snowflake Model Registry를 사용하여 모델 관리하기¶
Snowflake Model Registry는 머신 러닝 모델을 개발 단계에서 프로덕션 단계로 변환하는 과정을 간소화합니다. 체계적으로 정리된 모델 레지스트리는 모든 모델, 메트릭 및 메타데이터의 중앙 허브이자 단일 소스 역할을 합니다. 레지스트리에 모델을 기록하는 것은 Snowflake ML Ops 여정의 첫 번째이자 가장 중요한 단계로, 머신 러닝 작업에 Snowflake의 잘 알려진 제어, 보안 및 거버넌스를 적용할 수 있습니다.
Snowflake Model Registry는 다양한 ML 모델 관리 사용 사례와 시나리오를 처리할 수 있을 만큼 유연합니다. 이 항목에서는 개발부터 프로덕션까지 모델을 원활하게 관리하기 위해 레지스트리를 가장 잘 사용하는 방법에 대한 지침을 제공하며, 다음이 포함됩니다.
올바른 사용자 또는 역할 그룹이 다양한 작업을 수행할 수 있도록 모델에 대한 액세스를 제어하는 방법.
모든 모델의 메트릭과 기타 메타데이터를 쿼리하는 방법.
개발부터 프로덕션까지 모델의 수명 주기를 관리하는 방법.
프로덕션 코드를 변경하지 않고 새로운 버전의 모델을 릴리스하는 방법.
거버넌스¶
머신 러닝 모델 은 Snowflake의 일급 오브젝트이므로 역할 기반 액세스 제어 및 정보 스키마를 비롯한 모든 표준 Snowflake 거버넌스 기능을 함께 사용할 수 있습니다.
역할 기반 액세스 제어¶
모델 오브젝트에는 OWNERSHIP 및 USAGE의 두 가지 권한이 있습니다.
권한 |
설명 |
---|---|
OWNERSHIP |
모델 버전 관리, 아티팩트 액세스, 모델 메타데이터 업데이트 등 모델에 대한 전체 제어. 1개의 역할만 모델을 소유할 수 있지만 여러 사용자 또는 다른 역할에 해당 역할을 부여 할 수 있습니다. |
USAGE |
모델에 대한 읽기 전용 액세스로, 추론(예측)과 SHOW MODELS 및 SHOW VERSIONS IN MODEL 명령의 사용을 허용합니다. USAGE 권한만 있는 역할은 모델 코드, 가중치 또는 기타 아티팩트에 액세스할 수 없습니다. |
모델 소유자는 다음과 같이 모든 역할에 대한 액세스 권한을 부여할 수 있습니다.
GRANT USAGE ON MODEL my_model TO ROLE prod_role;
Information Schema 쿼리¶
모든 Snowflake 오브젝트와 마찬가지로 모델은 Snowflake Information Schema 의 뷰에 표시됩니다. 모델 및 해당 버전에 대한 뷰는 INFORMATION_SCHEMA.MODEL_VERSIONS 입니다. 모델 버전 정보는 모델에 대한 정보의 상위 집합이므로 별도의 MODEL 뷰가 없습니다.
이 뷰를 통해 레지스트리 자체에 대한 쿼리를 실행할 수 있습니다. 예를 들어, 정확도 메트릭을 유지 관리하면서 다음과 같이 SQL을 사용하여 각 모델 버전에 추가한다고 가정합니다.
ALTER MODEL my_model MODIFY VERSION v1
SET METADATA = '{"metric": {"accuracy": 0.769}}';
참고
레지스트리의 Python API로 메트릭을 설정 할 수도 있습니다.
mv = reg.get_model("my_model").version("v1").set_metric("accuracy", 0.769)
모든 버전의 모델에 이 메트릭을 추가한 후에는 여기에 있는 것과 같은 쿼리를 사용하여 모든 모델 오브젝트에 대한 정보를 검색하고 정확도가 가장 높은 순서부터 가장 낮은 순서로 나열할 수 있습니다.
SELECT
catalog_name,
schema_name,
model_name,
model_version_name,
metadata:metric:accuracy AS accuracy,
comment,
owner,
functions,
created_on,
last_altered_on
FROM my_database.INFORMATION_SCHEMA.MODEL_VERSIONS
ORDER BY accuracy DESC;
더욱 자세한 분석을 위해 다른 Information Schema 뷰나 다른 테이블을 조인하는 보다 복잡한 쿼리를 생성할 수 있습니다.
수명 주기 관리 모델링¶
Snowflake Model Registry는 소규모 및 대규모 기업의 다양한 요구 사항을 충족하기 위해 개발에서 프로덕션까지 모델의 수명 주기를 관리하는 간단하면서도 강력한 4가지 방안을 제공합니다. 사용자가 선호하는 거버넌스 구조에 따라 가장 적합한 구조를 선택할 수 있습니다.
기본 버전 사용하기¶
모델에는 버전이 지정되어 있으며, 1개의 버전이 기본 버전으로 지정됩니다. 관행에 따라 모델의 기본 버전을 프로덕션 버전으로 취급할 수 있으며, 프로덕션 코드에서는 모델의 기본 버전만 호출합니다.
이 시나리오에서는 모델 점수 매기기 또는 성능 평가 워크플로 요구 사항을 충족한 후, 모델 버전을 기본값으로 설정하여 프로덕션으로 승격시킬 수 있습니다. 이는 프로덕션에서 어떤 버전의 모델을 사용할지 관리하는 가장 간단한 방법입니다.
이 메서드를 사용해야 하는 경우:
모델 소유자가 프로덕션에 어떤 버전을 사용할지 결정할 권한을 갖습니다.
개발/생산 스테이지 외에는 다른 수명 주기 스테이지를 추적할 필요가 없습니다.
초기 설정¶
모델 소유자가 프로덕션 역할에 모델 사용 권한을 부여합니다.
GRANT USAGE ON MODEL my_model TO ROLE prod_role;
모델이 처음 기록될 때 유일한 버전이 기본값이며 해당 버전을 사용할 준비가 된 것입니다.
중요
모델에는 항상 기본 버전이 있어야 합니다. 따라서 이 방식에서는 아직 프로덕션 버전이 없는 모델을 지정할 수 없습니다. 모델이 준비되기 전에 사용하지 못하도록 방지해야 하는 경우 즉시 오류를 throw하는 초기 버전을 기록할 수 있습니다. 다른 버전이 준비될 때까지 이 버전이 기본으로 유지됩니다.
모델을 프로덕션으로 승격하기¶
아래 SQL에서 새 버전 new_version
이 품질 기준을 통과하면 이를 기본값으로 지정하여 프로덕션 버전으로 표시합니다.
ALTER MODEL my_model SET DEFAULT_VERSION = new_version;
프로덕션에서 모델 사용하기¶
프로덕션에서는 모델을 직접 호출하여 기본 버전을 사용합니다.
SELECT my_model!predict(...) ... ;
개발 및 테스트¶
사전 릴리스 버전을 사용하려면 원하는 모델 버전을 이름으로 호출하십시오.
WITH my_version AS MODEL my_model VERSION new_version
SELECT my_version!predict(...) ...;
별칭 사용하기¶
많은 조직에서 개발, canary, 스테이징, 프로덕션, 폐기 등 여러 스테이지를 사용하여 모델 수명 주기를 관리합니다. 모델 버전은 다음과 같습니다. 모델 버전에는 별칭, 사용자 정의 레이블 또는 모델 버전에만 연결할 수 있는 태그가 있을 수 있습니다. 조직에서 사용하는 수명 주기 스테이지를 나타내기 위해 별칭을 사용할 수 있습니다.
이 메서드를 사용해야 하는 경우:
모델 소유자는 모델 수명 주기 스테이지에 대한 결정을 내릴 권한이 있습니다.
개발/프로덕션뿐 아니라 여러 수명 주기 스테이지를 추적하기를 원할 수 있습니다.
아래 예제는 2개의 사전 프로덕션 스테이지(alpha
, beta
)와 1개의 프로덕션 스테이지(production
)를 사용합니다.
초기 설정¶
모델 소유자가 프로덕션 역할에 모델 사용 권한을 부여합니다.
GRANT USAGE ON MODEL my_model TO ROLE prod_role;
모델의 초기 버전 승격하기¶
모델을 기록할 때 production
별칭이 첫 번째 버전(여기서는 v1
)을 가리키도록 설정합니다.
ALTER MODEL my_model VERSION v1 SET ALIAS = production;
사전 프로덕션 버전 관리¶
처음에는 모델에 지정된 alpha
또는 beta
버전이 없습니다. 새 버전을 추가할 때는 처음에 alpha
로 지정합니다.
ALTER MODEL my_model VERSION v2 SET ALIAS = alpha;
나중에 nev 버전을 beta
로 승격합니다.
ALTER MODEL my_model VERSION v2 UNSET ALIAS;
ALTER MODEL my_model VERSION v2 SET ALIAS = beta;
모델의 후속 버전 승격하기¶
모델의 새 버전이 검토를 통과하면 현재 프로덕션 버전(여기서는 v1
)에서 production
별칭을 제거하고 새 버전(여기서는 v2
)에 적용합니다.
ALTER MODEL my_model VERSION v1 UNSET ALIAS;
ALTER MODEL my_model VERSION v2 UNSET ALIAS;
ALTER MODEL my_model VERSION v2 SET ALIAS = production;
프로덕션에서 모델 사용하기¶
production
별칭을 통해 프로덕션 버전의 모델을 호출합니다.
WITH my_version AS MODEL my_model VERSION production
SELECT my_version!predict(...) ...;
개발 및 테스트¶
사전 릴리스 버전을 사용하려면 대신에 alpha
또는 beta
별칭을 통해 모델을 호출하십시오. 예를 들어, 알파 버전을 테스트하려면:
WITH my_version AS MODEL my_model VERSION alpha
SELECT my_version!predict(...) ...;
여러 스키마 사용하기¶
여러 스키마를 사용하여 수명 주기 스테이지를 관리할 수 있습니다. 이 접근법에서는 코드가 지정된 프로덕션 스키마에 있는 모델만 독점적으로 호출하며, 여기에는 프로덕션에서 사용되는 모델만 포함됩니다. 다른 스테이지의 모델은 다른 위치에 저장됩니다. 모델 버전이 프로덕션에 사용할 준비가 되면 프로덕션 스키마에 복사됩니다. 프로덕션 모델은 자체 액세스 제어 기능이 있는 별도의 오브젝트이므로 모델 개발자가 개발 스테이지에서 모델을 자유롭게 제어하면서 실수로 수정하지 못하도록 보호할 수 있습니다.
이 메서드를 사용해야 하는 경우:
모델 소유자가 아닌 다른 역할이 모델을 프로덕션으로 승격시킵니다.
사용자는 개발 환경과 운영 환경을 강력하게 분리하기를 원할 수 있습니다.
초기 설정¶
개발 및 프로덕션 스키마에 모두 액세스할 수 있는 역할(예: ml_admin
)을 생성합니다. 이 예제에서 이 두 환경에 대한 액세스는 각각 개발 및 프로덕션 스키마에 대한 권한(예: USAGE 및 CREATE MODEL)을 포함하는 model_owner
및 prod_role
기존 역할에 캡슐화되어 있습니다. 새로운 ml_admin
역할은 해당 역할을 부여받아 필요한 권한을 얻게 됩니다.
USE ROLE ACCOUNTADMIN;
CREATE ROLE ml_admin;
USE ROLE model_owner;
GRANT ROLE model_owner TO ROLE ml_admin;
USE ROLE prod_role;
GRANT ROLE prod_role TO ROLE ml_admin;
모델의 초기 버전 승격하기¶
ml_admin
역할을 사용하여 모델 버전을 개발 스키마에서 프로덕션 스키마로 복사하고, CREATE MODEL … FROM MODEL 을 사용하여 초기 복사를 수행하여 원하는 버전만 복사합니다. 프로덕션 버전에 동일한 식별자를 사용하거나 프로덕션 버전에 다른 번호 체계를 설정할 수 있습니다. 여기서 개발 버전 V12
는 프로덕션 버전 V1
이 됩니다.
USE ROLE ml_admin;
CREATE MODEL prod_db.prod_schema.prod_model WITH VERSION V1
FROM MODEL dev_db.dev_sch.dev_model VERSION V12;
모델의 초기 프로덕션 버전을 생성한 후 프로덕션에서 모델을 사용할 역할에 USAGE 및 기타 필요한 권한을 부여합니다.
USE ROLE ml_admin;
GRANT USAGE ON MODEL my_model TO ROLE prod_role;
모델의 후속 버전 승격하기¶
모델의 새 버전이 프로덕션에 사용될 준비가 되면 새 모델 버전만 프로덕션 환경에 복사합니다. 여기서 개발 버전 V24
는 프로덕션 버전 V2
가 됩니다. 그러면 V2
가 기본 버전으로 설정됩니다.
USE ROLE ml_admin;
ALTER MODEL prod_db.prod_schema.prod_model ADD VERSION V2
FROM MODEL dev_db.dev_schema.dev_model VERSION V24;
ALTER MODEL prod_db.prod_schema.prod_model
SET DEFAULT_VERSION = V2;
팁
아래에 표시된 대로 기본 버전을 이전 버전으로 설정하면 롤백해야 할 경우를 대비해 이전 프로덕션 버전을 보관하는 것이 좋습니다.
ALTER MODEL prod_db.prod_schema.prod_model SET DEFAULT_VERSION = V1;
보관할 이전 버전 수와 보관 기간에 대한 정책을 수립합니다.
프로덕션에서 모델 사용하기¶
운영 환경에서는 모델의 기본 버전을 호출합니다.
SELECT prod_model!predict(...) ... ;
개발 및 테스트¶
사전 릴리스 버전을 관리하려면 추가 스키마를 사용하여 한 스키마에서 다음 스키마로 복사하여 한 스테이지에서 다음 스테이지로 버전을 승격할 수 있습니다. 모델 소유자가 사전 프로덕션 스테이지를 관리할 수 있다면 별칭 과 같은 더 간단한 방법을 사용하여 이러한 버전을 관리할 수 있습니다. 추가 스키마를 사용하면 이러한 스테이지 중 1개 이상이 다른 역할에 의해 관리되는 경우 개발 및 테스트와 같은 여러 프로덕션 전 환경을 분리하는 데 여전히 유용할 수 있습니다.