Modeling Objective의 온라인 배포
Modeling Objective의 온라인 배포는 staging 또는 production 릴리스를 HTTP 엔드포인트로 제공합니다. 목표에서 배치 배포와 함께 관리하고 릴리스 갱신, 권한과 관측 설정을 사용합니다. 목표 없이 모델 페이지에서 시작하려면 직접 배포를 선택합니다.
생성과 상태
먼저 목표에 해당 Staging 또는 Production 릴리스가 있어야 합니다. 목표 홈 아래의 Deployments > + Create a deployment에서 이름, 설명과 사용할 릴리스 환경을 정하고 Create deployment를 선택합니다.
생성한 배포를 열면 최신 릴리스와 추론 코드가 포함된 실행 환경을 배포하는 중간 상태가 표시됩니다.
업데이트 후 status와 health가 모두 정상 표시가 되면 최신 릴리스로 갱신되어 질의할 준비가 된 상태입니다.
함수 게시
Details의 Publish Function은 모델과 같은 입출력 API를 가진 래퍼 함수를 만듭니다. 함수 저장소에서 가져와 업무 로직을 추가하거나 Workshop과 Vertex 같은 앱에서 사용할 수 있습니다.
모델 API를 바꾸면 함수 버전과 소비자도 갱신합니다.
Query와 HTTP 호출
Query 탭에서 요청을 작성하고 실제 엔드포인트 응답을 확인합니다. multi I/O는 모델 어댑터의 이름 있는 입력과 출력을 사용합니다. single I/O는 단일 표 입력 및 출력만 처리하는 종료 예정 경로이며 Modeling Objective 배포에서만 지원합니다. 신규 연결에는 multi I/O V2를 권장합니다.
다음 single I/O 예제는 house-location, bedrooms와 bathrooms를 받는 단일 표 모델에 해당합니다. 환경 URL과 완전한 배포 RID는 Query에서 복사한 요청으로 확인하고 토큰은 외부에서 안전하게 제공합니다.
: "${FOUNDRY_URL:?Set the HTTPS environment URL from the Query tab}"
: "${DEPLOYMENT_RID:?Set the full live deployment RID}"
: "${FOUNDRY_TOKEN:?Provide your Foundry token securely}"
curl --request POST \
--header "Authorization: Bearer ${FOUNDRY_TOKEN}" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '{"requestData":[{"house-location":"New York","bedrooms":3,"bathrooms":1.5}],"requestParams":{}}' \
"${FOUNDRY_URL%/}/foundry-ml-live/api/inference/transform/${DEPLOYMENT_RID}"
같은 입력을 input_df라는 모델 API 필드로 받는 V2 예제는 다음과 같습니다. 두 도시의 값은 요청 형식을 설명하는 예시입니다.
: "${FOUNDRY_URL:?Set the HTTPS environment URL from the Query tab}"
: "${DEPLOYMENT_RID:?Set the full live deployment RID}"
: "${FOUNDRY_TOKEN:?Provide your Foundry token securely}"
curl --request POST \
--header "Authorization: Bearer ${FOUNDRY_TOKEN}" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '{"input_df":[{"house-location":"New York","bedrooms":3,"bathrooms":1.5},{"house-location":"San Francisco","bedrooms":2,"bathrooms":1}]}' \
"${FOUNDRY_URL%/}/foundry-ml-live/api/inference/transform/${DEPLOYMENT_RID}/v2"
응답과 오류 및 다른 언어의 호출 예제는 온라인 추론 HTTP API에 있습니다.
중지와 삭제
Disable은 배포를 끄되 같은 Target RID로 다시 활성화할 수 있게 남깁니다. 비활성 배포는 목표의 Deployments에 계속 표시합니다. Delete는 배포를 완전히 제거하므로 이전 Target RID로 더 이상 질의할 수 없고 되돌릴 수 없습니다.
자원과 복제본 범위
최소 및 최대 복제본 수와 CPU 및 GPU 수를 구성하여 요청량에 따라 수평 확장할 수 있습니다. 생성할 때 Deployment type을 Live로 선택한 뒤 자원과 범위를 지정합니다.
기존 배포에서는 Runtime configuration의 편집 버튼으로 바꿉니다. 실행 구성을 수정하면 배포를 다시 실행하여 중단 없이 갱신합니다.
서비스 로그
시작 로그에는 내려받아 설치할 Conda 패키지 URI와 모델 다운로드 정보가 포함됩니다. 시작에 실패하면 warning 또는 error 로그에서 원인을 확인합니다.
Details > Logs & Metrics에서 시간 범위와 필드 필터를 정하고 표시 열을 추가하거나 제거할 수 있습니다. 오른쪽 위 다운로드 버튼으로 로그 전체를 텍스트 파일로 받을 수 있습니다.
복제본이 여러 개이면 비슷한 로그가 반복되어 보일 수 있습니다. 각 로그의 node_id는 복제본을 구분하므로 tags.node_id:{해당 UUID} 형식으로 필터링합니다.
Python 모델은 logging 모듈로 쓴 로그를 이 화면에서 확인합니다.
import logging
log = logging.getLogger("model-logger")
log.info("Emitting info directly from the model")
컨테이너 모델은 모델 버전의 텔레메트리를 켜야 컨테이너 로그를 내보냅니다. 서비스 로그 보존 기간은 7일이며 이후에는 조회하거나 내려받을 수 없습니다.
두 종류의 사용 지표
Kubernetes host 지표는 모델과 무관한 프로세스까지 포함하여 호스트 전체의 CPU 및 메모리 사용 비율을 보여 줍니다. 예약과 자원 제한을 조사할 때 사용합니다. 모델이 느리고 호스트가 100%로 사용 중이라면 호스트의 자원 제한 영향을 받고 있을 가능성이 있습니다.
Inference container 지표는 해당 Python 모델 및 어댑터 컨테이너의 실제 메모리와 CPU 코어 사용량을 보여 줍니다. 전체 호스트와 구분해야 합니다. 현재 컨테이너 기반 모델에는 이 사용량 지표를 제공하지 않습니다.
호스트 지표만 보이면 이전 온라인 배포 버전일 수 있습니다. 배포를 재시작하여 실행 버전을 갱신하면 지원하는 지표를 볼 수 있습니다.
Spark 모델
Spark 모델 지원은 Beta이며 지원 Spark 버전이 바뀔 수 있고 이전 버전과의 호환을 보장하지 않습니다. 현재 버전과 맞지 않는 모델은 다시 빌드해야 할 수 있습니다.
목표의 온라인 배포에는 JDK와 Spark 배포본이 있지만 로컬 Spark만 사용하므로 모든 연산은 단일 JVM에서 실행됩니다. JSON 요청을 Spark DataFrame 입력으로 쓸 때에는 전처리 또는 변환에서 형식을 맞춥니다. 다음 함수의 model은 실제 Spark DataFrame을 받아 예측을 반환하는 predict_spark_df 메서드를 제공해야 합니다.
import pandas as pd
from pyspark.sql import SparkSession
def run_spark_inference(model, frame):
if isinstance(frame, pd.DataFrame):
frame = SparkSession.builder.getOrCreate().createDataFrame(frame)
return model.predict_spark_df(frame)
온라인 배포 질문에는 요청 크기, 기본 복제본과 시간 초과 조건이 있습니다. 사용량 계산은 요청이 없을 때도 활성 자원을 예약하는 조건을 설명합니다.