CometML 메트릭·파라미터 로깅

CometML 메트릭·파라미터 로깅

훈련 실행이 잘 돌아가는지 보려면 시간에 따라 변하는 성능 지표와, 모델이나 훈련 알고리즘에 전달하는 하이퍼파라미터를 기록해야 해요. CometML은 프레임워크 통합이 있으면 해당 지표를 자동으로 잡아 주고, 자동으로 안 잡히는 속성은 단일 값이나 키·값 쌍 묶음 형태의 커스텀 메트릭·파라미터로 직접 로깅할 수 있어요. 로깅한 결과는 실험 상세 페이지에서 확인하고, 여러 실험끼리 비교 기능으로 대조할 수도 있어요. 이 페이지에서는 로깅 메서드들을 예시와 함께 살펴볼게요.

출처: CometML Docs - Log Metrics and Parameters

메트릭과 파라미터의 차이

  • **메트릭(metrics)**은 시계열 데이터나 훈련 실행의 성능을 추적하는 데 쓰여요.
  • **파라미터(parameters, 즉 하이퍼파라미터)**는 보통 모델이나 훈련 알고리즘에 전달하는 인자를 가리켜요.

메트릭은 log_metric()·log_metrics(), 파라미터는 log_parameter()·log_parameters() 메서드로 로깅해요. 시각화는 여러 패널에서 메트릭·파라미터를 조합·집계한 플롯으로 만들어 분석의 폭을 넓힐 수 있고, 실험 상세 페이지의 Metrics 탭과 Hyperparameters 탭에서 각 실행별 요약을 볼 수 있어요.

단일 메트릭/파라미터 로깅

아래 예시는 메트릭 하나를 로깅하는 코드예요. 파라미터도 거의 같은 로직인데, 파라미터는 step 인자만 지원한다는 차이가 있어요:

import comet_ml

# Initialize the Comet Experiment
comet_ml.login()
exp = comet_ml.start()

# Create an example metric
my_metric = 0.01

# Log the metric to Comet
exp.log_metric(name="my_metric", value=my_metric)

step(또는 에폭) 인자를 선택적으로 지정하면 이 메트릭/파라미터가 훈련 중 언제 기록됐는지 추적할 수 있어요.

같은 메트릭을 여러 번 로깅

스텝에 따라 같은 메트릭의 값을 여러 번 찍고 싶을 땐 이렇게 해요. 파라미터도 같은 로직을 쓰되, 메트릭은 epoch 인자도 지원하고 파라미터는 nested_support 인자를 제공한다는 차이가 있어요:

import comet_ml
import random

# Initialize the Comet Experiment
comet_ml.login()
exp = comet_ml.start()

for step in range(0, 1000):
    # Create an example metric
    my_metric = random.random()

    # Log the metric to Comet
    exp.log_metric(name="my_metric", value=my_metric, step=step)

step(또는 에폭) 인자는 로깅 시각이나 실험 시작 이후 경과 시간 기준으로 메트릭/파라미터를 그려 보는 고급 분석에 반드시 필요해요. 훈련 중 메트릭을 자주 로깅하는 건 흔한 일이고, 감쇠하는 학습률처럼 파라미터를 시간에 따라 로깅하고 싶을 때도 있어요.

하지만 주의할 점이 있어요. 값을 15,000개 이상 로깅하면 CometML이 reservoir sampling으로 값을 다운샘플링해서 최대 15,000개까지만 저장해요. 온프레미스 환경이라면 이 설정값을 늘리고 싶을 때 배포 엔지니어에게 문의하면 돼요.

여러 메트릭/파라미터 로깅

여러 메트릭을 한 번에 로깅하는 방법이에요. 여러 파라미터도 같은 로직을 쓰고요, 메트릭은 epoch 인자를 추가로 지원하며 파라미터는 nested_support 인자를 제공해요:

import comet_ml

# Initialize the Comet Experiment
comet_ml.login()
exp = comet_ml.start()

# Create example metrics
metrics = {"my_metric_1": 0.01, "my_metric_2": 0.99}

# Log the metrics to Comet
exp.log_metrics(metrics)

여기에 모든 키에 붙는 prefix 인자를 추가하거나 step 인자를 지정할 수도 있어요.

중첩 파라미터 로깅

사전 구조로 중첩된 파라미터를 로깅하는 예시예요:

import comet_ml

# Initialize the Comet Experiment
comet_ml.login()
exp = comet_ml.start()

# Create example nested parameters
nested_parameters = {
    "my_parameter_1": 0.001,
    "my_parameter_2": {
        "item1": 0.9,
        "item2": 0.999,
        "item3": 1e-8,
    },
    "my_parameter_3": [0.1, 0.5, 0.9],
}

# Log the parameters to Comet
exp.log_parameters(parameters=nested_parameters)

이렇게 로깅한 중첩 파라미터는 Hyperparameters 탭에서 중첩 구조 그대로 표시돼요.