0.13.4 이상에서 wandb.integration.keras 모듈로 제공됩니다.
W&B Keras 인테그레이션은 다음 콜백을 제공합니다:
WandbMetricsLogger: 이 콜백은 Experiment Tracking에 사용합니다. 트레이닝 및 검증 메트릭과 시스템 메트릭을 W&B에 로깅합니다.WandbModelCheckpoint: 이 콜백은 모델 체크포인트를 W&B Artifacts에 로깅하는 데 사용합니다.WandbEvalCallback: 이 기본 콜백은 모델 예측을 W&B Tables에 로깅하여 인터랙티브하게 시각화할 수 있도록 합니다.
Keras 인테그레이션 설치 및 import
wandb.integration.keras에서 필요한 클래스를 임포트하세요:
WandbMetricsLogger로 실험 추적하기
wandb.integration.keras.WandbMetricsLogger()는 on_epoch_end, on_batch_end 등과 같은 콜백 메서드가 인자로 받는 Keras의 logs 사전을 자동으로 로깅합니다.
아래 예시는 Keras 워크플로에서 WandbMetricsLogger()를 사용하는 방법을 보여줍니다. 먼저 원하는 옵티마이저, 손실 함수, 메트릭으로 모델을 컴파일합니다. 그다음 wandb.init()을 사용해 W&B run을 초기화합니다. 마지막으로 WandbMetricsLogger() 콜백을 model.fit()에 전달합니다.
loss, accuracy, top@5_accuracy와 같은 트레이닝 및 검증 메트릭을 W&B에 기록합니다. 또한 다음도 기록합니다:
WandbMetricsLogger 레퍼런스
| Parameter | Description |
|---|---|
log_freq | (epoch, batch, 또는 int): epoch인 경우 각 에포크가 끝날 때 메트릭을 로깅합니다. batch인 경우 각 배치가 끝날 때 메트릭을 로깅합니다. int인 경우 지정한 수만큼의 배치가 끝날 때마다 메트릭을 로깅합니다. 기본값은 epoch입니다. |
initial_global_step | (int): 특정 initial_epoch에서 트레이닝을 재개하고 learning rate scheduler를 사용하는 경우, 학습률을 올바르게 로깅하기 위해 이 인수를 사용합니다. 이는 step_size * initial_step으로 계산할 수 있습니다. 기본값은 0입니다. |
WandbModelCheckpoint를 사용하여 모델 체크포인트 저장하기
WandbModelCheckpoint 콜백을 사용하면 Keras 모델(SavedModel 포맷) 또는 모델 가중치를 주기적으로 저장하고 이를 모델 버저닝을 위해 wandb.Artifact로 W&B에 업로드할 수 있습니다.
이 콜백은 tf.keras.callbacks.ModelCheckpoint()를 상속하므로, 체크포인트 처리 로직은 상위 콜백에서 담당합니다.
이 콜백은 다음을 저장합니다:
- 모니터 기준으로 최고 성능을 달성한 모델
- 성능과 관계없이 매 에포크 종료 시점의 모델
- 각 에포크 종료 시점 또는 일정 개수의 트레이닝 배치마다의 모델
- 모델 가중치만 또는 전체 모델
SavedModel포맷 또는.h5포맷으로 저장된 모델
WandbMetricsLogger()와 함께 사용하세요.
WandbModelCheckpoint 레퍼런스
| Parameter | Description | |
|---|---|---|
filepath | (str): 모델 파일을 저장할 경로. | \ |
monitor | (str): 모니터링할 메트릭 이름. | |
verbose | (int): 출력 상세 수준, 0 또는 1. 모드 0은 메시지를 출력하지 않고, 모드 1은 콜백이 동작을 수행할 때 메시지를 출력한다. | |
save_best_only | (Boolean): save_best_only=True인 경우, monitor 및 mode 속성에 따라 최신 모델이나 가장 좋은 것으로 간주되는 모델만 저장한다. | |
save_weights_only | (Boolean): True이면 모델의 가중치만 저장한다. | |
mode | (auto, min, 또는 max): val_acc의 경우 max, val_loss의 경우 min으로 설정하고, 다른 메트릭도 이와 같은 방식으로 설정한다. | |
save_freq | (“epoch” 또는 int): "epoch"를 사용하는 경우 콜백은 각 에포크가 끝난 후 모델을 저장한다. 정수를 사용하는 경우 콜백은 해당 배치 수가 끝날 때 모델을 저장한다. val_acc 또는 val_loss와 같은 검증 메트릭을 모니터링할 때는 이러한 메트릭이 에포크 종료 시에만 계산되므로 save_freq를 반드시 "epoch"로 설정해야 한다. | |
options | (str): save_weights_only가 True인 경우 선택적인 tf.train.CheckpointOptions 객체, save_weights_only가 False인 경우 선택적인 tf.saved_model.SaveOptions 객체. | |
initial_value_threshold | (float): 모니터링할 메트릭의 초기 “best” 값(부동소수점). |
N 에포크마다 체크포인트 기록하기
save_freq="epoch") 콜백은 매 에포크가 끝날 때 체크포인트를 생성하고 이를 아티팩트로 업로드합니다. 특정 배치 수마다 체크포인트를 생성하려면 save_freq를 정수로 설정하세요. N 에포크마다 체크포인트를 생성하려면 train 데이터로더의 카디널리티를 계산해 그 값을 save_freq에 전달합니다:
TPU 아키텍처에서 체크포인트를 효율적으로 로깅하기
UnimplementedError: File system scheme '[local]' not implemented 오류 메시지가 발생할 수 있습니다. 이는 모델 디렉터리(filepath)가 클라우드 스토리지 버킷 경로(gs://bucket-name/...)를 사용해야 하며, 이 버킷이 TPU 서버에서 접근 가능해야 하기 때문입니다. 반면 W&B는 체크포인트를 위해 로컬 경로를 사용하고, 그 경로에 저장된 체크포인트가 아티팩트로 업로드됩니다.
WandbEvalCallback을(를) 사용하여 모델 예측 시각화하기
WandbEvalCallback()은(는) 주로 모델 예측을 위해, 그리고 부차적으로는 데이터셋 시각화를 위한 Keras 콜백을 만들기 위한 추상 기본 클래스입니다.
이 추상 콜백은 데이터셋과 작업에 독립적입니다. 이를 사용하려면 기본 WandbEvalCallback() 콜백 클래스를 상속받고 add_ground_truth 및 add_model_prediction 메서드를 구현하십시오.
WandbEvalCallback()은(는) 다음 메서드를 제공하는 유틸리티 클래스입니다:
- 데이터 및 예측에 대한
wandb.Table()인스턴스를 생성합니다. - 데이터 및 예측 테이블을
wandb.Artifact()로 로깅합니다. on_train_begin에서 데이터 테이블을 로깅합니다.on_epoch_end에서 예측 테이블을 로깅합니다.
WandbClfEvalCallback을 사용합니다. 이 예시 콜백은 검증 데이터(data_table)를 W&B에 로깅하고, 추론을 수행한 후 매 에포크가 끝날 때마다 예측(pred_table)을 W&B에 로깅합니다.
WandbEvalCallback 레퍼런스
| Parameter | Description |
|---|---|
data_table_columns | (list) data_table의 열 이름 목록 |
pred_table_columns | (list) pred_table의 열 이름 목록 |
메모리 사용량 상세 정보
on_train_begin 메서드가 호출될 때 data_table을 W&B에 로깅합니다. 이 테이블이 W&B Artifact로 업로드되면, 나중에 data_table_ref 클래스 변수를 통해 접근할 수 있는 이 테이블의 참조를 얻게 됩니다. data_table_ref는 2차원 리스트이며, self.data_table_ref[idx][n]처럼 인덱싱할 수 있습니다. 여기서 idx는 행 번호이고 n은 열 번호입니다. 아래 예시에서 사용 방법을 살펴보겠습니다.
콜백 사용자 지정
on_train_begin 또는 on_epoch_end 메서드를 오버라이드하여 보다 세밀하게 제어할 수 있습니다. N개의 배치마다 샘플을 로깅하고 싶다면 on_train_batch_end 메서드를 구현하면 됩니다.
WandbEvalCallback을 상속해 모델 예측 시각화를 위한 콜백을 구현하는 과정에서 명확히 해야 할 점이 있거나 수정이 필요하다면, issue를 생성해 알려 주세요.WandbCallback [legacy]
WandbCallback() 클래스를 사용하여 model.fit()에서 추적되는 모든 메트릭과 손실 값을 자동으로 저장할 수 있습니다.
예제 레포지토리에서 스크립트를 확인하세요. 여기에는 Fashion MNIST 예제와 해당 예제가 생성하는 W&B Dashboard가 포함되어 있습니다.
WandbCallback 클래스는 다양한 로깅 설정 옵션을 지원합니다. 모니터링할 메트릭 지정, 가중치와 그래디언트 추적, training_data 및 validation_data에 대한 예측 로깅 등 여러 기능을 사용할 수 있습니다.
자세한 내용은 keras.WandbCallback에 대한 레퍼런스 문서를 참고하세요.
WandbCallback은 다음을 수행합니다.
- Keras가 수집하는 모든 메트릭(손실 및
keras_model.compile()에 전달된 항목)을 자동으로 히스토리 데이터로 로깅합니다. monitor및mode속성으로 정의되는 “최적” 트레이닝 스텝에 해당하는 run에 대해 요약 메트릭을 설정합니다. 기본값은val_loss가 최소인 에포크입니다.WandbCallback은 기본적으로 최적의epoch에 해당하는 모델을 저장합니다.- 선택적으로 그래디언트와 파라미터 히스토그램을 로깅합니다.
- 선택적으로 wandb에서 시각화할 수 있도록 트레이닝 및 검증 데이터를 저장합니다.
WandbCallback 레퍼런스
| 매개변수 | |
|---|---|
monitor | (str) 모니터링할 메트릭의 이름입니다. 기본값은 val_loss입니다. |
mode | (str) {auto, min, max} 중 하나. min - 모니터링 지표 값이 최소일 때 모델을 저장합니다 max - 모니터링 지표 값이 최대일 때 모델을 저장합니다 auto - 모델을 언제 저장할지 자동으로 판단합니다 (기본값). |
save_model | True - 모니터링하는 값이 이전 모든 에포크의 값보다 클 때 모델을 저장합니다 |
| False - 모델을 저장하지 않습니다 | |
save_graph | (boolean) True인 경우 모델 그래프를 wandb에 저장합니다(기본값: True). |
save_weights_only | (boolean) True인 경우, 모델의 가중치(model.save_weights(filepath))만 저장합니다. 그렇지 않으면 전체 모델을 저장합니다). |
log_weights | (boolean) True인 경우 모델 각 레이어의 가중치에 대한 히스토그램을 저장합니다. |
log_gradients | (boolean) True인 경우 트레이닝 중 그래디언트의 히스토그램을 로깅합니다. |
training_data | (tuple) model.fit에 전달되는 것과 동일한 형식 (X,y)입니다. 그래디언트를 계산하는 데 필요하며, log_gradients가 True인 경우에는 필수입니다. |
validation_data | (tuple) model.fit에 전달되는 (X,y)와 동일한 형식입니다. wandb가 시각화할 데이터셋입니다. 이 필드를 설정하면 에포크마다 wandb가 소량의 예측을 수행하고, 그 결과를 나중에 시각화할 수 있도록 저장합니다. |
generator | (generator) wandb가 시각화할 검증 데이터를 반환하는 제너레이터입니다. 이 제너레이터는 (X,y) 형태의 튜플을 반환해야 합니다. wandb에서 특정 데이터 예시를 시각화하려면 validate_data 또는 제너레이터 중 하나를 설정해야 합니다. |
validation_steps | (int) validation_data가 제너레이터인 경우, 전체 검증 세트를 모두 처리하기 위해 제너레이터를 실행할 스텝 수입니다. |
labels | (list) wandb로 데이터를 시각화하는 경우, 다중 클래스 분류기를 만들 때 이 레이블 리스트를 사용하면 숫자 출력 값을 이해하기 쉬운 문자열로 변환할 수 있습니다. 이진 분류기의 경우, 두 개의 레이블이 들어 있는 리스트 [label for false, label for true]를 전달할 수 있습니다. validate_data와 generator가 모두 false이면 아무 작업도 수행하지 않습니다. |
predictions | (int) 각 에포크마다 시각화를 위해 생성할 예측의 개수입니다. 최대값은 100입니다. |
input_type | (string) 시각화를 위한 모델 입력 타입입니다. 다음 중 하나일 수 있습니다: (image, images, segmentation_mask). |
output_type | (string) 시각화를 돕기 위한 모델 출력의 타입입니다. 다음 중 하나일 수 있습니다: (image, images, segmentation_mask). |
log_evaluation | (boolean) True인 경우, 검증 데이터와 각 에포크마다의 모델 예측을 포함하는 Table을 저장합니다. 자세한 내용은 validation_indexes, validation_row_processor, output_row_processor를 참조하세요. |
class_colors | ([float, float, float]) 입력 또는 출력이 세그멘테이션 마스크인 경우, 각 클래스에 대해 RGB 튜플(각 값의 범위 0–1)을 담는 배열입니다. |
log_batch_frequency | (정수) None이면 콜백이 매 에포크마다 로그를 기록합니다. 정수로 설정하면 콜백이 log_batch_frequency개 배치마다 트레이닝 메트릭을 기록합니다. |
log_best_prefix | (string) None이면 추가 요약 메트릭을 저장하지 않습니다. 문자열로 설정하면, 해당 접두사를 모니터링 중인 메트릭 이름과 에포크 앞에 붙여 결과를 요약 메트릭으로 저장합니다. |
validation_indexes | ([wandb.data_types._TableLinkMixin]) 각 검증 예제와 연결할 인덱스 키들의 정렬된 목록입니다. log_evaluation이 True이고 validation_indexes를 제공하면 검증 데이터에 대한 Table을 생성하지 않습니다. 대신 각 예측을 TableLinkMixin이 나타내는 행과 연결합니다. 행 키 목록을 얻으려면 Table.get_index()를 사용하세요. |
validation_row_processor | (Callable) 검증 데이터에 적용하는 함수로, 주로 데이터를 시각화하는 데 사용됩니다. 이 함수는 ndx (int)와 row (dict)를 인자로 받습니다. 모델에 입력이 하나만 있는 경우 row["input"]에는 해당 행의 입력 데이터가 들어 있고, 그렇지 않은 경우 입력 슬롯의 이름들이 들어 있습니다. fit 함수가 단일 타깃만 받는다면 row["target"]에는 해당 행의 타깃 데이터가 들어 있고, 그렇지 않은 경우 출력 슬롯의 이름들이 들어 있습니다. 예를 들어 입력 데이터가 단일 배열인 경우, 데이터를 Image로 시각화하려면 프로세서로 lambda ndx, row: {"img": wandb.Image(row["input"])} 를 제공하면 됩니다. log_evaluation이 False이거나 validation_indexes가 제공된 경우에는 무시됩니다. |
output_row_processor | (Callable) validation_row_processor와 동일하게 동작하지만 모델의 출력에 적용됩니다. row["output"]에는 모델 출력 결과가 들어 있습니다. |
infer_missing_processors | (Boolean) 누락된 경우 validation_row_processor 및 output_row_processor 를 추론할지 여부를 결정합니다. 기본값은 True입니다. labels 를 제공하면, W&B가 적절한 경우 분류용 프로세서를 추론하려고 시도합니다. |
log_evaluation_frequency | (int) 평가 결과를 얼마나 자주 기록할지 결정합니다. 기본값은 0이며 트레이닝이 끝날 때 한 번만 기록합니다. 1로 설정하면 매 에포크마다, 2로 설정하면 한 에포크씩 건너뛰어 기록하는 식입니다. log_evaluation이 False인 경우에는 아무 효과가 없습니다. |
자주 묻는 질문
Keras의 멀티프로세싱을 wandb와 함께 사용하려면 어떻게 해야 하나요?
use_multiprocessing=True를 설정하면 다음과 같은 오류가 발생할 수 있습니다:
Sequence클래스 생성 시 다음을 추가합니다:wandb.init(group='...').main에서if __name__ == "__main__":을(를) 사용하고, 나머지 스크립트 로직을 해당 블록 안에 넣었는지 확인하세요.