메인 콘텐츠로 건너뛰기
트레이닝 설정을 저장하려면 run의 config 속성을 사용하세요:
  • 하이퍼파라미터
  • 데이터셋 이름이나 모델 유형 등의 입력 설정
  • 실험을 위한 기타 독립 변수
wandb.Run.config 속성을 사용하면 실험을 쉽게 분석하고, 나중에 결과를 재현할 수 있습니다. W&B App에서 설정 값을 기준으로 그룹화하고, 서로 다른 W&B run의 설정을 비교하고, 각 트레이닝 설정이 결과에 어떤 영향을 미치는지 평가할 수 있습니다. config 속성은 여러 딕셔너리와 유사한 객체를 조합해 구성할 수 있는 딕셔너리와 유사한 객체입니다.
loss나 accuracy 같은 출력 메트릭 또는 종속 변수를 저장하려면 wandb.Run.config 대신 wandb.Run.log()를 사용하세요.

실험 설정하기

설정은 일반적으로 트레이닝 스크립트 초반에 정의합니다. 하지만 머신 러닝 워크플로는 다양할 수 있으므로, 트레이닝 스크립트 초반에 반드시 설정을 정의해야 하는 것은 아닙니다. 설정 변수 이름에는 마침표(.) 대신 대시(-)나 밑줄(_)을 사용하세요. 스크립트에서 루트 아래의 wandb.Run.config 키에 접근하는 경우에는 속성 접근 구문 config.key.value 대신 딕셔너리 접근 구문 ["key"]["value"]를 사용하세요. 다음 섹션에서는 실험 설정을 정의하는 일반적인 여러 시나리오를 설명합니다.

초기화 시 설정 지정하기

데이터를 W&B Run으로 동기화하고 기록하는 백그라운드 프로세스를 생성하려면, 스크립트 시작 부분에서 wandb.init() API를 호출할 때 딕셔너리를 전달하세요. 다음 코드 스니펫은 설정 값이 포함된 Python 딕셔너리를 정의하는 방법과, W&B Run을 초기화할 때 해당 딕셔너리를 인수로 전달하는 방법을 보여줍니다.
import wandb

# 설정 딕셔너리 객체 정의
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# W&B 초기화 시 설정 딕셔너리 전달
with wandb.init(project="config_example", config=config) as run:
    ...
config로 중첩된 딕셔너리를 전달하면 W&B는 이름을 점(.)으로 구분해 평탄화합니다. Python에서 다른 딕셔너리에 접근하는 것과 마찬가지로 딕셔너리 값에 접근할 수 있습니다:
# 키를 인덱스 값으로 사용하여 값에 액세스
hidden_layer_sizes = run.config["hidden_layer_sizes"]
kernel_sizes = run.config["kernel_sizes"]
activation = run.config["activation"]

# Python 딕셔너리 get() 메서드
hidden_layer_sizes = run.config.get("hidden_layer_sizes")
kernel_sizes = run.config.get("kernel_sizes")
activation = run.config.get("activation")
Developer Guide와 예제 전반에서는 설정 값을 별도의 변수에 복사합니다. 이 step은 선택 사항이며, 가독성을 높이기 위한 것입니다.

argparse로 설정하기

argparse 객체를 사용해 설정할 수 있습니다. argparse는 인자 파서(argument parser)의 줄임말로, Python 3.2 이상에서 제공되는 표준 라이브러리 모듈입니다. 명령줄 인수의 유연성과 강력한 기능을 활용하는 스크립트를 쉽게 작성할 수 있게 해줍니다. 이 방법은 명령줄에서 실행한 스크립트의 결과를 추적할 때 유용합니다. 다음 Python 스크립트는 파서 객체를 사용해 실험 설정을 정의하고 설정하는 방법을 보여줍니다. 함수 train_one_epochevaluate_one_epoch는 이 예시에서 트레이닝 루프를 시뮬레이션하기 위해 제공됩니다:
# config_experiment.py
import argparse
import random

import numpy as np
import wandb


# 트레이닝 및 평가 데모 코드
def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss


def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss


def main(args):
    # W&B Run 시작
    with wandb.init(project="config_example", config=args) as run:
        # 설정 딕셔너리에서 값을 가져와 가독성을 위해
        # 변수에 저장
        lr = run.config["learning_rate"]
        bs = run.config["batch_size"]
        epochs = run.config["epochs"]

        # 트레이닝 시뮬레이션 및 W&B에 값 로깅
        for epoch in np.arange(1, epochs):
            train_acc, train_loss = train_one_epoch(epoch, lr, bs)
            val_acc, val_loss = evaluate_one_epoch(epoch)

            run.log(
                {
                    "epoch": epoch,
                    "train_acc": train_acc,
                    "train_loss": train_loss,
                    "val_acc": val_acc,
                    "val_loss": val_loss,
                }
            )


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )

    parser.add_argument("-b", "--batch_size", type=int, default=32, help="Batch size")
    parser.add_argument(
        "-e", "--epochs", type=int, default=50, help="Number of training epochs"
    )
    parser.add_argument(
        "-lr", "--learning_rate", type=int, default=0.001, help="Learning rate"
    )

    args = parser.parse_args()
    main(args)

