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