안정적인 엔드포인트 및 API 참조¶
이 페이지에서는 추론 서비스를 외부에서 사용하고 Snowflake Gateway를 통해 프로덕션 모델 업그레이드 및 고가용성을 관리하기 위한 기술 사양을 제공합니다.
Snowflake Gateway를 사용한 안정적인 엔드포인트¶
표준 SPCS 수신 시스템은 서비스와 해당 호스트 이름 간에 긴밀하게 결합되어 있습니다. 서비스가 다시 생성되면 연결된 호스트 이름이 손실됩니다. Snowflake Gateway는 게이트웨이 오브젝트의 수명 동안 변경되지 않는 영구 호스트 이름을 생성 시 할당하여 이 문제를 해결합니다.
주요 기능¶
안정적인 URL: 모델이 진화함에 따라 게이트웨이가 다양한 기본 서비스를 가리키면서 하나의 영구 URL을 유지합니다. 변경 사항은 일반적으로 1분 이내에 반영됩니다.
트래픽 분할: 할당된 비율에 따라 요청을 여러 엔드포인트로 라우팅하여 블루-그린 또는 카나리 배포를 촉진합니다.
자동 장애 조치: 사용할 수 없거나 작동하지 않는 엔드포인트에서 정상적인 다른 대상으로 트래픽을 자동으로 리디렉션합니다.
게이트웨이 장애 조치 동작¶
게이트웨이는 지정된 정상 엔드포인트의 상대적 비율을 따르며 다음과 같은 경우 장애 조치를 자동으로 트리거합니다.
서비스가 일시 중단되거나(auto_resume이 false임) 해당 컴퓨팅 풀이 일시 중단됩니다(다시 활성화될 때까지).
서비스가 준비 상태 프로브에 실패하거나 완전히 삭제됩니다.
게이트웨이 소유자가 대상 서비스 엔드포인트에 대한 USAGE 또는 OWNERSHIP 권한을 상실합니다.
참고
트래픽은 0% 분할로 엔드포인트로 장애 조치되지 않습니다. 장애 조치를 고려하려면 대상에 1% 이상의 분할이 있어야 합니다.
모델 업그레이드 관리하기¶
1. 게이트웨이 생성 및 변경하기¶
SQL 명령 내의 YAML 기반 사양을 사용하여 모델 버전 간에 트래픽이 분산되는 방식을 정의할 수 있습니다.
-- Create a gateway to split traffic between V1 (90%) and V2 (10%)
CREATE OR REPLACE GATEWAY my_model_gateway
FROM SPECIFICATION $$
spec:
type: traffic_split
split_type: custom
targets:
- type: endpoint
value: my_db.my_schema.model_v1_service!inference
weight: 90
- type: endpoint
value: my_db.my_schema.model_v2_service!inference
weight: 10
$$;
-- Change the gateway to split traffic differently V1 (60%) and V2 (40%)
ALTER GATEWAY split_gateway
FROM SPECIFICATION $$
spec:
type: traffic_split
split_type: custom
targets:
- type: endpoint
value: my_db.my_schema.model_v1_service!inference
weight: 60
- type: endpoint
value: my_db.my_schema.model_v2_service!inference
weight: 40
$$;
사양 규칙: 유형은 traffic_split이어야 하고, traffic_split은 사용자 지정이어야 하며, 모든 대상 가중치의 합이 정확히 100이 되어야 합니다. 기본적으로 게이트웨이는 최대 5개의 엔드포인트로 라우팅할 수 있습니다.
2. 스키마 진화 처리하기¶
새 모델 버전(V2)에 V1과 다른 입력 기능이 필요한 경우 요청 중단을 방지하려면 다음 전략을 따릅니다.
상위 세트 업데이트: V1 및 V2 모두에 필요한 모든 기능을 전송하도록 클라이언트 애플리케이션을 업데이트합니다. Snowflake 모델 서비스는 불필요한 기능을 암시적으로 무시합니다.
점진적 분할: V2를 배포하고 ALTER GATEWAY를 사용하여 트래픽 비율을 V1에서 V2로 천천히 전환합니다.
클라이언트 정리: 트래픽의 100%가 V2로 라우팅되면 클라이언트를 업데이트하여 이제는 더 이상 사용되지 않는 V1 기능을 제거합니다.
중요
상위 세트 기능을 사용한 게이트웨이 라우팅은 현재 dataframe_records 형식으로 지원되며, dataframe_split 에 대한 지원이 곧 제공될 예정입니다.
3. HTTP 엔드포인트¶
모든 게이트웨이 오브젝트에는 엔드포인트 이름이 함께 제공되며, 이는 다음 쿼리를 사용하여 찾을 수 있습니다.
DESC GATEWAY split_gateway ->> select "ingress_url" as endpoint from $1
게이트웨이의 엔드포인트는 https://<endpoint>/입니다. 게이트웨이를 통해 모델에 대한 특정 메서드를 호출하려면 메서드 이름을 URL(예: https://<endpoint>/<method-name>)의 경로로 사용합니다. URL에서 메서드 이름의 밑줄(_)은 URL에서 대시(-)로 대체됩니다. 예를 들어, 서비스 이름 predict_prob는 URL에서 predict-proba로 변경됩니다.
비공개 링크 사용자의 경우 ingress_url 대신 privatelink_ingress_url을 사용합니다.
요청 및 응답 프로토콜¶
게이트웨이는 실시간 추론 페이지에 설명된 것과 동일한 데이터 형식을 지원합니다.
보충 메타데이터 전달하기¶
일부 시나리오에서 보충 데이터(예: 레코드 IDs 또는 기본 키)는 모델의 입력 서명의 일부는 아니지만 다운스트림 로깅 또는 기준값 레이블과의 조인에 필요합니다. 이를 처리하기 위해 Snowflake는 선택 사항인 extra_columns 최상위 필드를 지원합니다.
예¶
dataframe_split을 사용하여 extra_columns를 DataFrame 페이로드와 함께 최상위 필드로 포함합니다.
payload = {
"dataframe_split": {
"index": [0, 1],
"columns": [
"customer_id",
"age",
"monthly_spend",
"primary_key",
],
"data": [
[101, 32, 85.5, "001"],
[102, 45, 120.0, "002"],
]
},
"extra_columns": ["primary_key"]
}
또는 dataframe_records를 사용합니다.
payload = {
"dataframe_records": [
{
"customer_id": 101,
"age": 32,
"monthly_spend": 85.5,
"primary_key": "001",
},
{
"customer_id": 102,
"age": 45,
"monthly_spend": 120.0,
"primary_key": "002",
},
],
"extra_columns": ["primary_key"]
}
extra_columns에 대한 지침¶
선택 사항: 필요하지 않은 경우 extra_columns를 완전히 생략할 수 있습니다.
충돌 없음: extra_columns에 나열된 열 이름은 모델 메서드가 입력으로 예상하는 열과 충돌하지 않아야 합니다. 모델 입력과 추가 열을 개념적으로 분리된 상태로 유지합니다.
페이로드 크기 제한: 전체 요청 페이로드(extra_columns 및 모든 데이터 행 포함)는 1MB로 제한됩니다. 이 제한을 초과하는 경우 다음을 수행합니다.
배치 크기를 줄입니다(요청당 더 적은 행 수).
꼭 필요하지 않은 추가 열을 제거하거나 줄입니다.