스크립트 전체에서 설정하기

스크립트 전체에 걸쳐 설정 객체에 파라미터를 더 추가할 수 있습니다. 다음 코드 스니펫는 설정 객체에 새 키-값 쌍을 추가하는 방법을 보여줍니다.
import wandb

# 설정 딕셔너리 객체 정의
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# W&B를 초기화할 때 설정 딕셔너리 전달
with wandb.init(project="config_example", config=config) as run:
    # W&B 초기화 후 설정 업데이트
    run.config["dropout"] = 0.2
    run.config.epochs = 4
    run.config["batch_size"] = 32
한 번에 여러 값을 업데이트할 수 있습니다:
run.config.update({"lr": 0.1, "channels": 16})

run이 종료된 후 설정하기

W&B Public API를 사용해 완료된 run의 설정을 업데이트합니다. API에 entity, 프로젝트 이름, run의 ID를 제공해야 합니다. 이 정보는 run 객체 또는 W&B App에서 확인할 수 있습니다:
with wandb.init() as run:
    ...

# 현재 스크립트 또는 노트북에서 시작된 경우 Run 객체에서 다음 값을 찾거나,
# W&B App UI에서 복사할 수 있습니다.
username = run.entity
project = run.project
run_id = run.id

# api.run()은 wandb.init()과 다른 유형의 객체를 반환합니다.
api = wandb.Api()
api_run = api.run(f"{username}/{project}/{run_id}")
api_run.config["bar"] = 32
api_run.update()

설정 값 강조 표시

run 개요 페이지 상단의 References 섹션에 설정 키를 고정하세요. Python SDK에서 wandb.Run.pin_config_keys를 사용해 하나 이상의 설정 키를 고정할 수 있습니다. 예를 들어, Grafana 대시보드를 사용해 트레이닝 runs를 모니터링하는 경우 대시보드 URL을 설정에 추가하고 grafana_url 키를 고정하세요:
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
    "grafana_url": "[Grafana dashboard](https://my-grafana-instance.com/)"
}

with wandb.init(config=config) as run:
    # "grafana_url" 설정 키를 References 섹션에 추가합니다.
    run.pin_config_keys(["grafana_url"])

absl.FLAGS

absl 플래그를 전달할 수도 있습니다.
flags.DEFINE_string("model", None, "model to run")  # name, default, help

run.config.update(flags.FLAGS)  # absl 플래그를 설정에 추가

파일 기반 설정

run 스크립트와 같은 디렉터리에 config-defaults.yaml라는 이름의 파일을 두면, run이 파일에 정의된 키-값 쌍을 자동으로 읽어 wandb.Run.config에 전달합니다. 다음 코드 스니펫은 config-defaults.yaml YAML 파일의 예를 보여줍니다:
batch_size:
  desc: Size of each mini-batch
  value: 32
wandb.init()config 인수에서 값을 업데이트하면 config-defaults.yaml에서 자동으로 로드되는 기본값을 재정의할 수 있습니다. 예를 들면 다음과 같습니다:
import wandb

# 맞춤형 값을 전달하여 config-defaults.yaml 재정의
with wandb.init(config={"epochs": 200, "batch_size": 64}) as run:
    ...
config-defaults.yaml 이외의 설정 파일을 로드하려면 명령줄 인수 --configs를 사용하고 파일 경로를 지정하세요:
python train.py --configs other-config.yaml

파일 기반 설정 사용 예

run에 대한 메타데이터가 일부 들어 있는 YAML 파일이 있고, Python 스크립트에는 하이퍼파라미터 딕셔너리가 있다고 가정해 보겠습니다. 둘 다 중첩된 config 객체에 저장할 수 있습니다:
hyperparameter_defaults = dict(
    dropout=0.5,
    batch_size=100,
    learning_rate=0.001,
)

config_dictionary = dict(
    yaml=my_yaml_file,
    params=hyperparameter_defaults,
)

with wandb.init(config=config_dictionary) as run:
    ...

W&B App에서 설정 값 보기

run의 Overview 탭에 있는 Config 섹션에서 설정 값을 확인할 수 있습니다. 설정 값을 고정하면 References 섹션에서도 확인할 수 있습니다.
  1. W&B App에서 프로젝트로 이동합니다.
  2. 설정 값을 확인할 run을 클릭합니다.
  3. Overview 탭을 선택합니다.
  4. Config 섹션까지 스크롤합니다.
  5. (선택) JSON 형식으로 설정 값을 보려면 View raw data를 클릭합니다.
원시 JSON 형식은 설정 값, 로깅된 메트릭 또는 summary 값을 사용해 선형 플롯을 생성하거나 변환하는 표현식을 작성할 때 유용합니다. 자세한 내용은 Expressions를 참조하세요.

TensorFlow v1 플래그

TensorFlow 플래그를 wandb.Run.config 객체에 직접 전달할 수 있습니다.
with wandb.init() as run:
    run.config.epochs = 4

    flags = tf.app.flags
    flags.DEFINE_string("data_dir", "/tmp/data")
    flags.DEFINE_integer("batch_size", 128, "Batch size.")
    run.config.update(flags.FLAGS)  # TensorFlow 플래그를 설정에 추가합니다