본문으로 건너뛰기

로깅 FAQ

W&B UI에서 로그된 차트와 미디어를 어떻게 구성할 수 있나요?

W&B UI에서 로그된 패널들을 구성하기 위해 /를 구분자로 사용합니다. 기본적으로 / 이전의 로그된 항목 이름의 구성 요소를 "패널 섹션"이라고 하는 패널 그룹을 정의하는 데 사용됩니다.

wandb.log({"val/loss": 1.1, "val/acc": 0.3})
wandb.log({"train/loss": 0.1, "train/acc": 0.94})

워크스페이스 설정에서 패널이 /로 분리된 첫 번째 구성 요소나 모든 구성 요소에 따라 그룹화되는지 여부를 변경할 수 있습니다.

에포크 또는 스텝별로 이미지나 미디어를 어떻게 비교할 수 있나요?

스텝에서 이미지를 로깅할 때마다 UI에서 보여줄 수 있도록 이미지를 저장합니다. 이미지 패널을 확장하고 스텝 슬라이더를 사용하여 다른 스텝의 이미지를 봅니다. 이를 통해 모델의 출력이 트레이닝 동안 어떻게 변하는지 쉽게 비교할 수 있습니다.

일부 메트릭은 배치별로, 일부 메트릭은 에포크별로만 로깅하고 싶다면 어떻게 해야 하나요?

모든 배치에서 특정 메트릭을 로깅하고 플롯을 표준화하려면, 메트릭과 함께 플롯하려는 x 축 값들을 로깅할 수 있습니다. 그런 다음 사용자 정의 플롯에서 편집을 클릭하고 사용자 지정 x 축을 선택하십시오.

wandb.log({"batch": batch_idx, "loss": 0.3})
wandb.log({"epoch": epoch, "val_acc": 0.94})

값 목록을 어떻게 로깅하나요?

wandb.log({f"losses/loss-{ii}": loss for ii, loss in enumerate(losses)})

범례가 있는 플롯에서 여러 줄을 어떻게 그릴 수 있나요?

wandb.plot.line_series()를 사용하여 다중 선 사용자 정의 차트를 생성할 수 있습니다. 선 차트를 보려면 프로젝트 페이지로 이동해야 합니다. 범례를 플롯에 추가하려면, wandb.plot.line_series() 내에 keys 인수를 전달하십시오. 예를 들면:

wandb.log(
{
"my_plot": wandb.plot.line_series(
xs=x_data, ys=y_data, keys=["metric_A", "metric_B"]
)
}
)

다중 줄 플롯에 대한 자세한 정보는 여기에서 다중 줄 탭 아래에서 찾을 수 있습니다.

테이블에 Plotly/Bokeh 차트를 어떻게 추가하나요?

테이블에 직접 Plotly/Bokeh 그림을 추가하는 것은 아직 지원되지 않습니다. 대신, 그림을 HTML로 작성한 다음 HTML을 테이블에 추가하십시오. 아래는 상호 작용하는 Plotly 및 Bokeh 차트의 예입니다.

import wandb
import plotly.express as px

# 새로운 run 초기화
run = wandb.init(project="log-plotly-fig-tables", name="plotly_html")

# 테이블 생성
table = wandb.Table(columns=["plotly_figure"])

# Plotly 그림 경로 생성
path_to_plotly_html = "./plotly_figure.html"

# Plotly 그림 예시
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])

# Plotly 그림을 HTML로 작성
# auto_play를 False로 설정하면 Plotly
# 차트가 테이블에서 자동으로 재생되는 것을 방지합니다
fig.write_html(path_to_plotly_html, auto_play=False)

# 테이블에 HTML 파일로 Plotly 그림 추가
table.add_data(wandb.Html(path_to_plotly_html))

# 테이블 로깅
run.log({"test_table": table})
wandb.finish()

그래프에 아무것도 나타나지 않는 이유는 무엇인가요?

"아직 로깅된 시각화 데이터가 없습니다"라는 메시지가 표시되면 스크립트에서 첫 번째 wandb.log 호출을 아직 받지 못했다는 의미입니다. 이는 실행이 한 단계를 마치는 데 시간이 오래 걸릴 수 있기 때문입니다. 에포크마다 끝에 로깅하고 있다면 에포크마다 몇 번 로깅하여 데이터가 더 빨리 스트리밍되도록 할 수 있습니다.

같은 메트릭이 여러 번 나타나는 이유는 무엇인가요?

