Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Code Workspaces의 모델 버전과 추론

모델 학습, 게시와 기존 모델 가져오기는 JupyterLab 작업공간에서 지원합니다. Models 패널의 모델 별칭은 특정 Foundry 모델 자원을 가리키며, 별칭과 RID의 매핑은 /home/user/repo/.foundry 아래 숨김 설정에 저장합니다.

모델 생성 또는 가져오기

Models > Add > Create new model에서 모델을 만들고 별칭을 등록합니다. 모델에 게시할 코드를 제공하며 어댑터를 작성할 Python 파일도 생성합니다.

Models > Add > Import existing model은 기존 모델을 가져오고 저장 상태 파일을 내려받는 코드를 제공합니다.

모델 카드를 펼치면 작업별 스니펫 선택기가 나타납니다. 모델별 별칭과 설정을 반영한 코드를 사용하며 palantir_models를 작업공간의 Python 환경에 설치합니다.

어댑터 파일

어댑터는 모델 저장과 로드, 입력/출력 API 및 예측 로직을 정의합니다. 모델을 게시할 때 학습한 모델을 어댑터로 감싸야 합니다. 어댑터는 notebook 셀이 아닌 별도 .py 파일에 둡니다.

예를 들어 별칭이 my_model이면 my_model_adapter.py와 MyModelAdapter 이름으로 파일과 클래스가 생성됩니다. 생성한 스니펫은 이 이름 관계를 전제로 하므로 파일을 옮기거나 클래스를 바꾸면 import와 사용 코드를 함께 수정합니다.

아래 흐름은 선형 회귀 어댑터의 완전한 구현을 linear_regression_model_adapter.py에 둔 경우입니다. 해당 LinearRegressionModelAdapter는 model을 받아 저장하고 다음 API를 제공합니다.

구분계약
입력 이름df_in
입력 열median_income, housing_median_age, total_rooms. 모두 Float
출력 이름df_out
출력 열위 세 열과 Float prediction

모델 학습과 새 버전 게시

먼저 Data에 학습 데이터셋을 training_data 별칭으로 등록합니다. 수치 특성 세 열과 목표 열 median_house_value가 있어야 합니다. scikit-learn과 palantir_models를 설치하고, Models에는 linear_regression_model 별칭의 출력 모델을 등록합니다.

학습 셀:

from foundry.transforms import Dataset
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

training_data = Dataset.get("training_data").read_table(format="pandas")
features = ["median_income", "housing_median_age", "total_rooms"]
model = Pipeline([
    ("imputer", SimpleImputer(strategy="median")),
    ("scaler", StandardScaler()),
    ("regressor", LinearRegression()),
])
model.fit(training_data[features], training_data["median_house_value"])

별도 게시 셀은 실제 모델 버전을 만듭니다.

from palantir_models.code_workspaces import ModelOutput
from linear_regression_model_adapter import LinearRegressionModelAdapter

adapter = LinearRegressionModelAdapter(model)
model_output = ModelOutput("linear_regression_model")
model_output.publish(adapter)

ModelOutput은 모델 자원의 쓰기 참조이며 publish는 새 버전을 저장합니다. publish 호출이 notebook 셀의 마지막 줄이면 게시한 모델 버전의 미리보기를 표시합니다.

가져올 모델 버전 선택

모델 카드에서 Download model을 선택하여 다음 중 하나를 정합니다.

선택사용할 버전
Latest on current branch현재 작업공간 브랜치의 최신 버전
Latest on branch지정한 브랜치의 최신 버전
Specific model version지정한 model version RID에 고정

ModelInput은 모델의 읽기 참조입니다. 같은 별칭을 사용하더라도 버전 선택 조건에 따라 읽는 저장 상태가 달라집니다.

from palantir_models.code_workspaces import ModelInput

latest_on_current_branch = ModelInput("linear_regression_model")
latest_on_test_branch = ModelInput("linear_regression_model", branch="test")

특정 버전은 실제 RID를 MODEL_VERSION_RID에 제공한 뒤 선택할 수 있습니다.

import os
from palantir_models.code_workspaces import ModelInput

