> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-1917.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> MLFlow からデータをインポートし、W&B に保存したデータをエクスポートまたは更新する

# データのインポートとエクスポート

W\&B Public API を使用して、データをエクスポートまたはインポートします。

<Note>
  この機能を使用するには python>=3.8 が必要です
</Note>

<div id="import-data-from-mlflow">
  ## MLFlow からデータをインポートする
</div>

W\&B では、Experiments、Runs、アーティファクト、メトリクス、その他のメタデータなど、MLFlow のデータをインポートできます。

依存関係をインストールします:

```shell theme={null}
# 注意: py38以上が必要です
pip install wandb[importers]
```

W\&B にログインします。初めてログインする場合は、表示される案内に従ってください。

```shell theme={null}
wandb login
```

既存のMLFlowサーバーから、すべてのrunをインポートします：

```py theme={null}
from wandb.apis.importers.mlflow import MlflowImporter

importer = MlflowImporter(mlflow_tracking_uri="...")

runs = importer.collect_runs()
importer.import_runs(runs)
```

デフォルトでは、`importer.collect_runs()` は MLFlow サーバー上のすべての run を収集します。特定のサブセットだけを upload したい場合は、独自の run の iterable を作成して importer に渡すこともできます。

```py theme={null}
import mlflow
from wandb.apis.importers.mlflow import MlflowRun

client = mlflow.tracking.MlflowClient(mlflow_tracking_uri)

runs: Iterable[MlflowRun] = []
for run in mlflow_client.search_runs(...):
    runs.append(MlflowRun(run, client))

importer.import_runs(runs)
```

