> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# summary 메트릭 로깅

> Track and customize single summary 메트릭 like best 정확도 or minimum 손실 on a W&B run using run.summary.

트레이닝 중 시간에 따라 변하는 값 외에도 모델이나 전처리 단계를 요약하는 값을 추적하는 것이 중요한 경우가 많습니다. 이 정보를 run의 `summary` 속성에 저장하세요. run의 summary 속성은 NumPy 배열, PyTorch 텐서 또는 TensorFlow 텐서를 처리할 수 있습니다. W\&B는 NumPy 배열, PyTorch 텐서 및 TensorFlow 텐서를 바이너리 파일에 저장합니다.

`wandb.Run.log()`로 로깅한 마지막 값은 자동으로 run의 summary 딕셔너리에 설정됩니다. summary 메트릭 딕셔너리를 수정하면 이전 값은 사라집니다.

진행 중인 run에서 또는 run이 완료된 후에 summary 메트릭을 로깅하세요.

<Tabs>
  <Tab title="run 진행 중">
    다음 코드 스니펫은 W\&B에 맞춤형 summary 메트릭을 제공하는 방법을 보여줍니다:

    ```python theme={"system"}
    import wandb
    import random

    # run이 기록되는 프로젝트
    project = "summary-demo"
    entity = "<your-entity>" # W&B entity 이름으로 바꾸세요

    # 하이퍼파라미터가 포함된 딕셔너리
    config = {
        'epochs' : 10,
        'lr' : 0.01
    }

    with wandb.init(entity=entity, project=project, config=config) as run:
        offset = random.random() / 5
        print(f"lr: {config['lr']}")

        # 트레이닝 run 시뮬레이션
        for epoch in range(2, config['epochs']):
            acc = 1 - 2**-config['epochs'] - random.random() / config['epochs'] - offset
            loss = 2**-config['epochs'] + random.random() / config['epochs'] + offset
            print(f"epoch={config['epochs']}, accuracy={acc}, loss={loss}")
            run.log({"accuracy": acc, "loss": loss})

            if epoch % 5 == 0:
                run.summary["best_accuracy"] = acc
                run.summary["best_loss"] = loss
    ```
  </Tab>

  <Tab title="run 완료 후">
    트레이닝이 완료된 후 기존 W\&B run의 summary 속성을 업데이트할 수 있습니다. [W\&B Public API](/ko/products/wandb/ref/python/public-api)를 사용하여 summary 속성을 업데이트하세요:

    ```python theme={"system"}
    api = wandb.Api()
    run = api.run("entity/project/run_id")
    run.summary["tensor"] = np.random.random(1000)
    run.summary.update()
    ```
  </Tab>
</Tabs>

다음 이미지는 위의 코드 스니펫을 복사하여 실행했을 때 summary 메트릭이 어떻게 표시될 수 있는지 보여줍니다:

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/summary_demo.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=1a1f14924f6c1d0cacf79c2f348dbd76" alt="run summary" width="3120" height="2970" data-path="products/wandb/_media/summary_demo.png" />
</Frame>

<h2 id="customize-summary-metrics">
  summary 메트릭 사용자 지정
</h2>

맞춤형 summary 메트릭은 트레이닝 중 최상의 step에서 모델 성능을 캡처하여 `run.summary`에 저장하는 데 유용합니다. 예를 들어 최종 값 대신 최대 정확도나 최소 손실 값을 캡처할 수 있습니다.

기본적으로 summary는 이력의 최종 값을 사용합니다. summary 메트릭을 사용자 지정하려면 `define_metric`에 `summary` 인수를 전달하세요. 다음 값을 허용합니다:

* `"min"`
* `"max"`
* `"mean"`
* `"best"`
* `"last"`
* `"none"`

`"best"`는 선택 인수인 `objective`도 `"minimize"` 또는 `"maximize"`로 설정한 경우에만 사용할 수 있습니다.

다음 예시는 손실과 정확도의 최소 및 최대 값을 summary에 추가합니다:

```python theme={"system"}
import wandb
import random

random.seed(1)

with wandb.init() as run:
    # 손실의 최소 및 최대 summary 값
    run.define_metric("loss", summary="min")
    run.define_metric("loss", summary="max")

    # 정확도의 최소 및 최대 summary 값
    run.define_metric("acc", summary="min")
    run.define_metric("acc", summary="max")

    for i in range(10):
        log_dict = {
            "loss": random.uniform(0, 1 / (i + 1)),
            "acc": random.uniform(1 / (i + 1), 1),
        }
        run.log(log_dict)
```

<h2 id="view-summary-metrics">
  summary 메트릭 보기
</h2>

W\&B App, 실행 중인 run, 기존 run 또는 로컬 파일 시스템에서 run의 summary에 액세스하세요.

