Skip to main content
스윕 정의를 구성하고, 스윕을 생성하고, W&B Python SDK로 스윕 에이전트를 시작하세요.

Sweeps용 스윕 설정 예시

"""
W&B Sweeps의 스윕 설정 예시입니다.

sweep_configuration은 단일 중첩 스윕 설정의 예시입니다.
sweep_configuration_nested는 이중 중첩 스윕 설정의 예시입니다.

다음 항목을 교체하세요:
- 꺾쇠 괄호로 묶인 값을 사용자 고유의 값으로 교체
- 정수 값, 부동 소수점 값, 값 목록을 사용자 고유의 하이퍼파라미터 검색 공간으로 교체
"""

sweep_configuration = {
    "program": "<program_name>",
    "name": "<sweep_name>",
    "method": "<sweep_method>",
    "metric": {
        "name": "<metric_name>",
        "goal": "<goal_type>"
        },
    "parameters": {
        "hyperparameter_1": {
            "search_constraint_1": 0.0001, 
            "search_constraint_2": 0.1
            },
        "hyperparameter_2": {
            "values": [16, 32, 64]
            },
        "hyperparameter_3": {
            "values": [5, 10, 15]
            },
        "hyperparameter_4": {
            "values": ["value_1", "value_2"]
            },
    },
}

## 이중 중첩 스윕 설정 예시
sweep_configuration_nested = {
  "program": "<program_name>",
  "name": "<sweep_name>",
  "method": "<sweep_method>",
  "metric": {
    "name": "<metric_name>",
    "goal": "<goal_type>"
  },
  "parameters": {
    "hyperparameter_1": {
      "values": ["<value_1>", "<value_2>"]
    },
    "hyperparameter_2": {
      "values": [128, 256, 512]
    },
    "hyperparameter_3": {
      "values": [0.3, 0.4, 0.5]
    },
    "hyperparameter_4": {
      "value": 1
    },
    "hyperparameter_5": {
      "distribution": "<distribution_type>",
      "search_constraint_1": 0,
      "search_constraint_2": 0.1
    },
    "nested_category_1": {
      "parameters": {
        "nested_hyperparameter_1": {
          "distribution": "<distribution_type>",
          "search_constraint_1": 0.0,
          "search_constraint_2": 0.9
        },
        "nested_hyperparameter_2": {
          "values": [0.0001, 0.0005, 0.001]
        }
      }
    },
    "nested_category_2": {
      "parameters": {
        "nested_hyperparameter_1": {
          "distribution": "<distribution_type>",
          "search_constraint_1": 0.0,
          "search_constraint_2": 0.9
        },
        "nested_hyperparameter_2": {
          "values": [0.1, 0.2, 0.3]
        }
      }
    },
    "nested_category_3": {
      "parameters": {
        "nested_hyperparameter_1": {
          "distribution": "<distribution_type>",
          "search_constraint_1": 0.5,
          "search_constraint_2": 0.7
        },
        "nested_hyperparameter_2": {
          "values": [0.2, 0.3, 0.4]
        }
      }
    }
  }
}

스윕 설정을 정의하고 초기화한 후 스윕을 시작하세요

"""
스윕 설정을 정의하고, 초기화하여 W&B Sweep을 시작합니다.

sweep_configuration은 단일 중첩 스윕 설정입니다. 이중 중첩 스윕 설정 예시는 sweep_config.py를
참조하세요.
"""
import wandb
import numpy as np
import random
import argparse

def train_one_epoch(epoch, lr, batch_size):
    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=None):
    # 스윕 에이전트에 의해 호출될 때 args는 None이므로,
    # 스윕 설정의 프로젝트를 사용합니다
    project = args.project if args else None
    
    with wandb.init(project=project) as run:
        # `wandb.Run.config` 객체에서 하이퍼파라미터 값을 가져옵니다
        lr = run.config["lr"]
        batch_size = 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, batch_size)
            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()
    parser.add_argument("--project", type=str, default="sweep-example", help="W&B 프로젝트 이름")
    args = parser.parse_args()

    # 스윕 설정 딕셔너리 정의
    sweep_configuration = {
        "method": "random",
        "name": "sweep",
        "metric": {
            "goal": "maximize",
            "name": "val_acc"
            },
        "parameters": {
            "batch_size": {"values": [16, 32, 64]},
            "epochs": {"values": [5, 10, 15]},
            "lr": {"max": 0.1, "min": 0.0001},
        },
    }

    # 설정 딕셔너리를 전달하여 스윕 초기화
    sweep_id = wandb.sweep(sweep=sweep_configuration, project=args.project)

    # 스윕 작업 시작
    wandb.agent(sweep_id, function=main, count=2)

스윕 초기화하기

"""
W&B Sweep를 초기화합니다.

다음을 교체하세요:
- 꺾쇠 괄호로 묶인 값을 본인의 값으로 교체
- sweep_configuration을 본인의 스윕 설정 딕셔너리로 교체. 단일 중첩 및
    이중 중첩 스윕 설정 예시는 sweep_config.py를 참조하세요.
"""

import wandb

# 스윕 설정 예시
sweep_configuration = {
    "method": "<sweep_method>",
    "name": "<sweep_name>",
    "metric": {
        "goal": "<goal>", 
        "name": "<metric_name>"
        },
    "parameters": {
        "hyperparameter_1": {
            "values": [16, 32, 64]
            },
        "hyperparameter_2": {
            "values": [5, 10, 15]
            },
        "hyperparameter_3": {
            "search_constraint_1": 0.1,
            "search_constraint_2": 0.0001
            },
    },
}

sweep_id = wandb.sweep(sweep=sweep_configuration, project="<project>")

스윕 에이전트를 실행하는 스윕 작업 시작하기

"""
스윕 에이전트를 실행하기 위한 스윕 작업을 시작합니다.

다음을 교체하세요:
- 꺾쇠 괄호로 묶인 값을 실제 값으로 교체
- sweep_id를 스윕 초기화 시 반환되는 스윕의 ID로 교체.
    스윕을 초기화하고 sweep_id를 가져오는 방법의 예시는 sweep_initialize.py를 참조하세요.
- count를 스윕에서 실행할 run의 수로 교체
"""

import wandb

sweep_id, count = "<sweep_id>", 10
wandb.agent(sweep_id, count=count)