> ## 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.

> W&B에 저장한 데이터를 내보내거나 업데이트합니다

# 데이터 내보내기 및 업데이트

<h2 id="export-data">
  데이터 내보내기
</h2>

Public API를 사용하면 W\&B에 저장한 데이터를 내보내거나 업데이트할 수 있습니다. 이 API를 사용하기 전에 먼저 스크립트에서 데이터를 로깅하세요. 자세한 내용은 [퀵스타트](/ko/products/wandb/quickstart)를 확인하세요.

**Public API 사용 사례**

* **데이터 내보내기**: 데이터프레임을 가져와 Jupyter 노트북에서 맞춤형 분석을 수행합니다. 데이터를 탐색한 후에는 새 분석 run을 생성하고 결과를 로깅하여 발견 사항을 동기화할 수 있습니다. 예: `wandb.init(job_type="analysis")`
* **기존 run 업데이트**: W\&B run에 연결되어 로깅된 데이터를 업데이트할 수 있습니다. 예를 들어, 처음에 로깅하지 않은 아키텍처나 하이퍼파라미터 같은 정보를 추가하도록 여러 run의 설정을 업데이트할 수 있습니다.

사용 가능한 함수에 대한 자세한 내용은 [생성된 레퍼런스 문서](/ko/products/wandb/ref/python/public-api)를 참조하세요.

<h3 id="export-run-data">
  run 데이터 내보내기
</h3>

완료된 run이나 실행 중인 run에서 데이터를 다운로드할 수 있습니다. 일반적으로 Jupyter 노트북에서 맞춤형 분석을 수행하기 위해 데이터프레임을 다운로드하거나, 자동화된 환경에서 맞춤형 로직을 적용할 때 사용합니다.

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

