모델 함수의 게시와 버전 관리
모델 함수는 온라인 모델 배포를 호출하는 자동 생성 함수입니다. 추론 로직은 배포에서 실행하며 모델 API의 입력과 출력을 Functions가 사용하는 자료형으로 표현합니다. Workshop, Vertex와 같은 앱에서 직접 사용하거나 TypeScript 및 Python 함수에서 호출할 수 있습니다.
게시 조건과 위치
함수로 게시할 모델 API의 입력은 Parameter, 표 형식, Object 또는 ObjectSet이어야 합니다. API에 Any를 사용할 수 없으며, 표 입력과 출력은 필수 열과 자료형을 선언해야 합니다. 열 선언이 없는 pm.Pandas()나 pm.Spark()는 Array<any>로 해석하므로 사용할 수 없습니다. list와 dict도 list[str], dict[str, str]처럼 원소 자료형을 명시합니다.
직접 모델 배포를 만든 뒤 모델 사이드바의 +로 함수를 게시합니다. 한 모델 브랜치에는 해당 배포를 감싸는 함수 하나만 둘 수 있습니다. Modeling Objective의 온라인 배포에서는 Details의 Publish Function 카드로 시작합니다.
Modeling Objective에서는 대화상자에서 함수 매개변수를 설정합니다. 두 게시 경로 모두 모델 API를 변환하는 같은 종류의 래퍼 함수를 만듭니다.
직접 배포의 새 모델 버전
함수가 있는 브랜치에 새 모델 버전을 게시하면 새 함수 버전도 자동으로 만듭니다. 모델 API가 같으면 기존 소비자를 새 함수 버전으로 갱신할 필요는 없습니다. 저장소나 앱에는 보통 함수의 버전 하나를 가져오므로 여러 모델 버전을 병행하려면 서로 다른 브랜치에 배포와 함수를 각각 게시할 수 있습니다.
Marketplace 설치의 출력으로 남아 있는 모델은 예외입니다. 기본 브랜치에 새 모델 버전을 게시하면 온라인 배포는 갱신되지만 새 함수 버전은 자동 게시하지 않습니다. 함수 게시는 제품 설치 및 업그레이드에서 관리합니다.
Modeling Objective의 API 변경
모델 API가 바뀐 버전을 릴리스하면 새 함수 버전이 필요한 배포에 경고가 표시됩니다.
대화상자에서 영향을 받는 배포의 함수 버전을 게시합니다. 경고를 건너뛰었다면 해당 배포의 Details로 돌아가 새 버전을 게시해야 합니다.
이전 함수 버전은 예전 입출력 정의를 계속 노출하지만 실제 온라인 배포는 현재 모델 API를 사용합니다. 두 계층의 검증이 맞지 않으면 기존 호출이 실패합니다. 모델 API를 바꿀 때에는 함수를 호출하는 TypeScript 함수와 Workshop 앱 등도 함께 갱신합니다.
Code Repositories의 TypeScript v1은 resources.json에서 함수 의존성 버전을 선택하면 자료형 바인딩을 다시 생성합니다. TypeScript v2와 Python은 Resource import 사이드바에서 기존 함수를 제거한 뒤 필요한 버전으로 다시 가져옵니다.
행 단위 게시
모델 API에 표 입력 하나와 표 출력 하나만 있으면 행 단위 게시가 기본으로 켜집니다. 입력과 출력은 각각 정확히 하나여야 합니다. 표 입력 외에 Parameter가 하나라도 있거나 출력이 추가되면 해당 조건을 만족하지 않아 표 데이터를 배열로 주고받습니다. 객체 업무에 맞는 API가 필요하면 Object나 ObjectSet을 직접 입력으로 선언할 수도 있습니다.
다음은 주택 가격 예제의 api()에서 반환할 inputs와 outputs 정의입니다. predicted_price는 소수점 가격을 받을 수 있는 float입니다.
import palantir_models as pm
input_columns = [
("area_code", int),
("num_bedrooms", int),
("num_bathrooms", int),
]
inputs = {"input_df": pm.Pandas(columns=input_columns)}
outputs = {
"output_df": pm.Pandas(
columns=input_columns + [("predicted_price", float)]
)
}
api()는 (inputs, outputs)를 반환합니다. 행 단위 처리를 켜면 호출 한 번이 입력 한 행과 출력 한 행에 대응하며 생성 함수는 다음과 같은 타입 선언을 갖습니다.
import type * as FunctionsApi from "@foundry/functions-api";
export declare function housingPriceModelingObjective(parameters: {
area_code: FunctionsApi.Integer;
num_bedrooms: FunctionsApi.Integer;
num_bathrooms: FunctionsApi.Integer;
}): Promise<{
predicted_price: FunctionsApi.Double;
num_bathrooms: FunctionsApi.Integer;
area_code: FunctionsApi.Integer;
num_bedrooms: FunctionsApi.Integer;
}>;
행 단위 처리를 끄면 입력과 출력 이름 및 행 배열을 유지합니다.
import type * as FunctionsApi from "@foundry/functions-api";
export declare function housingPriceModelingObjective(parameters: {
input_df: Array<{
num_bathrooms: FunctionsApi.Integer;
area_code: FunctionsApi.Integer;
num_bedrooms: FunctionsApi.Integer;
}>;
}): Promise<{
output_df: Array<{
predicted_price: FunctionsApi.Double;
num_bathrooms: FunctionsApi.Integer;
area_code: FunctionsApi.Integer;
num_bedrooms: FunctionsApi.Integer;
}>;
}>;
Enable row-wise processing은 새 함수 버전을 게시할 때 변경합니다. 이 설정으로 호출 형식이 바뀌면 소비자도 해당 함수 API에 맞춥니다.