동일한 키에 대해 다양한 유형의 데이터를 로깅하는 경우 데이터베이스에서 분리해야 합니다. 이는 UI의 드롭다운에서 동일한 메트릭 이름의 여러 항목을 볼 수 있음을 의미합니다. 우리가 그룹화하는 유형은 number, string, bool, other (대부분 배열), 그리고 모든 wandb 데이터 유형(Histogram, Image 등)입니다. 이러한 행동을 피하려면 각 키에 하나의 유형만 보내십시오.

메트릭을 대소문자 구분 없이 저장하므로, "My-Metric""my-metric"과 같은 이름의 두 메트릭이 없는지 확인하십시오.

실행에 로깅된 데이터에 직접적이고 프로그래매틱하게 어떻게 엑세스할 수 있나요?

history 오브젝트는 wandb.log에 의해 로깅된 메트릭을 추적하는 데 사용됩니다. 우리의 API를 사용하면 run.history()를 통해 history 오브젝트에 엑세스할 수 있습니다.

api = wandb.Api()
run = api.run("username/project/run_id")
print(run.history())

W&B에 수백만 스텝을 로깅하면 어떻게 될까요? 브라우저에서는 어떻게 렌더링될까요?

저희에게 보내는 포인트가 많을수록 UI에서 그래프를 로드하는 데 더 오래 걸립니다. 선 위에 1000개 이상의 포인트가 있는 경우, 데이터를 브라우저로 보내기 전에 백엔드에서 1000개의 포인트로 샘플링합니다. 이 샘플링은 비결정적이므로 페이지를 새로고침하면 다른 샘플링된 포인트 세트를 볼 수 있습니다.

가이드라인

메트릭 당 10,000개 이하의 포인트를 로깅하려고 노력하는 것이 좋습니다. 선에 100만 개 이상의 포인트를 로깅하면 페이지를 로드하는 데 시간이 걸립니다. 로깅 발자국을 줄이면서 정확성을 희생하지 않는 전략에 대한 자세한 내용은 이 Colab을 확인하세요. 설정 및 요약 메트릭의 열이 500개 이상인 경우 테이블에 500개만 표시됩니다.

이미지나 미디어를 업로드하지 않고 프로젝트에 W&B를 통합하고 싶다면 어떻게 해야 하나요?

W&B는 스칼라만 로깅하는 프로젝트에도 사용할 수 있습니다 — 업로드하고자 하는 파일이나 데이터를 명시적으로 지정합니다. 여기 PyTorch에서의 빠른 예가 있으며, 이미지를 로깅하지 않습니다.

wandb.log()에 클래스 속성을 전달하면 어떻게 되나요?

일반적으로 wandb.log()에 클래스 속성을 전달하는 것은 권장되지 않습니다. 네트워크 호출이 이루어지기 전에 속성이 변경될 수 있기 때문입니다. 클래스의 속성으로 메트릭을 저장하는 경우, wandb.log()가 호출되었을 때 속성의 값과 일치하는 메트릭이 로깅되도록 속성을 깊은 복사하는 것이 권장됩니다.

로깅한 데이터 포인트가 예상보다 적은 이유는 무엇인가요?

X 축에 Step 이외의 것을 사용하여 메트릭을 시각화하는 경우 예상보다 데이터 포인트가 적게 보일 수 있습니다. 이는 메트릭이 서로 대응하여 로깅되어야 하기 때문입니다. 즉, 메트릭을 동기화하는 방법은 동일한 Step에 로깅된 메트릭만 샘플링하고 샘플 사이에서 보간하는 것입니다.\ \ 가이드라인\ **\ **메트릭을 동일한 log() 호출로 번들링하는 것이 좋습니다. 코드가 다음과 같다면:

wandb.log({"Precision": precision})
...
wandb.log({"Recall": recall})

다음과 같이 로깅하는 것이 더 좋습니다:

wandb.log({"Precision": precision, "Recall": recall})

또는, step 파라미터를 수동으로 제어하고 코드에서 메트릭을 동기화할 수 있습니다:

wandb.log({"Precision": precision}, step=step)
...
wandb.log({"Recall": recall}, step=step)

log() 호출에서 step 값이 동일하면, 메트릭은 동일한 스텝 아래에서 로깅되어 함께 샘플링됩니다. 단, 각 호출에서 step은 단조롭게 증가해야 하며, 그렇지 않으면 log() 호출 시 step 값이 무시됩니다.

Was this page helpful?👍👎