<Note>
  Databricks MLflow からインポートする場合は、最初に [Databricks CLI を設定する](https://docs.databricks.com/dev-tools/cli/index.html)必要があることがあります。

  前の手順で `mlflow-tracking-uri="databricks"` を設定してください。
</Note>

アーティファクトのインポートをスキップするには、`artifacts=False` を渡します。

```py theme={null}
importer.import_runs(runs, artifacts=False)
```

特定の W\&B entity と project にインポートするには、`Namespace` を渡します:

```py theme={null}
from wandb.apis.importers import Namespace

importer.import_runs(runs, namespace=Namespace(entity, project))
```

<div id="export-data">
  ## データをエクスポートする
</div>

Public API を使用して、W\&B に保存したデータをエクスポートまたは更新できます。この API を使用する前に、スクリプトからデータをログしてください。詳細は [クイックスタート](/ja/models/quickstart/) を参照してください。

**Public API のユースケース**

* **データをエクスポートする**: Jupyter Notebook でカスタム分析を行うために、データフレーム を取得します。データを分析したら、新しい分析 run を作成して結果をログすることで、分析結果を Sync できます。例: `wandb.init(job_type="analysis")`
* **既存の Runs を更新する**: W\&B run に関連付けられてログされたデータを更新できます。たとえば、一連の Runs の設定を更新して、アーキテクチャや、元はログされていなかったハイパーパラメーターなどの追加情報を含めることができます。

利用可能な関数の詳細は、[Generated Reference Docs](/ja/models/ref/python/public-api/) を参照してください。

<div id="create-an-api-key">
  ### APIキーを作成する
</div>

APIキーは、マシンをW\&Bに認証するために使用します。

APIキーを作成するには、**Personal API key** または **Service Account API key** タブを選択して詳細を確認してください。

<Tabs>
  <Tab title="Personal API key">
    あなたのユーザー ID に紐づく個人用 APIキーを作成するには、次の手順に従います。

    1. W\&B にログインし、プロフィールアイコンをクリックして、**User Settings** をクリックします。
    2. **Create new API key** をクリックします。
    3. APIキーにわかりやすい名を付けます。
    4. **Create** をクリックします。
    5. 表示された APIキーをすぐにコピーし、安全な場所に保管してください。
  </Tab>

  <Tab title="Service account API key">
    サービスアカウントに紐づくAPIキーを作成するには、次の手順に従います。

    1. チームまたは組織の設定で、**Service Accounts** タブにアクセスします。
    2. 一覧からサービスアカウントを検索します。
    3. **action (<Icon icon="ellipsis" iconType="solid" />)** メニューをクリックし、**Create API key** をクリックします。
    4. APIキーの名を入力し、**Create** をクリックします。
    5. 表示されたAPIキーをすぐにコピーして、安全な場所に保管します。
    6. **Done** をクリックします。

    異なる環境やワークフローに対応するため、1つのサービスアカウントに対して複数のAPIキーを作成できます。
  </Tab>
</Tabs>

<Warning>
  APIキー全体が表示されるのは、作成時の一度だけです。ダイアログを閉じた後は、APIキー全体を再度表示できません。Settings に表示されるのはキーID (キーの先頭部分) のみです。APIキー全体を紛失した場合は、新しいAPIキーを作成する必要があります。
</Warning>

安全な保管方法については、[APIキーを安全に保管する](/ja/platform/app/settings-page/user-settings/#store-and-handle-api-keys-securely)を参照してください。

<div id="store-and-handle-api-keys-securely">
  ## APIキーを安全に保管・管理する
</div>

APIキーを使うとW\&Bアカウントにアクセスできるため、パスワードと同様に厳重に保護する必要があります。次のベストプラクティスに従ってください。

<div id="recommended-storage-methods">
  ### 推奨される保管方法
</div>

* **シークレットマネージャー**: [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/)、[HashiCorp Vault](https://developer.hashicorp.com/vault)、[Azure Key Vault](https://azure.microsoft.com/en-us/products/key-vault)、[Google Secret Manager](https://cloud.google.com/security/products/secret-manager) などの専用のシークレット管理システムを使用してください。
* **パスワードマネージャー**: 信頼できるパスワードマネージャーアプリを使用してください。
* **OS レベルのキーチェーン**: macOS Keychain、Windows Credential Manager、または Linux Secret Service にキーを保存します。本番環境での使用は推奨されません。

<div id="what-to-avoid">
  ### 避けるべきこと
</div>

* APIキーを Git などのバージョン管理システムにコミットしないでください。
* APIキーを平文の設定ファイルに保存しないでください。
* APIキーをコマンドライン引数として渡さないでください。`ps` のような OS コマンドの出力に表示されるためです。
* APIキーをメール、チャット、その他の暗号化されていないチャネルで共有しないでください。
* APIキーをソースコードにハードコードしないでください。

APIキーが漏えいした場合は、ただちに W\&B アカウントから該当の APIキーを削除し、[サポート](mailto:support@wandb.ai) または担当の AISE に連絡してください。

<div id="environment-variables">
  ### 環境変数
</div>

コード内でAPIキーを使用する場合は、環境変数経由で渡します。

```bash theme={null}
export WANDB_API_KEY="your-api-key-here"
```

この方法では、キーをソースコードに含めずに済み、必要に応じてローテーションしやすくなります。

<Warning>
  `ps` などの OS コマンドの出力に表示される可能性があるため、環境変数を command と同じ行で設定するのは避けてください。

  ```bash theme={null}
  # APIキーがプロセスマネージャーに露出するおそれがあるため、このパターンは避けてください
  export WANDB_API_KEY="your-api-key-here" ./my-script.sh
  ```
</Warning>

<div id="sdk-version-compatibility">
  ### SDKのバージョン互換性
</div>

新しいAPIキーは、従来のキーより長くなっています。古いバージョンの`wandb`または`weave` SDKで認証すると、APIキーの長さに関するエラーが発生することがあります。

**解決策**: より新しいバージョンのSDKに更新してください。

* `wandb` SDK v0.22.3+

  ```bash theme={null}
  pip install --upgrade wandb==0.22.3
  ```
* `weave` SDK v0.52.17+
  ```bash theme={null}
  pip install --upgrade weave==0.52.17
  ```

すぐにSDKをアップグレードできない場合は、回避策として`WANDB_API_KEY`環境変数でAPIキーを設定してください。

<div id="find-the-run-path">
  ### run パスを検索する
</div>

Public APIを使用するには、多くの場合、`<entity>/<project>/<run_id>` 形式の run パスが必要です。アプリのUIで run のページを開き、[Overview タブ ](/ja/models/track/public-api-guide/#overview-tab)をクリックすると、run パスを確認できます。

<div id="export-run-data">
  ### run データをエクスポート
</div>

完了済みまたは実行中の run からデータをダウンロードします。一般的な用途としては、Jupyter Notebook で独自の分析を行うためにデータフレームをダウンロードしたり、自動化された環境で独自のロジックを使用したりすることが挙げられます。

```python theme={null}
import wandb

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

run オブジェクトで最もよく使用される属性は次のとおりです。

| Attribute       | Meaning                                                                                                                                                                    |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run.config`    | トレーニング run のハイパーパラメーターや、データセット Artifact を作成する run の前処理 method など、run の設定情報を格納した辞書です。これらは run の入力と考えてください。                                                                  |
| `run.history()` | モデルのトレーニング中に変化する損失などの値を保存するための、辞書の list です。command `run.log()` はこの object に値を追加します。                                                                                        |
| `run.summary`   | run の結果を要約した情報を格納する辞書です。accuracy や損失のようなスカラー値の場合もあれば、大きなファイルの場合もあります。デフォルトでは、`run.log()` はログした時系列の最終値を summary に設定します。summary の内容は直接設定することもできます。summary は run の出力と考えてください。 |

過去の run のデータを変更または更新することもできます。デフォルトでは、api object の単一インスタンスがすべてのネットワーク request をキャッシュします。実行中のスクリプトでリアルタイムの情報が必要な場合は、`api.flush()` を呼び出して更新された値を取得してください。

<div id="understanding-different-run-attributes">
  ### さまざまなrunの属性を理解する
</div>

次のコードスニペットは、runを作成し、いくつかのデータをログした後、runの属性にアクセスする方法を示しています。

```python theme={null}
import wandb
import random

with wandb.init(project="public-api-example") as run:
    n_epochs = 5
    config = {"n_epochs": n_epochs}
    run.config.update(config)
    for n in range(run.config.get("n_epochs")):
        run.log(
            {"val": random.randint(0, 1000), "loss": (random.randint(0, 1000) / 1000.00)}
        )
```

以下のセクションでは、上記のrunオブジェクトの属性ごとのさまざまな出力について説明します

<div id="runconfig">
  ##### `run.config`
</div>

```python theme={null}
{"n_epochs": 5}
```

<div id="runsummary">
  #### `run.summary`
</div>

```python theme={null}
{
    "_step": 4,
    "_timestamp": 1644345412,
    "_wandb": {"runtime": 3},
    "loss": 0.041,
    "val": 525,
}
```

<div id="sampling">
  ### サンプリング
</div>

デフォルトのhistory methodでは、メトリクスが固定数のサンプルにサンプリングされます (デフォルトは500で、`samples` \_\_ 引数で変更できます) 。大規模なrunのすべてのデータをエクスポートする場合は、`run.scan_history()` methodを使用できます。詳細は、[API Reference](/ja/models/ref/python/public-api)を参照してください。

<div id="querying-multiple-runs">
  ### 複数の Runs をクエリする
</div>

<Tabs>
  <Tab title="DataFrame と CSV">
    このスクリプト例では、project を検索し、名前、設定、summary 統計を含む Runs の CSV を出力します。`<entity>` と `<project>` は、それぞれお使いの W\&B entity と project 名に置き換えてください。

    ```python theme={null}
    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 には、
        # accuracy などのメトリクスの出力キー/値が含まれます。
        # 大きなファイルを除外するために ._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()` を使って project 内の複数の Runs をまたいでクエリすることもできます。最も一般的な用途は、カスタム分析のために Runs データをエクスポートすることです。クエリインターフェースは、[MongoDB が使用している](https://www.mongodb.com/docs/manual/reference/mql/query-predicates/)ものと同じです。

    ```python theme={null}
    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` オブジェクトが返されます。デフォルトでは、このオブジェクトは必要に応じて一度に 50 件の Runs を順次読み込みますが、`per_page` キーワード引数で 1 ページあたりの読み込み件数を変更できます。

`api.runs` は `order` キーワード引数も受け取ります。デフォルトの並び順は `-created_at` です。結果を昇順にするには、`+created_at` を指定します。設定や summary の値でソートすることもできます。たとえば、`summary.val_acc` や `config.experiment_name` です。

<div id="error-handling">
  ### エラー処理
</div>

W\&B サーバーとの通信中にエラーが発生すると、`wandb.CommError` が送出されます。元の例外は `exc` 属性から確認できます。

<div id="get-the-latest-git-commit-through-the-api">
  ### API を使って最新の git コミットを取得する
</div>

UI で run をクリックし、続けて run ページの Overview タブをクリックすると、最新の git コミットを確認できます。これは `wandb-metadata.json` ファイルにも含まれています。Public API を使用すると、`run.commit` で git ハッシュを取得できます。

<div id="get-a-runs-name-and-id-during-a-run">
  ### run の実行中に run 名と ID を取得する
</div>

`wandb.init()` を呼び出すと、スクリプトからランダムな run ID や人が読める run 名に次のようにアクセスできます。

* 一意の run ID (8 文字のハッシュ) : `run.id`
* ランダムな run 名 (人が読める名前) : `run.name`

run に役立つ識別子を設定する方法を検討している場合は、次の設定をおすすめします。

* **Run ID**: 生成されたハッシュのままにしてください。これはプロジェクト内のすべての run で一意である必要があります。
* **Run name**: 短く、わかりやすく、できれば一意なものにしてください。そうすることで、チャート上の異なる線を見分けやすくなります。
* **Run notes**: run で何をしているかを簡単に説明するのに最適です。`wandb.init(notes="your notes here")` で設定できます。
* **Run tags**: run tags で項目を動的にトラッキングし、UI のフィルターを使用して表を必要な run だけに絞り込めます。タグはスクリプトから設定でき、Runs table と run ページの Overview タブの両方で UI から編集できます。詳しい手順は[こちら](/ja/models/runs/tags/)を参照してください。

<div id="public-api-examples">
  ## Public APIの例
</div>

<div id="export-data-to-visualize-in-matplotlib-or-seaborn">
  ### matplotlib または seaborn で可視化するためにデータをエクスポートする
</div>

一般的なエクスポート方法については、[API examples](/ja/models/ref/python/public-api/)を参照してください。カスタムプロットまたは展開したRuns tableのダウンロードボタンをクリックすると、ブラウザからCSVをダウンロードすることもできます。

<div id="read-metrics-from-a-run">
  ### run のメトリクスを読み取る
</div>

この例では、`"<entity>/<project>/<run_id>"` に保存された run から、`run.log({"accuracy": acc})` で保存したタイムスタンプと accuracy を出力します。

```python theme={null}
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"])
```

<div id="filter-runs">
  ### Runs をフィルタリングする
</div>

MongoDB Query Language を使用してフィルタリングできます。

<div id="date">
  #### 日付
</div>

```python theme={null}
runs = api.runs(
    "<entity>/<project>",
    {"$and": [{"created_at": {"$lt": "YYYY-MM-DDT##", "$gt": "YYYY-MM-DDT##"}}]},
)
```

<div id="read-specific-metrics-from-a-run">
  ### run から特定のメトリクスを読み取る
</div>

run から特定のメトリクスを取得するには、`keys` 引数を使用します。`run.history()` を使用する場合のデフォルトのサンプル数は 500 です。特定のメトリクスを含まないログ済みの step は、出力データフレームでは `NaN` として表示されます。`keys` 引数を指定すると、API は一覧にあるメトリクス key を含む step をより高い頻度でサンプリングします。

```python theme={null}
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"])
```

<div id="compare-two-runs">
  ### 2 つの run を比較する
</div>

これにより、`run1` と `run2` で異なる設定パラメーターが出力されます。

```python theme={null}
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
```

<div id="update-metrics-for-a-run-after-the-run-has-finished">
  ### 完了した run のメトリクスを更新する
</div>

この例では、以前の run の精度を `0.9` に設定します。また、以前の run の精度ヒストグラムを `numpy_array` のヒストグラムに置き換えます。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="rename-a-metric-in-a-completed-run">
  ### 完了したrun内のメトリクス名を変更する
</div>

この例では、表内のsummary列の名前を変更します。

```python theme={null}
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>
  列名の変更が適用されるのは表のみです。チャートでは引き続き、メトリクスは元の名前で参照されます。
</Note>

<div id="update-config-for-an-existing-run">
  ### 既存のrunの設定を更新する
</div>

この例では、設定項目の 1 つを更新します。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="export-system-resource-consumptions-to-a-csv-file">
  ### システムリソースの使用量をCSVファイルにエクスポートする
</div>

以下のスニペットでは、システムリソースの使用量を検索し、その結果をCSVに保存します。

```python theme={null}
import wandb

with wandb.Api().run("<entity>/<project>/<run_id>") as run:

    system_metrics = run.history(stream="events")
    system_metrics.to_csv("sys_metrics.csv")
```

<div id="get-unsampled-metric-data">
  ### サンプリングされていないメトリクスデータを取得する
</div>

history からデータを取得する場合、デフォルトでは 500 ポイントにサンプリングされます。`run.scan_history()` を使用すると、ログされたすべてのデータポイントを取得できます。以下は、history にログされた `loss` の全データポイントをダウンロードする例です。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="get-paginated-data-from-history">
  ### history からページ単位でデータを取得する
</div>

バックエンドでのメトリクス取得が遅い場合や、API リクエストがタイムアウトする場合は、各リクエストがタイムアウトしないように、`scan_history` のページサイズを小さくしてみてください。デフォルトのページサイズは 500 なので、さまざまなサイズを試して、最も適した値を確認できます:

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="export-metrics-from-all-runs-in-a-project-to-a-csv-file">
  ### プロジェクト内のすべての Runs のメトリクスを CSV ファイルにエクスポートする
</div>

このスクリプトはプロジェクト内の Runs を取得し、それらの名、設定、summary の統計を含む Runs のデータフレームと CSV を生成します。`<entity>` と `<project>` は、それぞれ W\&B の entity とプロジェクトの名に置き換えてください。

```python theme={null}
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 には出力のキーと値が含まれます
    #  たとえば accuracy などのメトリクスです。
    #  大きなファイルを除外するため、._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")
```

<div id="get-the-starting-time-for-a-run">
  ### run の開始時刻を取得する
</div>

このコード例では、run が作成された時刻を取得します。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="upload-files-to-a-finished-run">
  ### 完了済みの run にファイルをアップロードする
</div>

以下のコードスニペットは、選択したファイルを完了済みの run にアップロードします。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="download-a-file-from-a-run">
  ### run からファイルをダウンロードする
</div>

これは、cifar プロジェクトの run ID uxte44z7 に紐づくファイル "model-best.h5" を検索し、ローカルに保存します。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="download-all-files-from-a-run">
  ### run からすべてのファイルをダウンロードする
</div>

これにより、run に関連付けられたすべてのファイルを見つけてローカルに保存します。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="get-runs-from-a-specific-sweep">
  ### 特定の sweep から run を取得する
</div>

このスニペットでは、特定の sweep に関連するすべての run をダウンロードします。

```python theme={null}
import wandb

api = wandb.Api()

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

<div id="get-the-best-run-from-a-sweep">
  ### sweep から最適な run を取得する
</div>

以下のスニペットは、指定した sweep から最適な run を取得します。

```python theme={null}
import wandb

api = wandb.Api()

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

`best_run` は、sweep 設定の `metric` パラメーターで指定されたメトリクスが最も優れている run です。

<div id="download-the-best-model-file-from-a-sweep">
  ### sweep から最良のモデルファイルをダウンロードする
</div>

このスニペットでは、モデルファイルを `model.h5` として保存した Runs を含む sweep から、検証精度が最も高いモデルファイルをダウンロードします。

```python theme={null}
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")
```

<div id="delete-all-files-with-a-given-extension-from-a-run">
  ### run から指定した拡張子のファイルをすべて削除する
</div>

このスニペットでは、run から指定した拡張子のファイルをすべて削除します。

```python theme={null}
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()
```

<div id="download-system-metrics-data">
  ### システムメトリクスデータをダウンロードする
</div>

このスニペットは、run のシステムリソース消費に関するすべてのメトリクスを含むデータフレームを生成し、CSV に保存します。

```python theme={null}
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")
```

<div id="update-summary-metrics">
  ### summaryメトリクスを更新する
</div>

辞書を渡してsummaryメトリクスを更新できます。

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

<div id="get-the-command-that-ran-the-run">
  ### run の実行に使用されたコマンドを取得する
</div>

各 run では、その run の起動に使用されたコマンドが run の概要ページに記録されます。API からこのコマンドを取得するには、次を実行します。

```python theme={null}
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"]
```