<Tabs>
  <Tab title="run 개요">
    1. W\&B App으로 이동하세요.
    2. 프로젝트 사이드바에서 **Workspace** 탭을 선택하세요.
    3. summary 값을 로깅한 run을 클릭하세요. run 페이지가 열리고 기본적으로 **Overview** 탭이 표시됩니다.
    4. **Summary** 섹션에서 summary 값을 확인하세요.

    다음 이미지는 위의 코드 스니펫을 복사하여 실행했을 때 **Overview** 탭에 표시될 수 있는 summary 메트릭의 예시입니다:

    <Frame>
      <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/customize_summary.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=d56df9168cf8eb4a2e696eab0812ea71" alt="run 개요" width="2284" height="2554" data-path="products/wandb/_media/customize_summary.png" />
    </Frame>
  </Tab>

  <Tab title="run table">
    1. W\&B App으로 이동하세요.
    2. **Runs** 탭을 선택하세요.
    3. run table에서 summary 값의 이름에 해당하는 열에서 summary 값을 확인할 수 있습니다.
  </Tab>

  <Tab title="run 실행 중">
    `wandb.Run.summary`를 사용하여 실행 중인 run의 summary 값에 액세스하세요. 이 속성은 키-값 쌍으로 구성된 딕셔너리를 반환합니다.

    다음 예시는 run의 summary에 액세스합니다. `"<my-project>"`를 W\&B 프로젝트 이름으로 바꾸세요:

    ```python theme={"system"}
    import wandb

    with wandb.init(project="<my-project>", config=config) as run:
      run.log({"accuracy": 0.9, "loss": 0.1})

      print(run.summary)  # summary 딕셔너리를 출력합니다
    ```
  </Tab>

  <Tab title="기존 run">
    W\&B Public API를 사용하여 `wandb.Api.Run.summary` 속성으로 summary 메트릭에 액세스하세요.

    다음 코드 예시는 W\&B Public API와 pandas를 사용하여 특정 run에 로깅된 summary 값을 가져오는 방법을 보여줍니다:

    ```python theme={"system"}
    import wandb
    import pandas

    entity = "<your-entity>"
    project = "<your-project>"
    run_name = "<your-run-name>" # summary 값이 있는 run의 이름

    all_runs = []

    for run in api.runs(f"{entity}/{project_name}"):
        print("Fetching details for run: ", run.id, run.name)
        run_data = {
                  "id": run.id,
                  "name": run.name,
                  "url": run.url,
                  "state": run.state,
                  "tags": run.tags,
                  "config": run.config,
                  "created_at": run.created_at,
                  "system_metrics": run.system_metrics,
                  "summary": run.summary,
                  "project": run.project,
                  "entity": run.entity,
                  "user": run.user,
                  "path": run.path,
                  "notes": run.notes,
                  "read_only": run.read_only,
                  "history_keys": run.history_keys,
                  "metadata": run.metadata,
              }
        all_runs.append(run_data)
      
    # 데이터프레임으로 변환  
    df = pd.DataFrame(all_runs)

    # 열 이름(run)을 기준으로 행을 가져와 딕셔너리로 변환
    df[df['name']==run_name].summary.reset_index(drop=True).to_dict()
    ```

    프로젝트의 여러 run에 대한 summary 메트릭에 액세스하려면 `api.runs()`가 반환하는 run을 순회하세요:

    ```python theme={"system"}
    import wandb

    api = wandb.Api()
    runs = api.runs("<entity>/<project>")

    for run in runs:
        print(f"Run name: {run.name}")
        print(f"Run ID: {run.id}")
        print(f"Run summary: {dict(run.summary)}")
        print("----------")
    ```

    다음 JSON 객체는 run summary의 예시를 보여줍니다:

    ```shell theme={"system"}
    Run name: clean-oath-11
    Run ID: mt2dasoz
    Run summary: {'_runtime': 3, '_step': 1000, '_timestamp': 1778541534.834642, '_wandb.runtime': 3, 'train/epoch_ndx': 1000, 'train/train_loss': 0.25498124957084656}

    Run name: zesty-snowball-7
    Run ID: qne08r7u
    Run summary: {'_runtime': 3, '_step': 1000, '_timestamp': 1776714833.636171, '_wandb.runtime': 3, 'train/epoch_ndx': 1000, 'train/train_loss': 0.24914199113845825}
    ```
  </Tab>

  <Tab title="로컬 파일 시스템">
    W\&B는 run 디렉터리의 `wandb-summary.json` 파일에 run summary 값을 저장합니다. summary 값을 로컬에서 조회하려면 `wandb-summary.json` 파일을 여세요.

    기본적으로 W\&B는 run 디렉터리를 `./wandb/run-<timestamp>-<run_id>`에 저장합니다.
  </Tab>
</Tabs>
