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으로 실행할 수 있습니다.
- Models의 출력 모델 카드 메뉴에서 Publish as transform output을 선택합니다.
- Create transform에서 실행할 notebook 파일과 입력 및 출력을 정합니다. 학습 데이터 입력과 시험 데이터셋 및 모델 출력을 함께 선언할 수 있습니다.
- Sync and run을 선택하면 코드 변경을 저장하고 transform을 만든 뒤 빌드를 시작합니다. Models에 연결한 데이터셋과 모델 및 작업 상태가 나타납니다.
View build로 실행 작업을 열 수 있습니다. notebook을 수정한 뒤 Rebuild로 다시 학습/게시하며, 이 모델과 데이터셋 빌드는 다른 transform처럼 스케줄을 설정할 수 있습니다.