Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

모델 추론의 계측과 텔레메트리

기본 머신러닝 모델에서 사용자 정의 로그와 span을 내보내 운영 추론을 관찰하고 문제를 조사할 수 있습니다. Foundry는 모델 호출마다 전체 실행 시간을 감싸는 span 하나와 요청 로그 하나를 자동 생성합니다. 지표를 사용자 정의하는 기능은 제공하지 않으며 전체 추론 실행 시간은 플랫폼이 기록합니다.

결과는 Ontology와 AIP 관측 도구에서 확인합니다. 컨테이너 자체의 로그 수집은 컨테이너 텔레메트리의 실행 환경 조건을 따릅니다.

환경 의존성

모델 환경에 OpenTelemetry 라이브러리를 명시적으로 추가합니다. opentelemetry-api와 opentelemetry-sdk는 사용자 정의 로그와 span에 필요합니다. 모델이 보내는 외부 네트워크 요청을 자동 계측하려면 opentelemetry-instrumentation도 필요합니다.

플랫폼의 로거 및 tracer 사용

Foundry가 OpenTelemetry SDK의 전역 logger provider를 설정하므로 표준 Python logging으로 쓴 로그는 Foundry로 전달됩니다. 별도 로깅 라이브러리는 전역 provider에서 얻은 로거를 사용하도록 구성해야 합니다.

전역 tracer provider도 Foundry가 설정합니다. trace.get_tracer로 tracer를 얻어 사용자 정의 span을 만들 수 있습니다. 다른 추적 라이브러리를 사용하면 이 전역 provider에서 얻은 tracer로 기록하도록 구성합니다.

실제 예측의 구간 기록

아래 어댑터의 model은 input_feature라는 특성 표를 받아 행별 수치 예측을 반환하는 실제 모델입니다. 입력 행 수를 로그로 기록하고 특성 선택 및 모델 실행을 서로 다른 span으로 감쌉니다. auto_serialize가 모델을 저장하고 복원합니다.

import logging
import palantir_models as pm
from opentelemetry import trace

logger = logging.getLogger(__name__)
tracer = trace.get_tracer(__name__)

class ExampleModelAdapter(pm.ModelAdapter):
    @pm.auto_serialize
    def __init__(self, model):
        self.model = model

    @classmethod
    def api(cls):
        return (
            {"df_in": pm.Pandas([("input_feature", float)])},
            {"df_out": pm.Pandas([("prediction", float)])},
        )

    def predict(self, df_in):
        logger.info("Running inference on %d rows.", len(df_in))
        with tracer.start_as_current_span("preprocess"):
            features = df_in[["input_feature"]]
        with tracer.start_as_current_span("inference"):
            df_in["prediction"] = self.model.predict(features)
        return df_in

preprocess와 inference는 전체 호출 span 안에서 각 작업에 걸린 시간을 구분합니다. 데이터 전처리가 더 필요하다면 해당 span 안에 실제 전처리 로직을 둡니다.