model_input = ModelInput(
    "linear_regression_model",
    model_version=os.environ["MODEL_VERSION_RID"],
)

저장 파일 다운로드

model_directory = model_input.download_files()

저장한 모델 상태 파일을 임시 디렉터리에 내려받고 그 경로를 반환합니다.

어댑터로 다시 로드

게시할 때 사용한 어댑터 파일이 작업공간에 있거나 공유 어댑터 패키지를 의존성으로 추가했다면 어댑터를 초기화할 수 있습니다.

from linear_regression_model_adapter import LinearRegressionModelAdapter

restored_adapter = model_input.initialize_adapter(LinearRegressionModelAdapter)
restored_model = restored_adapter.model

model은 앞에서 정의한 어댑터의 실제 속성입니다. 다른 어댑터를 사용하면 그 구현의 속성을 따릅니다. 로드한 어댑터로 추가 학습하거나 ModelOutput을 통해 새 버전을 게시할 수 있습니다.

작업공간용 추론 배포

Models 카드의 Select snippets에서 Deploy for inference를 선택합니다. Download model과 같은 버전 선택기를 사용합니다.

이 배포는 모델 버전마다 최대 하나이며 같은 버전을 쓰는 여러 동시 세션이 공유합니다. Modeling Objective의 온라인 배포 및 일반 모델 배포와는 별도입니다. 기본으로 20분 동안 사용하지 않으면 자동 종료합니다. 작업공간 자체의 유휴 종료 시간과 구분합니다.

deployment_client = model_input.deploy(cpu=2, memory="8G", max_replicas=1)
deployment_client.wait_for_readiness()

위 호출은 실제 배포를 만들거나 해당 버전의 공유 배포를 사용합니다. 준비된 뒤 어댑터의 입력 계약에 맞춰 추론합니다. 아래 한 행은 호출 형식을 보여 주는 가상 주택 특성입니다.

import pandas as pd

inference_input = pd.DataFrame([{
    "median_income": 3.4,
    "housing_median_age": 18.0,
    "total_rooms": 1200.0,
}])
prediction = deployment_client.predict(df_in=inference_input)

필요하면 같은 client로 자원을 변경합니다.

deployment_client.scale(cpu=4)

공유 배포이므로 크기 변경이나 종료는 같은 모델 버전을 사용하는 다른 세션에도 영향을 줄 수 있습니다. 모델 카드의 Deployments에서 버전을 선택하면 사용 자원, 로그와 배포 상태를 확인할 수 있습니다.

요청 크기와 chunking

한 추론 요청의 크기는 40 MB까지입니다. 약 100,000행이라는 규모는 행 크기에 따른 예시이며 고정 행 한도가 아닙니다.

큰 입력은 chunking으로 나누어 순서대로 전송할 수 있습니다. use_chunking은 설정 속성입니다.

deployment_client.use_chunking = True
prediction = deployment_client.predict(df_in=inference_input)

chunking은 데이터셋 입력 하나만 지원하며 다른 매개변수는 여러 개 함께 보낼 수 있습니다. 더 큰 처리나 이 방식에 맞지 않는 작업에는 Code Repositories의 transform 같은 대규모 처리 경로를 사용합니다.

추론을 모두 마친 뒤 공유 배포를 수동 종료하려면 다음 호출을 사용합니다.

deployment_client.disable()

모델을 transform 출력으로 게시

모델을 만드는 notebook도 transform으로 실행할 수 있습니다.

  1. Models의 출력 모델 카드 메뉴에서 Publish as transform output을 선택합니다.

  1. Create transform에서 실행할 notebook 파일과 입력 및 출력을 정합니다. 학습 데이터 입력과 시험 데이터셋 및 모델 출력을 함께 선언할 수 있습니다.

  1. Sync and run을 선택하면 코드 변경을 저장하고 transform을 만든 뒤 빌드를 시작합니다. Models에 연결한 데이터셋과 모델 및 작업 상태가 나타납니다.

View build로 실행 작업을 열 수 있습니다. notebook을 수정한 뒤 Rebuild로 다시 학습/게시하며, 이 모델과 데이터셋 빌드는 다른 transform처럼 스케줄을 설정할 수 있습니다.