W&B Report 및 Workspace API는 퍼블릭 프리뷰 단계입니다.
App UI에서 대화형으로 리포트를 편집하거나 W&B SDK를 사용해 프로그래밍 방식으로 리포트를 편집합니다.
리포트는 _블록_으로 구성됩니다. 블록은 리포트의 본문을 이룹니다. 각 블록 안에 텍스트, 이미지, 임베디드 시각화, 실험과 실행에서 생성된 플롯, 패널 그리드를 추가할 수 있습니다.
_패널 그리드_는 패널과 _실행 집합(run set)_을 포함하는 특정 유형의 블록입니다. 실행 집합은 W&B의 프로젝트에 기록된 실행들의 모음입니다. 패널은 실행 집합 데이터의 시각화입니다.
리포트를 프로그래밍 방식으로 편집하려면 W&B Python SDK 외에 W&B Report 및 Workspace API인 wandb-workspaces가 설치되어 있는지 확인하세요:pip install wandb wandb-workspaces
각 패널 그리드에는 실행 집합과 패널 집합이 있습니다. 섹션 하단의 실행 집합은 그리드의 패널에 어떤 데이터가 표시될지 제어합니다. 다른 실행 집합에서 데이터를 가져오는 차트를 추가하려면 새 패널 그리드를 생성합니다.
W&B App
Report and Workspace API
리포트에서 슬래시(/)를 입력하면 드롭다운 메뉴가 표시됩니다. Add panel을 선택하여 패널을 추가합니다. 선형 플롯(line plot), 산점도(scatter plot), 평행 좌표(parallel coordinates) 차트 등 W&B에서 지원하는 모든 패널을 추가할 수 있습니다. SDK를 사용해 리포트에 플롯을 프로그래밍 방식으로 추가할 수 있습니다. 하나 이상의 플롯 또는 차트 객체 목록을 PanelGrid 공개 API 클래스의 panels 파라미터에 전달합니다. 각각에 해당하는 Python 클래스으로 플롯 또는 차트 객체를 생성합니다.다음 예제에서는 선형 플롯과 산점도를 생성하는 방법을 보여줍니다.import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(
project="report-editing",
title="An amazing title",
description="A descriptive description.",
)
blocks = [
wr.PanelGrid(
panels=[
wr.LinePlot(x="time", y="velocity"),
wr.ScatterPlot(x="time", y="acceleration"),
]
)
]
report.blocks = blocks
report.save()
리포트에 프로그래밍 방식으로 추가할 수 있는 플롯과 차트에 대한 자세한 내용은 wr.panels를 참조하십시오.
App UI 또는 W&B SDK를 사용해 프로젝트에서 실행 세트를 대화형으로 추가합니다.
W&B App
Report 및 Workspace API
리포트에서 슬래시(/)를 입력하면 드롭다운 메뉴가 표시됩니다. 드롭다운에서 Panel Grid를 선택합니다. 그러면 리포트가 생성된 프로젝트에서 실행 세트가 자동으로 가져와집니다.패널을 리포트에 가져오면 실행 이름은 프로젝트의 이름을 그대로 사용합니다. 리포트에서 독자가 더 잘 이해할 수 있도록 선택적으로 실행 이름을 변경할 수 있습니다. 실행 이름은 해당 개별 패널에서만 변경됩니다. 동일한 리포트 내에서 패널을 복제하면, 복제된 패널에서도 실행 이름이 변경됩니다.
-
리포트에서 연필 아이콘을 클릭해 리포트 편집기를 엽니다.
-
실행 세트에서 이름을 바꿀 실행을 찾습니다. 리포트 이름 위에 마우스를 올린 다음 세 개의 세로 점을 클릭합니다. 다음 옵션 중 하나를 선택한 후 양식을 제출합니다.
- Rename run for project: 프로젝트 전체에서 실행 이름을 변경합니다. 새 무작위 이름을 생성하려면 필드를 비워 두세요.
- Rename run for panel grid: 다른 컨텍스트의 기존 이름은 유지하면서 리포트에서만 실행 이름을 변경합니다. 새 무작위 이름 생성은 지원되지 않습니다.
-
Publish report를 클릭합니다.
wr.Runset() 및 wr.PanelGrid 클래스를 사용해 프로젝트에서 실행 세트를 추가할 수 있습니다. 다음 절차에서는 실행 세트를 추가하는 방법을 설명합니다.
wr.Runset() 객체 인스턴스를 생성합니다. project 파라미터에는 실행 세트를 포함하는 프로젝트 이름을, entity 파라미터에는 해당 프로젝트를 소유한 엔터티를 제공합니다.
wr.PanelGrid() 객체 인스턴스를 생성합니다. 하나 이상의 실행 세트 객체 리스트를 run sets 파라미터로 전달합니다.
- 하나 이상의
wr.PanelGrid() 객체 인스턴스를 리스트에 저장합니다.
- 리포트 인스턴스의
blocks 속성을 패널 그리드 인스턴스 리스트로 업데이트합니다.
import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(
project="report-editing",
title="An amazing title",
description="A descriptive description.",
)
panel_grids = wr.PanelGrid(
runsets=[wr.RunSet(project="<project-name>", entity="<entity-name>")]
)
report.blocks = [panel_grids]
report.save()
원하면 한 번의 SDK 호출로 실행 세트와 패널을 함께 추가할 수 있습니다:import wandb
report = wr.Report(
project="report-editing",
title="An amazing title",
description="A descriptive description.",
)
panel_grids = wr.PanelGrid(
panels=[
wr.LinePlot(
title="line title",
x="x",
y=["y"],
range_x=[0, 100],
range_y=[0, 100],
log_x=True,
log_y=True,
title_x="x axis title",
title_y="y axis title",
ignore_outliers=True,
groupby="hyperparam1",
groupby_aggfunc="mean",
groupby_rangefunc="minmax",
smoothing_factor=0.5,
smoothing_type="gaussian",
smoothing_show_original=True,
max_runs_to_show=10,
plot_type="stacked-area",
font_size="large",
legend_position="west",
),
wr.ScatterPlot(
title="scatter title",
x="y",
y="y",
# z='x',
range_x=[0, 0.0005],
range_y=[0, 0.0005],
# range_z=[0,1],
log_x=False,
log_y=False,
# log_z=True,
running_ymin=True,
running_ymean=True,
running_ymax=True,
font_size="small",
regression=True,
),
],
runsets=[wr.RunSet(project="<project-name>", entity="<entity-name>")],
)
report.blocks = [panel_grids]
report.save()
리포트는 프로젝트의 최신 데이터를 표시하기 위해 실행 세트를 자동으로 업데이트합니다. 고정 기능을 사용하면 리포트에서 해당 실행 세트를 보존할 수 있습니다. 실행 세트를 고정하면 리포트 내 실행 세트의 상태가 특정 시점 그대로 유지됩니다.
리포트를 볼 때 실행 세트를 고정하려면 Filter 버튼 근처 패널 그리드 영역에 있는 눈송이 아이콘을 클릭합니다.
Workspace and Reports API를 사용하여 실행 세트를 프로그래밍 방식으로 그룹화할 수 있습니다.
실행 세트에 포함된 실행을 config 값, 실행 메타데이터, 또는 요약(summary) 지표를 기준으로 그룹화할 수 있습니다. 아래 표는 사용 가능한 그룹화 방법과 각 방법에서 사용할 수 있는 키를 나열합니다.
| Grouping Method | Description | Available keys |
|---|
| Config values | config 값으로 실행 그룹화 | wandb.init(config=)의 config 매개변수에 지정한 값 |
| Run metadata | 실행 메타데이터로 실행 그룹화 | State, Name, JobType |
| Summary metrics | 요약(summary) 지표로 실행 그룹화 | wandb.Run.log()을 사용해 실행에 기록하는 값 |
유사한 설정을 가진 실행들을 비교하려면 config 값으로 실행을 그룹화합니다. Config 값은 실행 설정 (wandb.init(config=)) 에서 지정하는 매개변수입니다. 실행을 config 값으로 그룹화하려면 config.<key> 구문을 사용합니다. 여기서 <key> 는 그룹화에 사용할 config 값의 이름입니다.
예를 들어, 다음 코드 스니펫은 먼저 group 에 대한 config 값을 가진 실행을 초기화한 다음, 보고서에서 group config 값을 기준으로 실행을 그룹화합니다. <entity> 와 <project> 값은 각각 여러분의 W&B 엔터티와 프로젝트 이름으로 바꾸십시오.
import wandb
import wandb_workspaces.reports.v2 as wr
entity = "<entity>"
project = "<project>"
for group in ["control", "experiment_a", "experiment_b"]:
for i in range(3):
with wandb.init(entity=entity, project=project, group=group, config={"group": group, "run": i}, name=f"{group}_run_{i}") as run:
# 간단한 학습을 시뮬레이션합니다
for step in range(100):
run.log({
"acc": 0.5 + (step / 100) * 0.3 + (i * 0.05),
"loss": 1.0 - (step / 100) * 0.5
})
Python 스크립트나 노트북에서 config.group 값을 기준으로 실행을 그룹화할 수 있습니다.
runset = wr.Runset(
project=project,
entity=entity,
groupby=["config.group"] # "group" config 값으로 그룹화
)
이전 예시를 계속해서, 그룹화된 실행 세트를 사용해 보고서를 생성할 수 있습니다:
report = wr.Report(
entity=entity,
project=project,
title="Grouped Runs Example",
)
report.blocks = [
wr.PanelGrid(
runsets=[runset],
)
]
report.save()
실행의 이름(Name), 상태(State), 또는 작업 유형(JobType)을 기준으로 실행을 그룹화할 수 있습니다.
이전 예제에 이어, 다음 코드 스니펫을 사용해 실행을 이름별로 그룹화할 수 있습니다:
runset = wr.Runset(
project=project,
entity=entity,
groupby=["Name"] # 실행 이름으로 그룹화
)
실행 이름은 wandb.init(name=) 매개변수에 지정한 값입니다. 이름을 지정하지 않으면 W&B가 실행에 대해 임의의 이름을 생성합니다.실행 이름은 W&B App에서 해당 실행의 Overview 페이지에서 확인하거나, Api.runs().run.name을 사용해 코드로 확인할 수 있습니다.
다음 예제에서는 실행을 요약 지표로 그룹화하는 방법을 보여줍니다. 요약 지표는 wandb.Run.log()을 사용해 실행에 로그하는 값입니다. 실행을 로그한 후에는 W&B 앱에서 해당 실행의 Overview 페이지에 있는 Summary 섹션에서 요약 지표의 이름을 확인할 수 있습니다.
요약 지표로 실행을 그룹화하기 위한 구문은 summary.<key>이며, 여기서 <key>는 그룹화에 사용할 요약 지표의 이름입니다.
예를 들어, acc라는 이름의 요약 지표를 로그한다고 가정해 보겠습니다:
import wandb
import wandb_workspaces.reports.v2 as wr
entity = "<entity>"
project = "<project>"
for group in ["control", "experiment_a", "experiment_b"]:
for i in range(3):
with wandb.init(entity=entity, project=project, group=group, config={"group": group, "run": i}, name=f"{group}_run_{i}") as run:
# 학습 시뮬레이션
for step in range(100):
run.log({
"acc": 0.5 + (step / 100) * 0.3 + (i * 0.05),
"loss": 1.0 - (step / 100) * 0.5
})
그런 다음 summary.acc 요약 메트릭을 기준으로 실행을 그룹화할 수 있습니다.
runset = wr.Runset(
project=project,
entity=entity,
groupby=["summary.acc"] # 요약 값으로 그룹화
)
실행 세트를 프로그래밍 방식으로 필터링하고, 필터링된 실행 세트를 Workspace and Reports API를 사용해 보고서에 추가할 수 있습니다.
필터 표현식의 일반적인 구문은 다음과 같습니다:
Filter('key') operation <value>
여기서 key는 필터 이름이고, operation은 비교 연산자(예: >, <, ==, in, not in, or, and)이며, <value>는 비교에 사용할 값입니다. Filter는 적용하려는 필터 유형을 나타내는 플레이스홀더입니다. 다음 표는 사용 가능한 필터와 해당 설명을 나열합니다:
| Filter | Description | Available keys |
|---|
Config('key') | config 값으로 필터링 | wandb.init(config=)의 config 매개변수에 지정된 값. |
SummaryMetric('key') | summary metric으로 필터링 | wandb.Run.log()을 사용해 실행에 로그한 값. |
Tags('key') | 태그로 필터링 | 실행에 추가한 태그 값(프로그램 방식 또는 W&B 앱에서 추가). |
Metric('key') | 실행 속성으로 필터링 | tags, state, displayName, jobType |
필터를 정의한 후에는 보고서를 생성하고 필터링된 실행 집합을 wr.PanelGrid(runsets=)에 전달할 수 있습니다. 보고서에 다양한 요소를 프로그램 방식으로 추가하는 방법에 대한 자세한 내용은 이 페이지 곳곳에 있는 Report and Workspace API 탭을 참조하세요.
다음 예제는 보고서에서 실행 집합을 필터링하는 방법을 보여줍니다. <>로 둘러싸인 값을 사용자 값으로 바꾸세요.
하나 이상의 config 값으로 runset을 필터링합니다. Config 값은 실행 구성(wandb.init(config=))에서 지정하는 매개변수입니다.
예를 들어, 다음 코드 스니펫은 먼저 learning_rate와 batch_size에 대한 config 값으로 실행을 초기화한 다음, 리포트에서 learning_rate config 값을 기준으로 실행을 필터링합니다.
import wandb
config = {
"learning_rate": 0.01,
"batch_size": 32,
}
with wandb.init(project="<project>", entity="<entity>", config=config) as run:
# 여기에 학습 코드를 작성하세요
pass
Python 스크립트나 노트북에서 학습률이 0.01보다 큰 실행만 프로그래밍 방식으로 필터링할 수 있습니다.
import wandb_workspaces.reports.v2 as wr
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="Config('learning_rate') > 0.01"
)
and 연산자를 사용해 여러 config 값을 결합하여 필터링할 수도 있습니다.
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="Config('learning_rate') > 0.01 and Config('batch_size') == 32"
)
이전 예제에 이어 필터링된 실행 세트를 사용해 다음과 같이 리포트를 생성할 수 있습니다:
report = wr.Report(
entity="<entity>",
project="<project>",
title="My Report"
)
report.blocks = [
wr.PanelGrid(
runsets=[runset],
panels=[
wr.LinePlot(
x="Step",
y=["accuracy"],
)
]
)
]
report.save()
실행 집합을 다음 실행 속성을 기준으로 필터링합니다: 태그(tags), 실행 상태(state), 실행 이름(displayName), 또는 작업 유형(jobType).
Metric 필터는 다른 문법을 사용합니다. 값 목록을 리스트 형태로 전달하세요.Metric('key') operation [<value>]
예를 들어, 다음 Python 코드 조각은 세 개의 실행을 생성하고 각각에 이름을 지정합니다.
import wandb
with wandb.init(project="<project>", entity="<entity>") as run:
for i in range(3):
run.name = f"run{i+1}"
# 여기에 학습 코드를 작성하세요
pass
리포트를 생성할 때 실행을 표시 이름으로 필터링할 수 있습니다. 예를 들어 이름이 run1, run2, run3인 실행만 포함되도록 필터링하려면 다음 코드를 사용할 수 있습니다:
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="Metric('displayName') in ['run1', 'run2', 'run3']"
)
W&B App에서 해당 실행의 Overview 페이지를 열어 실행 이름을 확인하거나, Api.runs().run.name을 사용해 프로그램 코드에서 확인할 수 있습니다.
다음 예시는 실행 상태(finished, crashed, 또는 running)에 따라 runset을 필터링하는 방법을 보여줍니다:
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="Metric('state') in ['finished']"
)
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="Metric('state') not in ['crashed']"
)
다음 예제는 SummaryMetric(요약 메트릭)을 기준으로 실행 세트를 필터링하는 방법을 보여줍니다. SummaryMetric은 wandb.Run.log()을 사용해 실행에 로그하는 값입니다. 실행을 로그한 후에는 W&B 앱의 실행 Overview 페이지에 있는 Summary 섹션에서 요약 메트릭 이름을 확인할 수 있습니다.
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="SummaryMetric('accuracy') > 0.9"
)
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="Metric('state') in ['finished'] and SummaryMetric('train/train_loss') < 0.5"
)
다음 코드 스니펫은 태그를 기준으로 실행 집합을 필터링하는 방법을 보여줍니다. 태그는 실행에 (프로그램 코드 또는 W&B 앱에서) 추가하는 값입니다.
runset = wr.Runset(
entity="<entity>",
project="<project>",
filters="Tags('training') == 'training'"
)
App UI 또는 W&B SDK를 사용해 보고서에 코드 블록을 대화형으로 추가할 수 있습니다.
App UI
Report and Workspace API
보고서 본문에서 슬래시(/)를 입력하면 드롭다운 메뉴가 표시됩니다. 드롭다운에서 Code를 선택합니다.코드 블록 오른쪽에서 프로그래밍 언어 이름을 클릭합니다. 그러면 드롭다운이 펼쳐집니다. 드롭다운에서 사용할 프로그래밍 언어의 문법을 선택합니다. JavaScript, Python, CSS, JSON, HTML, Markdown, YAML 중에서 선택할 수 있습니다.
wr.CodeBlock 클래스를 사용하여 코드 블록을 프로그래밍 방식으로 생성할 수 있습니다. language와 code 매개변수에 각각 언어 이름과 표시할 코드를 전달합니다.예를 들어, 다음 예시는 YAML 파일의 목록을 보여줍니다:import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project="report-editing")
report.blocks = [
wr.CodeBlock(
code=["this:", "- is", "- a", "cool:", "- yaml", "- file"], language="yaml"
)
]
report.save()
위 코드는 다음과 유사한 코드 블록으로 렌더링됩니다:this:
- is
- a
cool:
- yaml
- file
다음 예시는 Python 코드 블록을 보여줍니다:report = wr.Report(project="report-editing")
report.blocks = [wr.CodeBlock(code=["Hello, World!"], language="python")]
report.save()
위 코드는 다음과 유사한 코드 블록으로 렌더링됩니다:
App UI 또는 W&B SDK를 사용하여 보고서에 마크다운을 인터랙티브하게 추가할 수 있습니다.
App UI
Report and Workspace API
보고서에서 슬래시(/)를 입력하면 드롭다운 메뉴가 표시됩니다. 드롭다운에서 Markdown을 선택합니다.
wandb.apis.reports.MarkdownBlock 클래스를 사용해 프로그래밍 방식으로 마크다운 블록을 생성합니다. 문자열을 text 매개변수에 전달합니다:import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project="report-editing")
report.blocks = [
wr.MarkdownBlock(text="Markdown cell with *italics* and **bold** and $e=mc^2$")
]
그러면 다음과 같은 마크다운 블록이 렌더링됩니다:
App UI 또는 W&B SDK를 사용해 보고서에 HTML 요소를 대화형으로 추가할 수 있습니다.
App UI
Report and Workspace API
보고서 입력창에서 슬래시(/)를 입력하면 드롭다운 메뉴가 표시됩니다. 드롭다운에서 텍스트 블록 유형을 선택합니다. 예를 들어 H2 제목 블록을 만들려면 Heading 2 옵션을 선택합니다.
하나 이상의 HTML 요소로 구성된 목록을 wandb.apis.reports.blocks 속성에 전달합니다. 다음 예제는 H1, H2, 그리고 순서 없는 목록을 생성하는 방법을 보여 줍니다:import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project="report-editing")
report.blocks = [
wr.H1(text="How Programmatic Reports work"),
wr.H2(text="Heading 2"),
wr.UnorderedList(items=["Bullet 1", "Bullet 2"]),
]
report.save()
위 코드는 HTML 요소를 다음과 같이 렌더링합니다:
App UI 또는 W&B SDK를 사용해 리포트에 리치 미디어를 삽입할 수 있습니다.
App UI
Report 및 Workspace API
URL을 복사해 리포트에 붙여넣으면 리포트 안에 리치 미디어가 삽입됩니다. 아래 애니메이션은 Twitter, YouTube, SoundCloud에서 URL을 복사해 붙여넣는 방법을 보여줍니다.트윗 링크 URL을 리포트에 복사해 붙여넣으면 리포트 안에서 해당 트윗을 볼 수 있습니다.Youtube
YouTube 동영상 URL 링크를 복사해 붙여넣어 리포트에 동영상을 삽입합니다.SoundCloud
SoundCloud 링크를 복사해 붙여넣어 리포트에 오디오 파일을 삽입합니다. 하나 이상의 임베디드 미디어 객체 목록을 wandb.apis.reports.blocks 속성에 전달합니다. 다음 예시는 동영상과 Twitter 미디어를 리포트에 삽입하는 방법을 보여줍니다:import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project="report-editing")
report.blocks = [
wr.Video(url="https://www.youtube.com/embed/6riDJMI-Y8U"),
wr.Twitter(
embed_html='<blockquote class="twitter-tweet"><p lang="en" dir="ltr">The voice of an angel, truly. <a href="https://twitter.com/hashtag/MassEffect?src=hash&ref_src=twsrc%5Etfw">#MassEffect</a> <a href="https://t.co/nMev97Uw7F">pic.twitter.com/nMev97Uw7F</a></p>— Mass Effect (@masseffect) <a href="https://twitter.com/masseffect/status/1428748886655569924?ref_src=twsrc%5Etfw">August 20, 2021</a></blockquote>\n'
),
]
report.save()
다시 사용하고 싶은 레이아웃이 있다면, 패널 그리드를 선택한 뒤 복사‑붙여넣기를 사용해 동일한 Report에서 복제하거나 다른 Report에 붙여넣을 수 있습니다.
오른쪽 상단에 있는 드래그 손잡이를 선택해 전체 패널 그리드 섹션을 강조 표시합니다. 클릭한 뒤 드래그하여 Report에서 패널 그리드, 텍스트, 제목 등 원하는 영역을 강조 표시하고 선택합니다.
패널 그리드를 선택한 다음 키보드에서 Delete 키를 눌러 패널 그리드를 삭제합니다.
리포트에서 헤더를 접어 텍스트 블록 안의 콘텐츠를 숨길 수 있습니다. 리포트가 로드되면 펼쳐진 헤더만 콘텐츠를 표시합니다. 리포트에서 헤더를 접으면 콘텐츠를 더 체계적으로 정리하고 불필요한 데이터 로딩을 방지할 수 있습니다. 아래 GIF는 이 과정을 보여 줍니다.
여러 차원에 걸친 관계를 효과적으로 시각화하려면, 변수 중 하나를 색상 그라디언트로 표현하세요. 이렇게 하면 시각적 명료성이 높아지고 패턴을 더 쉽게 파악할 수 있습니다.
- 색상 그라디언트로 표현할 변수를 선택하세요(예: 패널티 점수, 학습률 등). 이를 통해 패널티(색상)가 학습 시간(x축)에 따라 보상/부작용(y축)과 어떻게 상호작용하는지 더 명확하게 이해할 수 있습니다.
- 주요 추세를 강조하세요. 특정 실행 그룹 위에 마우스를 올리면 시각화에서 해당 실행들이 강조 표시됩니다.