api = wandb.Api()
run = api.run("<entity>/<project>/<run_id>")
```

run 객체에서 가장 자주 사용되는 속성은 다음과 같습니다.

| 속성 | 의미 |
| - | - |
| `run.config` | run의 설정 정보를 담은 딕셔너리입니다. 트레이닝 run의 하이퍼파라미터나 데이터셋 아티팩트를 생성하는 run의 전처리 방법 등이 여기에 해당합니다. run의 입력이라고 생각하면 됩니다. |
| `run.history()` | 손실처럼 모델 트레이닝 중에 변하는 값을 저장하는 딕셔너리 목록입니다. `run.log()` 명령을 실행하면 이 객체에 값이 추가됩니다. |
| `run.summary` | run의 결과를 요약한 정보를 담은 딕셔너리입니다. 정확도나 손실 같은 스칼라 값일 수도 있고, 대용량 파일일 수도 있습니다. 기본적으로 `run.log()`는 로깅된 시계열의 최종값을 요약으로 설정합니다. 요약의 내용을 직접 설정할 수도 있습니다. 요약은 run의 출력이라고 생각하면 됩니다. |

과거 run의 데이터를 수정하거나 업데이트할 수도 있습니다. 기본적으로 api 객체의 단일 인스턴스는 모든 네트워크 요청을 캐시합니다. 실행 중인 스크립트에서 실시간 정보가 필요하다면 `api.flush()`를 호출하여 최신 값을 가져오세요.

<h3 id="querying-multiple-runs">
  여러 run 쿼리하기
</h3>

<Tabs>
  <Tab title="데이터프레임 및 CSV">
    이 예제 스크립트는 프로젝트를 찾아 각 run의 이름, 설정, 요약 통계를 담은 CSV를 출력합니다. `<entity>`와 `<project>`를 각각 사용 중인 W\&B entity와 프로젝트 이름으로 바꾸세요.

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

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

    summary_list, config_list, name_list = [], [], []
    for run in runs:
        # .summary에는 정확도와 같은
        # 메트릭의 출력 키/값이 포함됩니다.
        #  대용량 파일을 제외하기 위해 ._json_dict를 호출합니다
        summary_list.append(run.summary._json_dict)

        # .config에는 하이퍼파라미터가 포함됩니다.
        #  _로 시작하는 특수 값은 제거합니다.
        config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")})

        # .name은 사람이 읽기 쉬운 run 이름입니다.
        name_list.append(run.name)

    runs_df = pd.DataFrame(
        {"summary": summary_list, "config": config_list, "name": name_list}
    )

    runs_df.to_csv("project.csv")

    run.finish()
    ```
  </Tab>

  <Tab title="MongoDB 스타일">
    W\&B API에서는 api.runs()를 사용해 프로젝트 전체의 run을 쿼리할 수도 있습니다. 주로 맞춤형 분석을 위해 run 데이터를 내보낼 때 사용합니다. 쿼리 인터페이스는 [MongoDB에서 사용하는 방식](https://www.mongodb.com/docs/manual/reference/mql/query-predicates/)과 동일합니다.

    ```python theme={"system"}
    runs = api.runs(
        "username/project",
        {"$or": [{"config.experiment_name": "foo"}, {"config.experiment_name": "bar"}]},
    )
    print(f"Found {len(runs)} runs")
    ```
  </Tab>
</Tabs>

`api.runs`를 호출하면 반복 가능하고 목록처럼 동작하는 `Runs` 객체가 반환됩니다. 이 객체는 기본적으로 필요할 때마다 run을 50개씩 순차적으로 로드하며, `per_page` 키워드 인수로 페이지당 로드할 개수를 변경할 수 있습니다.

`api.runs`는 `order` 키워드 인수도 지원합니다. 기본 정렬 순서는 `-created_at`입니다. 결과를 오름차순으로 정렬하려면 `+created_at`을 지정하세요. `summary.val_acc`나 `config.experiment_name`처럼 설정 값이나 요약 값을 기준으로 정렬할 수도 있습니다.

<h3 id="error-handling">
  오류 처리
</h3>

W\&B 서버와 통신하는 중에 오류가 발생하면 `wandb.CommError` 예외가 발생합니다. 원래 예외는 `exc` 속성으로 확인할 수 있습니다.

<h3 id="get-a-runs-name-and-id-during-an-active-run">
  실행 중인 run의 이름과 ID 조회하기
</h3>

`wandb.init()`을 호출한 후에는 다음과 같이 스크립트에서 무작위로 생성된 run ID나 사람이 읽을 수 있는 run 이름에 액세스할 수 있습니다.

* 고유한 run ID(8자 해시): `run.id`
* 무작위 run 이름(사람이 읽을 수 있는 형태): `run.name`

run에 유용한 식별자를 설정하려는 경우 다음 방법을 권장합니다.

* **Run ID**: 생성된 해시를 그대로 사용하세요. 이 값은 프로젝트 내의 run 간에 고유해야 합니다.
* **Run 이름**: 차트에서 여러 선을 서로 구분할 수 있도록 짧고 읽기 쉬우며 가능하면 고유한 이름을 지정하세요.
* **Run 노트**: run에서 수행하는 작업을 간단히 설명해 두기에 적합합니다. `wandb.init(notes="your notes here")`로 설정할 수 있습니다.
* **Run 태그**: run 태그로 항목을 동적으로 추적하고, UI의 필터를 사용해 관심 있는 run만 보이도록 table을 필터링하세요. 태그는 스크립트에서 설정한 후 UI의 runs table과 run 페이지의 Overview 탭에서 편집할 수 있습니다. 자세한 안내는 [여기](/ko/products/wandb/runs/tags)를 참조하세요.

<h2 id="public-api-examples">
  Public API 예시
</h2>

<h3 id="read-metrics-from-a-run">
  run에서 메트릭 조회하기
</h3>

이 예제는 `"<entity>/<project>/<run_id>"`에 저장된 run에서 `run.log({"accuracy": acc})`로 로깅한 타임스탬프와 정확도를 출력합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
if run.state == "finished":
    for i, row in run.history().iterrows():
        print(row["_timestamp"], row["accuracy"])
```

<h3 id="read-specific-metrics-from-a-run">
  run에서 특정 메트릭 조회하기
</h3>

run에서 특정 메트릭을 가져오려면 `keys` 인수를 사용하세요. `run.history()`를 사용할 때 기본 샘플 수는 500개입니다. 로깅된 step 중 특정 메트릭이 없는 step은 출력 데이터프레임에 `NaN`으로 표시됩니다. `keys` 인수를 지정하면 API가 나열된 메트릭 키를 포함하는 step을 더 자주 샘플링합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
if run.state == "finished":
    for i, row in run.history(keys=["accuracy"]).iterrows():
        print(row["_timestamp"], row["accuracy"])
```

<h3 id="compare-two-runs">
  두 run 비교하기
</h3>

`run1`과 `run2` 간에 서로 다른 설정 매개변수를 출력합니다.

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

api = wandb.Api()

# <entity>, <project>, <run_id>를 실제 값으로 바꾸세요
run1 = api.run("<entity>/<project>/<run_id>")
run2 = api.run("<entity>/<project>/<run_id>")


df = pd.DataFrame([run1.config, run2.config]).transpose()

df.columns = [run1.name, run2.name]
print(df[df[run1.name] != df[run2.name]])
```

출력:

```
              c_10_sgd_0.025_0.01_long_switch base_adam_4_conv_2fc
batch_size                                 32                   16
n_conv_layers                               5                    4
optimizer                             rmsprop                 adam
```

<h3 id="update-metrics-for-a-run-after-the-run-has-finished">
  완료된 run의 메트릭 업데이트하기
</h3>

이 예제는 이전 run의 정확도를 `0.9`로 설정합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.summary["accuracy"] = 0.9
run.summary.update()
```

<h3 id="rename-a-metric-in-a-completed-run">
  완료된 run의 메트릭 이름 변경하기
</h3>

이 예제에서는 table의 요약 열 이름을 변경합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.summary["new_name"] = run.summary["old_name"]
del run.summary["old_name"]
run.summary.update()
```

<Note>
  열 이름 변경은 table에만 적용됩니다. 차트에서는 여전히 원래 이름으로 메트릭을 참고합니다.
</Note>

<h3 id="update-config-for-an-existing-run">
  기존 run의 설정 업데이트
</h3>

이 예제는 설정 값 중 하나를 업데이트합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.config["key"] = updated_value
run.update()
```

자세한 내용은 [실험 설정하기](/ko/products/wandb/track/config#existing-run)를 참조하세요.

<h3 id="export-system-resource-consumptions-to-a-csv-file">
  시스템 리소스 사용량을 CSV 파일로 내보내기
</h3>

아래 스니펫은 시스템 리소스 사용량을 조회한 다음 CSV로 저장합니다.

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

run = wandb.Api().run("<entity>/<project>/<run_id>")
system_metrics = run.history(stream="events")
system_metrics.to_csv("sys_metrics.csv")
```

<h3 id="get-unsampled-metric-data">
  샘플링되지 않은 메트릭 데이터 조회
</h3>

이력에서 데이터를 가져오면 기본적으로 500개 포인트로 샘플링됩니다. 로깅된 데이터 포인트를 모두 조회하려면 `run.scan_history()`를 사용하세요. 다음은 이력에 로깅된 `loss` 데이터 포인트를 모두 다운로드하는 예시입니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
history = run.scan_history()
losses = [row["loss"] for row in history]
```

<h3 id="get-paginated-data-from-history">
  이력에서 페이지 매김된 데이터 조회하기
</h3>

run의 샘플링되지 않은 전체 이력을 조회하려면 `run.scan_history()`를 사용하세요. 샘플링되지 않은 이력에는 해당 run의 모든 이력 레코드가 포함됩니다. 반면 `run.history()`가 반환하는 샘플링된 뷰에서는 일부 레코드가 누락될 수 있습니다.

`page_size` 매개변수는 API 요청 한 번에 가져오는 이력 레코드의 최대 개수를 지정하며, 기본값은 `1000`입니다. 요청이 느리거나 timeout이 발생하면 페이지 크기를 줄여 사용해 보세요. 페이지 크기가 작을수록 timeout 위험은 줄어들지만 API 요청 횟수는 늘어납니다.

`keys` 매개변수는 이와 별도로 반환할 메트릭을 필터링합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.scan_history(keys=sorted(cols), page_size=100)
```

<h3 id="export-metrics-from-all-runs-in-a-project-to-a-csv-file">
  프로젝트의 모든 run에서 메트릭을 CSV 파일로 내보내기
</h3>

이 스크립트는 프로젝트의 run을 가져와 각 run의 이름, 설정, 요약 통계가 담긴 데이터프레임과 CSV를 생성합니다. `<entity>`와 `<project>`를 각각 W\&B entity와 프로젝트 이름으로 바꾸세요.

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

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

summary_list, config_list, name_list = [], [], []
for run in runs:
    # .summary에는 정확도 등 메트릭의
    #  출력 키/값이 담겨 있습니다.
    #  대용량 파일을 제외하려면 ._json_dict를 호출합니다
    summary_list.append(run.summary._json_dict)

    # .config에는 하이퍼파라미터가 담겨 있습니다.
    #  _로 시작하는 특수 값은 제외합니다.
    config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")})

    # .name은 사람이 읽기 쉬운 형태의 run 이름입니다.
    name_list.append(run.name)

runs_df = pd.DataFrame(
    {"summary": summary_list, "config": config_list, "name": name_list}
)

runs_df.to_csv("project.csv")
```

<h3 id="get-the-starting-time-for-a-run">
  run의 시작 시간 조회
</h3>

이 코드 스니펫은 run이 생성된 시각을 조회합니다.

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

api = wandb.Api()

run = api.run("entity/project/run_id")
start_time = run.created_at
```

<h3 id="upload-files-to-a-finished-run">
  완료된 run에 파일 업로드하기
</h3>

다음 코드 스니펫은 선택한 파일을 완료된 run에 업로드합니다.

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

api = wandb.Api()

run = api.run("entity/project/run_id")
run.upload_file("file_name.extension")
```

<h3 id="download-a-file-from-a-run">
  run에서 파일 다운로드하기
</h3>

다음 예제는 cifar 프로젝트에서 run ID uxte44z7에 연결된 "model-best.h5" 파일을 찾아 로컬에 저장합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.file("model-best.h5").download()
```

<h3 id="download-all-files-from-a-run">
  run의 모든 파일 다운로드
</h3>

다음 코드는 run에 연결된 모든 파일을 찾아 로컬에 저장합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
for file in run.files():
    file.download()
```

<h3 id="get-runs-from-a-specific-sweep">
  특정 스윕의 run 조회
</h3>

이 스니펫은 특정 스윕에 연결된 모든 run을 다운로드합니다.

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

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
sweep_runs = sweep.runs
```

<h3 id="get-the-best-run-from-a-sweep">
  스윕에서 최적의 run 조회
</h3>

다음 스니펫은 지정한 스윕에서 가장 성능이 좋은 run을 조회합니다.

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

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
best_run = sweep.best_run()
```

`best_run`은 스윕 설정의 `metric` 매개변수에 정의된 메트릭 값이 가장 좋은 run입니다.

<h3 id="download-the-best-model-file-from-a-sweep">
  스윕에서 최고 성능 모델 파일 다운로드하기
</h3>

이 스니펫은 모델 파일을 `model.h5`에 저장한 run들로 구성된 스윕에서 검증 정확도가 가장 높은 모델 파일을 다운로드합니다.

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

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
runs = sorted(sweep.runs, key=lambda run: run.summary.get("val_acc", 0), reverse=True)
val_acc = runs[0].summary.get("val_acc", 0)
print(f"Best run {runs[0].name} with {val_acc}% val accuracy")

runs[0].file("model.h5").download(replace=True)
print("Best model saved to model-best.h5")
```

<h3 id="delete-all-files-with-a-given-extension-from-a-run">
  run에서 특정 확장자의 파일 모두 삭제
</h3>

이 스니펫은 run에서 특정 확장자를 가진 파일을 삭제합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")

extension = ".png"
files = run.files()
for file in files:
    if file.name.endswith(extension):
        file.delete()
```

<h3 id="download-system-metrics-data">
  시스템 메트릭 데이터 다운로드
</h3>

이 스니펫은 run의 모든 시스템 리소스 사용량 메트릭을 담은 데이터프레임을 생성한 다음 CSV 파일로 저장합니다.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
system_metrics = run.history(stream="events")
system_metrics.to_csv("sys_metrics.csv")
```

<h3 id="update-summary-metrics">
  summary 메트릭 업데이트
</h3>

딕셔너리를 전달하여 summary 메트릭을 업데이트할 수 있습니다.

```python theme={"system"}
summary.update({"key": val})
```

<h3 id="get-the-command-that-ran-the-run">
  run을 실행한 명령어 조회
</h3>

각 run은 자신을 실행한 명령어를 캡처하여 run 개요 페이지에 표시합니다. API로 이 명령어를 가져오려면 다음을 실행하세요.

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

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")

meta = json.load(run.file("wandb-metadata.json").download())
program = ["python"] + [meta["program"]] + meta["args"]
```
