0.13.4 이상에서 wandb.integration.keras 모듈로 사용할 수 있습니다.
W&B Keras 인테그레이션은 다음 콜백을 제공합니다:
WandbMetricsLogger: Experiment Tracking에 이 콜백을 사용하세요. 트레이닝 및 검증 메트릭과 시스템 메트릭을 함께 W&B에 기록합니다.WandbModelCheckpoint: 모델 체크포인트를 W&B Artifacts에 기록하려면 이 콜백을 사용하세요.WandbEvalCallback: 이 기본 콜백은 대화형 시각화를 위해 모델 예측을 W&B Tables에 기록합니다.
Keras 인테그레이션 설치 및 임포트하기
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 | 설명 |
|---|---|
log_freq | (epoch, batch, 또는 int): epoch이면 각 에포크가 끝날 때 메트릭을 로깅합니다. batch이면 각 배치가 끝날 때 메트릭을 로깅합니다. int이면 해당 수만큼의 배치가 끝날 때마다 메트릭을 로깅합니다. 기본값은 epoch입니다. |
initial_global_step | (int): initial_epoch부터 트레이닝을 재개하고 학습률 스케줄러를 사용하는 경우, 학습률을 올바르게 기록하려면 이 인수를 사용하세요. 이는 step_size * initial_step으로 계산할 수 있습니다. 기본값은 0입니다. |
WandbModelCheckpoint를 사용해 모델 체크포인트 저장하기
WandbModelCheckpoint 콜백을 사용하면 Keras 모델(SavedModel 형식) 또는 모델 가중치를 주기적으로 저장하고, 모델 버전 관리를 위해 이를 wandb.Artifact로 W&B에 업로드합니다.
이 콜백은 tf.keras.callbacks.ModelCheckpoint()를 서브클래싱하므로 체크포인트 로직은 부모 콜백이 처리합니다.
이 콜백은 다음을 저장합니다:
- monitor를 기준으로 가장 좋은 성능을 달성한 모델
- 성능과 관계없이 매 에포크가 끝날 때의 모델
- 각 에포크가 끝날 때 또는 고정된 수의 트레이닝 배치 후의 모델
- 모델 가중치만 또는 전체 모델
SavedModel형식 또는.h5형식의 모델
WandbMetricsLogger()와 함께 사용하세요.
WandbModelCheckpoint 레퍼런스
| 매개변수 | 설명 | |
|---|---|---|
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 객체이고, false이면 선택적 tf.saved_model.SaveOptions 객체입니다. | |
initial_value_threshold | (float): 모니터링할 메트릭의 초기 “최적” 값을 나타내는 부동소수점 값입니다. |
N 에포크마다 체크포인트 log
save_freq="epoch")에서는 콜백이 각 에포크가 끝날 때마다 체크포인트를 생성하고 이를 artifact로 upload합니다. 특정 개수의 배치마다 체크포인트를 생성하려면 save_freq를 정수로 설정하세요. N 에포크마다 체크포인트를 생성하려면 train 데이터로더의 카디널리티를 계산해 save_freq에 전달하세요:
TPU 아키텍처에서 체크포인트를 효율적으로 기록하기
UnimplementedError: File system scheme '[local]' not implemented 오류 메시지가 나타날 수 있습니다. 이는 모델 디렉터리(filepath)가 클라우드 저장소 버킷 경로(gs://bucket-name/...)를 사용해야 하고, 이 버킷에 TPU 서버가 접근할 수 있어야 하기 때문입니다. 반면 W&B는 체크포인트 저장에 로컬 경로를 사용하고, 이후 이를 artifact로 업로드합니다.
WandbEvalCallback을 사용해 모델 예측 시각화하기
WandbEvalCallback()는 주로 모델 예측용 Keras 콜백을 만들고, 부차적으로는 데이터셋 시각화에도 사용할 수 있는 추상 기반 클래스입니다.
이 추상 콜백은 데이터셋과 태스크에 구애받지 않습니다. 이를 사용하려면 이 기반 WandbEvalCallback() 콜백 클래스를 상속하고 add_ground_truth 및 add_model_prediction 메서드를 구현하세요.
WandbEvalCallback()는 다음을 위한 메서드를 제공하는 유틸리티 클래스입니다.
- 데이터 및 예측
wandb.Table()인스턴스를 생성합니다. - 데이터와 예측 Tables를
wandb.Artifact()로 로깅합니다. on_train_begin에서 데이터 테이블을 로깅합니다.on_epoch_end에서 예측 테이블을 로깅합니다.
WandbClfEvalCallback을 사용합니다. 이 예제 콜백은 검증 데이터(data_table)를 W&B에 로깅하고, Inference를 수행한 다음, 매 에포크가 끝날 때마다 예측(pred_table)을 W&B에 로깅합니다.
WandbEvalCallback 레퍼런스
| 매개변수 | 설명 |
|---|---|
data_table_columns | (list) data_table의 열 이름 목록 |
pred_table_columns | (list) pred_table의 열 이름 목록 |
메모리 사용량 세부 정보
on_train_begin 방법이 호출되면 data_table을 W&B에 기록합니다. data_table이 W&B Artifact로 업로드되면 data_table_ref 클래스 변수를 통해 이 테이블의 레퍼런스에 접근할 수 있습니다. data_table_ref는 self.data_table_ref[idx][n]처럼 인덱싱할 수 있는 2차원 목록이며, 여기서 idx는 행 번호이고 n은 열 번호입니다. 아래 예제에서 사용 예를 살펴보겠습니다.
콜백 사용자 지정하기
on_train_begin 또는 on_epoch_end 메서드를 재정의할 수 있습니다. N개 배치 후에 샘플을 로깅하려면 on_train_batch_end 메서드를 구현하면 됩니다.
WandbEvalCallback을 상속해 모델 예측 시각화를 위한 콜백을 구현하는 중이며, 명확히 하거나 수정이 필요한 사항이 있다면 issue를 열어 알려주세요.WandbCallback [레거시]
WandbCallback() 클래스를 사용하면 model.fit()에서 추적하는 모든 메트릭과 손실 값을 자동으로 저장할 수 있습니다.
스크립트, Fashion MNIST 예제, 그리고 이 예제가 생성하는 W&B 대시보드가 포함된 예제 repo도 참조하세요.
WandbCallback 클래스는 다양한 로깅 설정 옵션을 지원합니다. 예를 들어 모니터링할 메트릭 지정, 가중치와 그라디언트 추적, training_data 및 validation_data에 대한 예측 로깅 등이 있습니다.
자세한 내용은 keras.WandbCallback 레퍼런스 문서를 참조하세요.
WandbCallback는 다음을 수행합니다.
- Keras가 수집한 모든 메트릭의 이력 데이터를 자동으로 로깅합니다. 여기에는 loss와
keras_model.compile()에 전달된 모든 항목이 포함됩니다. monitor및mode속성으로 정의된 “최적” 트레이닝 step에 연결된 run의 summary 메트릭을 설정합니다. 기본값은val_loss가 가장 작은 에포크입니다.WandbCallback는 기본적으로 가장 좋은epoch에 해당하는 모델을 저장합니다.- 선택적으로 그라디언트 및 파라미터 히스토그램을 로깅합니다.
- 선택적으로 wandb에서 시각화할 수 있도록 트레이닝 및 검증 데이터를 저장합니다.
WandbCallback 레퍼런스
| 인자 | |
|---|---|
monitor | (str) 모니터링할 metric 이름입니다. 기본값은 val_loss입니다. |
mode | (str) {auto, min, max} 중 하나입니다. min - monitor 값이 최소일 때 모델을 저장합니다 max - monitor 값이 최대일 때 모델을 저장합니다 auto - 모델을 언제 저장할지 자동으로 추정합니다(기본값). |
save_model | True - monitor가 이전 모든 에포크보다 향상되면 모델을 저장합니다. 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 또는 generator를 설정해야 합니다. |
validation_steps | (int) validation_data가 generator인 경우, 전체 검증 세트에 대해 generator를 몇 step 동안 실행할지 지정합니다. |
labels | (목록) 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 | (integer) None이면 콜백이 에포크마다 기록합니다. 정수로 설정하면 콜백이 log_batch_frequency배치마다 트레이닝 메트릭을 기록합니다. |
log_best_prefix | (string) None이면 추가 summary 메트릭을 저장하지 않습니다. 문자열로 설정하면 접두사를 모니터링 중인 메트릭과 에포크 앞에 붙여 결과를 summary 메트릭으로 저장합니다. |
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) 평가 결과를 얼마나 자주 log할지 확인하는 값입니다. 기본값은 트레이닝이 끝날 때만 log하도록 0으로 설정됩니다. 매 에포크마다 log하려면 1, 한 에포크씩 건너뛰며 log하려면 2로 설정하는 식입니다. log_evaluation이 False이면 적용되지 않습니다. |
자주 묻는 질문
wandb에서 Keras 멀티프로세싱을 어떻게 사용하나요?
use_multiprocessing=True로 설정하면 다음 오류가 발생할 수 있습니다:
Sequence클래스 생성 시wandb.init(group='...')를 추가합니다.main에서if __name__ == "__main__":를 사용하고 있는지 확인한 다음, 나머지 스크립트 로직을 그 안에 넣으세요.