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)