*실행(run)*은 W&B가 로깅하는 단일 계산 단위입니다. W&B 실행은 전체 프로젝트를 구성하는 원자적 요소로 이해할 수 있습니다. 다시 말해, 각 실행은 모델 학습과 결과 로깅, 하이퍼파라미터 스윕 등과 같은 특정 계산의 기록입니다.
실행을 초기화하고 해당 실행에 로깅하는 대표적인 사용 사례는 다음과 같습니다.
W&B 실행을 초기화하려면 W&B Python SDK에서 wandb.init() 메서드를 호출합니다. 이 메서드는 새로운 실행을 시작하고, 해당 실행에 메트릭, 아티팩트 및 기타 정보를 로깅하는 데 사용할 수 있는 wandb.Run 객체를 반환합니다. 실행 초기화에 대한 자세한 내용은 실행 초기화를 참조하세요.
각 실행 객체에는 실행 ID라고 불리는 고유 식별자가 있습니다. 고유 ID를 직접 지정할 수도 있고 W&B가 무작위로 생성하도록 할 수도 있습니다. 각 실행 객체에는 사람이 읽을 수 있는, 고유하지 않은 실행 이름도 있습니다. 실행 이름을 직접 지정하거나 W&B가 무작위로 생성하도록 할 수 있습니다. 실행을 초기화한 후에도 이름을 변경할 수 있습니다.
W&B는 실행을 project에 로깅합니다. wandb.init(project="")로 실행을 초기화할 때 프로젝트를 지정합니다. 지정한 프로젝트가 존재하지 않으면 W&B가 새 프로젝트를 생성합니다. 프로젝트가 이미 존재하는 경우 W&B는 지정한 프로젝트에 실행을 로깅합니다.
프로젝트 이름을 지정하지 않으면 W&B는 실행을 Uncategorized라는 프로젝트에 저장합니다.
wandb.init()은 실행의 ID, 이름, 설정, 상태 등 실행의 속성을 포함하는 wandb.Run 객체를 반환합니다. wandb.Run.log(), wandb.Run.log_code(), wandb.Run.use_artifact()와 같은 메서드를 사용하여 이 실행 객체에 메트릭, 아티팩트 및 기타 정보를 로깅하세요.
각 실행에는 실행의 현재 상태를 설명하는 상태 값(state)이 있습니다. 가능한 실행 상태의 전체 목록은 실행 상태를 참조하세요.
W&B App에서 실행이 속한 프로젝트 워크스페이스 내에서 실행과 그 속성 보기를 할 수 있습니다. 또한 wandb.Api.Run 객체를 사용하여 프로그래밍 방식으로 실행 속성에 접근할 수 있습니다.
예를 들어, 다음 코드 스니펫은 W&B 실행을 초기화하고 몇 가지 메트릭을 해당 실행에 로깅하는 방법을 보여줍니다.
따라 해보고 싶다면 아래 코드 스니펫의 entity 변수에 자신의 W&B 엔터티를 전달하세요. 엔터티는 W&B 사용자 이름 또는 팀 이름입니다. W&B App 워크스페이스의 URL에서 확인할 수 있습니다. 예를 들어 워크스페이스 URL이 https://wandb.ai/nico/awesome-project라면 엔터티는 nico입니다.
import wandb
entity = "nico" # W&B 엔터티로 교체하세요
project = "awesome-project"
with wandb.init(entity=entity, project=project) as run:
run.log({"accuracy": 0.9, "loss": 0.1})
첫 번째 줄은 W&B Python SDK를 임포트합니다. 두 번째 줄은 엔터티 nico 아래의 프로젝트 awesome-project에 대한 실행을 초기화합니다. 세 번째 줄은 해당 실행에 모델의 정확도와 손실 값을 로깅합니다.
터미널에서 W&B는 다음과 같이 출력합니다:
wandb: Syncing run earnest-sunset-1
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb:
wandb:
wandb: Run history:
wandb: accuracy ▁
wandb: loss ▁
wandb:
wandb: Run summary:
wandb: accuracy 0.9
wandb: loss 0.5
wandb:
wandb: 🚀 View run earnest-sunset-1 at: https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb: ⭐️ View project at: https://wandb.ai/nico/awesome-project
wandb: Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)
wandb: Find logs at: ./wandb/run-20241105_111006-1jx1ud12/logs
W&B는 터미널 출력에 두 개의 URL을 반환합니다. 첫 번째 URL은 특정 실행의 워크스페이스로 이동하고, 두 번째 URL은 프로젝트 페이지로 이동합니다.
하나의 시점에서만 메트릭을 로깅하는 것은 크게 유용하지 않을 수 있습니다. 판별 모델을 학습하는 보다 현실적인 예시는 메트릭을 일정 간격으로 로깅하는 것입니다. 예를 들어, 다음 코드 스니펫을 참고하십시오:
import wandb
import random
config = {
"epochs": 10,
"learning_rate": 0.01,
}
with wandb.init(project="awesome-project", config=config) as run:
print(f"lr: {config['learning_rate']}")
# 훈련 실행을 시뮬레이션합니다
for epoch in range(config['epochs']):
offset = random.random() / 5
acc = 1 - 2**-epoch - random.random() / (epoch + 1) - offset
loss = 2**-epoch + random.random() / (epoch + 1) + offset
print(f"epoch={epoch}, accuracy={acc}, loss={loss}")
run.log({"accuracy": acc, "loss": loss})
학습 스크립트는 wandb.Run.log()를 10번 호출합니다. 스크립트가 wandb.Run.log()를 호출할 때마다 W&B가 해당 에포크의 정확도와 손실을 기록합니다.
터미널에서 다음과 유사한 출력이 표시될 것입니다:
wandb: Syncing run jolly-haze-4
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/pdo5110r
lr: 0.01
epoch=0, accuracy=-0.10070974957523078, loss=1.985328507123956
epoch=1, accuracy=0.2884687745057535, loss=0.7374362314407752
epoch=2, accuracy=0.7347387967382066, loss=0.4402409835486663
epoch=3, accuracy=0.7667969248039795, loss=0.26176963846423457
epoch=4, accuracy=0.7446848791003173, loss=0.24808611724405083
epoch=5, accuracy=0.8035095836268268, loss=0.16169791827329466
epoch=6, accuracy=0.861349032371624, loss=0.03432578493587426
epoch=7, accuracy=0.8794926436276016, loss=0.10331872172219471
epoch=8, accuracy=0.9424839917077272, loss=0.07767793473500445
epoch=9, accuracy=0.9584880427028566, loss=0.10531971149250456
wandb: 🚀 View run jolly-haze-4 at: https://wandb.ai/nico/awesome-project/runs/pdo5110r
wandb: Find logs at: wandb/run-20241105_111816-pdo5110r/logs
W&B는 jolly-haze-4라는 단일 실행 내에서 시뮬레이션된 학습 루프를 캡처합니다. 이는 스크립트가 wandb.init() 메서드를 단 한 번만 호출하기 때문입니다.
이전 출력에서 W&B가 표시한 URL을 복사해 브라우저에 붙여 넣으십시오. 이 URL은 W&B App UI에서 해당 실행의 워크스페이스로 이동합니다. 예를 들어, 다음 이미지는 실행 jolly-haze-4의 워크스페이스를 보여줍니다: