메인 콘텐츠로 건너뛰기
W&B Python 라이브러리를 사용해 CSV 파일을 로깅한 뒤 W&B Dashboard에서 시각화할 수 있습니다. W&B Dashboard는 머신 러닝 모델 결과를 정리하고 시각화하는 중심 공간입니다. 이는 특히 아직 W&B에 로깅되지 않은 이전에 수행한 머신 러닝 실험 정보가 담긴 CSV 파일이 있거나, 데이터셋이 담긴 CSV 파일이 있는 경우에 유용합니다.

데이터셋 CSV 파일 가져오기 및 로그 기록

W&B Artifacts를 사용하면 CSV 파일의 내용을 더 쉽게 재사용하고 활용할 수 있습니다.
  1. 시작하려면 먼저 CSV 파일을 가져오세요. 다음 코드 스니펫에서 iris.csv 파일 이름을 사용자의 CSV 파일 이름으로 바꾸세요:
import wandb
import pandas as pd

# CSV를 새 DataFrame으로 읽기
new_iris_dataframe = pd.read_csv("iris.csv")
  1. CSV 파일을 W&B Table로 변환해 W&B Dashboards에서 활용합니다.
# DataFrame을 W&B Table로 변환
iris_table = wandb.Table(dataframe=new_iris_dataframe)
  1. 다음으로 W&B Artifact를 생성하고 테이블을 해당 Artifact에 추가합니다:
# 행 제한을 200000으로 늘리고 재사용을 용이하게 하기 위해
# 테이블을 Artifact에 추가합니다
iris_table_artifact = wandb.Artifact("iris_artifact", type="dataset")
iris_table_artifact.add(iris_table, "iris_table")

# 데이터를 보존하기 위해 아티팩트 내에 원본 csv 파일을 기록합니다
iris_table_artifact.add_file("iris.csv")
W&B Artifacts에 대한 자세한 내용은 Artifacts 장을 참고하세요.
  1. 마지막으로, wandb.init을 사용해 새로운 W&B Run을 시작하여 W&B에 추적하고 로깅하세요:
# 데이터를 기록할 W&B run 시작
with wandb.init(project="tables-walkthrough") as run:

    # run으로 시각화할 테이블 기록...
    run.log({"iris": iris_table})

    # 사용 가능한 행 제한을 늘리기 위해 아티팩트로도 기록!
    run.log_artifact(iris_table_artifact)
wandb.init() API는 데이터를 Run에 로깅하기 위해 새로운 백그라운드 프로세스를 생성하고, (기본적으로) 데이터를 wandb.ai와 동기화합니다. 실시간 시각화는 W&B Workspace 대시보드에서 확인할 수 있습니다. 아래 이미지는 코드 스니펫 데모를 실행했을 때의 출력 예시를 보여줍니다.
CSV file imported into W&B Dashboard
앞에서 살펴본 코드 스니펫을 모두 포함한 전체 스크립트는 아래에서 확인할 수 있습니다.
import wandb
import pandas as pd

# CSV를 새 DataFrame으로 읽기
new_iris_dataframe = pd.read_csv("iris.csv")

# DataFrame을 W&B Table로 변환
iris_table = wandb.Table(dataframe=new_iris_dataframe)

# 행 제한을 200000으로 늘리고 재사용을 용이하게 하기 위해
# 테이블을 Artifact에 추가
iris_table_artifact = wandb.Artifact("iris_artifact", type="dataset")
iris_table_artifact.add(iris_table, "iris_table")

# 데이터를 보존하기 위해 아티팩트 내에 원본 csv 파일 로깅
iris_table_artifact.add_file("iris.csv")

# 데이터를 로깅하기 위해 W&B run 시작
with wandb.init(project="tables-walkthrough") as run:

    # run으로 시각화하기 위해 테이블 로깅...
    run.log({"iris": iris_table})

    # 사용 가능한 행 제한을 늘리기 위해 Artifact로도 로깅!
    run.log_artifact(iris_table_artifact)

Experiments CSV를 가져와 로깅하기

경우에 따라 실험 세부 정보가 CSV 파일에 들어 있을 수 있습니다. 이러한 CSV 파일에서 일반적으로 볼 수 있는 세부 정보는 다음과 같습니다.
실험모델 이름노트태그레이어 수최종 트레이닝 정확도최종 검증 정확도트레이닝 손실
Experiment 1mnist-300-layers트레이닝 데이터에 과적합이 심하게 발생[latest]3000.990.90[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
Experiment 2mnist-250-layers현재 최고의 모델[prod, best]2500.950.96[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
Experiment 3mnist-200-layers베이스라인 모델보다 성능이 더 나쁨. 디버깅 필요[debug]2000.760.70[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
Experiment Nmnist-X-layers노트[…, …]
W&B는 실험 CSV 파일을 받아 W&B Experiment Run으로 변환할 수 있습니다. 아래 코드 스니펫과 코드 스크립트는 실험 CSV 파일을 가져와 로그로 기록하는 방법을 보여줍니다.
  1. 먼저 CSV 파일을 읽어 Pandas DataFrame으로 변환합니다. "experiments.csv"를 사용 중인 CSV 파일 이름으로 바꾸십시오:
import wandb
import pandas as pd

FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)

PROJECT_NAME = "Converted Experiments"

EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]

# 작업하기 편하도록 Pandas DataFrame 형식 변환
for i, row in loaded_experiment_df.iterrows():
    run_name = row[EXPERIMENT_NAME_COL]
    notes = row[NOTES_COL]
    tags = row[TAGS_COL]

    config = {}
    for config_col in CONFIG_COLS:
        config[config_col] = row[config_col]

    metrics = {}
    for metric_col in METRIC_COLS:
        metrics[metric_col] = row[metric_col]

    summaries = {}
    for summary_col in SUMMARY_COLS:
        summaries[summary_col] = row[summary_col]
  1. 다음으로, 새로운 W&B Run을 시작하여 wandb.init()으로 W&B에 추적 정보와 로그를 기록합니다:
    with wandb.init(
        project=PROJECT_NAME, name=run_name, tags=tags, notes=notes, config=config
    ) as run:
    
실험이 실행되는 동안 메트릭의 모든 값을 로깅해서 W&B에서 조회, 쿼리, 분석할 수 있도록 하고 싶을 수 있습니다. 이를 위해 run.log() 메서드를 사용합니다:
run.log({key: val})
선택적으로 define_metric API를 사용해 run의 결과를 나타내는 최종 요약 메트릭을 기록할 수 있습니다. 이 예제에서는 run.summary.update()를 사용해 run에 요약 메트릭을 추가합니다:
run.summary.update(summaries)
요약 메트릭에 대한 자세한 내용은 요약 메트릭 로깅을 참조하세요. 다음은 위의 샘플 테이블을 W&B 대시보드로 변환하는 전체 예제 스크립트입니다.
FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)

PROJECT_NAME = "Converted Experiments"

EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]

for i, row in loaded_experiment_df.iterrows():
    run_name = row[EXPERIMENT_NAME_COL]
    notes = row[NOTES_COL]
    tags = row[TAGS_COL]

    config = {}
    for config_col in CONFIG_COLS:
        config[config_col] = row[config_col]

    metrics = {}
    for metric_col in METRIC_COLS:
        metrics[metric_col] = row[metric_col]

    summaries = {}
    for summary_col in SUMMARY_COLS:
        summaries[summary_col] = row[summary_col]

    with  wandb.init(
        project=PROJECT_NAME, name=run_name, tags=tags, notes=notes, config=config
    ) as run:

        for key, val in metrics.items():
            if isinstance(val, list):
                for _val in val:
                    run.log({key: _val})
            else:
                run.log({key: val})

        run.summary.update(summaries)