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

# W&B Models の使い方

> 数行のコードで実験をトラッキングし、メトリクスをログして、結果を可視化しながら W&B Models を使い始めましょう。

機械学習ワークフローでモデル Artifacts をトラッキング、共有、管理するために、W\&B をいつどのように使用するかを学びます。このページでは、実験のログ、レポートの生成、各タスクに適した W\&B API を使用したログ済みデータへのアクセスについて説明します。

このチュートリアルでは、以下を使用します。

* [W\&B Python SDK](/ja/models/ref/python) (`wandb.sdk`): トレーニング中に実験をログして監視するため。
* [W\&B Public API](/ja/models/ref/python/public-api) (`wandb.apis.public`): ログされた実験データをクエリして分析するため。
* [W\&B Reports and Workspaces API](/ja/models/ref/wandb_workspaces) (`wandb.wandb-workspaces`): 調査結果を要約する Reports を作成するため。

<div id="sign-up-and-create-an-api-key">
  ## サインアップしてAPIキーを発行する
</div>

W\&B でお使いのマシンを認証するには、まず [wandb.ai/settings](https://wandb.ai/settings) で APIキーを発行する必要があります。APIキーをコピーして、安全に保管してください。

<div id="install-and-import-packages">
  ## パッケージをインストールしてインポートする
</div>

この手順で使用する W\&B ライブラリと、その他の必要なパッケージをインストールします。

```python theme={null}
pip install wandb
```

W\&B Python SDK をインポートします:

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

以下のコードブロックで、チームのentityを指定してください。

```python theme={null}
TEAM_ENTITY = "<Team_Entity>" # チームのentityに置き換えてください
PROJECT = "my-awesome-project"
```

<div id="train-a-model">
  ## モデルをトレーニングする
</div>

次のコードは、基本的な機械学習ワークフローをシミュレートしています。モデルをトレーニングし、メトリクスをログし、モデルをアーティファクトとして保存します。

トレーニング中に W\&B と連携するには、W\&B Python SDK (`wandb.sdk`) を使用します。[`wandb.Run.log()`](/ja/models/ref/python/experiments/run/#method-runlog) を使用して損失をログし、次に [`wandb.Artifact`](/ja/models/ref/python/experiments/artifact) を使用してトレーニング済みモデルをアーティファクトとして保存してから、最後に [`Artifact.add_file`](/ja/models/ref/python/experiments/artifact#add_file) を使用してモデルファイルを追加します。

```python theme={null}
import random # データのシミュレーション用

def model(training_data: int) -> int:
    """Model simulation for demonstration purposes."""
    return training_data * 2 + random.randint(-1, 1)  

# 重みとノイズのシミュレーション
weights = random.random() # ランダムな重みを初期化
noise = random.random() / 5  # ノイズをシミュレートするための小さなランダムノイズ

# ハイパーパラメーターと設定
config = {
    "epochs": 10,  # トレーニングするエポック数
    "learning_rate": 0.01,  # オプティマイザーの学習率
}

# コンテキストマネージャーを使用して W&B runs を初期化・終了する
with wandb.init(project=PROJECT, entity=TEAM_ENTITY, config=config) as run:    
    # トレーニングループのシミュレーション
    for epoch in range(config["epochs"]):
        xb = weights + noise  # シミュレートされた入力トレーニングデータ
        yb = weights + noise * 2  # シミュレートされたターゲット出力（入力ノイズの2倍）
        
        y_pred = model(xb)  # モデルの予測
        loss = (yb - y_pred) ** 2  # 平均二乗誤差損失

        print(f"epoch={epoch}, loss={loss}")
        # エポックと損失を W&B にログする
        run.log({
            "epoch": epoch,
            "loss": loss,
        })

    # モデルアーティファクトの一意の名前
    model_artifact_name = f"model-demo"  

    # シミュレートされたモデルファイルを保存するローカルパス
    PATH = "model.txt" 

    # モデルをローカルに保存する
    with open(PATH, "w") as f:
        f.write(str(weights)) # モデルの重みをファイルに保存する

    # アーティファクトオブジェクトを作成する
    # ローカルに保存したモデルをアーティファクトオブジェクトに追加する
    artifact = wandb.Artifact(name=model_artifact_name, type="model", description="My trained model")
    artifact.add_file(local_path=PATH)
    artifact.save()
```

前のコードブロックの主なポイントは次のとおりです。

* トレーニング中にメトリクスをログするには、`wandb.Run.log()` を使用します。
* モデル (データセットなど) を アーティファクト として W\&B プロジェクトに保存するには、`wandb.Artifact` を使用します。

モデルをトレーニングして アーティファクト として保存したら、W\&B のRegistryに公開できます。[`wandb.Run.use_artifact()`](/ja/models/ref/python/experiments/run/#method-runuse_artifact) を使用してプロジェクトから アーティファクト を取得し、Model Registry で公開できるように準備します。`wandb.Run.use_artifact()` には主に次の 2 つの目的があります。

* プロジェクトから アーティファクト オブジェクトを取得します。
* アーティファクト を run への入力としてマークし、再現性とトレーサビリティを確保します。詳細は [リネージ マップを作成して表示する](/ja/models/registry/lineage) を参照してください.

<div id="view-the-training-data-in-the-dashboard">
  ## ダッシュボードでトレーニングデータを確認する
</div>

[https://wandb.ai/login](https://wandb.ai/login) でアカウントにログインします

**Projects** に `my-awesome-project` (または前の手順でプロジェクト名として使用した名前) が表示されます。これをクリックして、プロジェクトの Workspace に入ります。

ここでは、これまでに実行したすべての run の詳細を確認できます。このスクリーンショットでは、コードを数回再実行した結果、複数の run が生成されています。各 run にはランダムに生成された名前が付けられます。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-mintlify-bbaa8558/WFp4KVXokCsq3jMD/images/quickstart/quickstart_image.png?fit=max&auto=format&n=WFp4KVXokCsq3jMD&q=85&s=76c31c3a05dbeba3a1e02ac343992eb3" alt="run 名、メトリクス、ステータス情報を含む表ビューで複数の run が表示されている W&B プロジェクトページ" width="3456" height="2004" data-path="images/quickstart/quickstart_image.png" />
</Frame>

<div id="publish-the-model-to-the-wb-registry">
  ## モデルを W\&B Registry に公開する
</div>

組織内の他のメンバーとモデルを共有するには、`wandb.Run.link_artifact()` を使用して [コレクション](/ja/models/registry/create_collection) に公開します。次のコードは、アーティファクトを [Registry](/ja/models/registry) にリンクして、チームからアクセスできるようにします。

```python theme={null}
# アーティファクト名はチームのプロジェクト内の特定のアーティファクト バージョンを指定します
artifact_name = f'{TEAM_ENTITY}/{PROJECT}/{model_artifact_name}:v0'
print("Artifact name: ", artifact_name)

REGISTRY_NAME = "Model" # W&B のRegistry名
COLLECTION_NAME = "DemoModels"  # Registry内のコレクション名

# Registry内のアーティファクトのターゲット パスを作成します
target_path = f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"
print("Target path: ", target_path)

with wandb.init(entity=TEAM_ENTITY, project=PROJECT) as run:
    model_artifact = run.use_artifact(artifact_or_name=artifact_name, type="model")
    run.link_artifact(artifact=model_artifact, target_path=target_path)
```

`wandb.Run.link_artifact()` を実行すると、モデル アーティファクト はRegistry内の `DemoModels` コレクションに追加されます。そこから、バージョン履歴、[リネージ マップ](/ja/models/registry/lineage)、その他の[メタデータ](/ja/models/registry/registry_cards)などの詳細を確認できます。

アーティファクト をRegistryにリンクする方法の詳細については、[アーティファクト をRegistryにリンクする](/ja/models/registry/link_version)を参照してください。

<div id="retrieve-model-artifact-from-registry-for-inference">
  ## 推論用にRegistryからモデルのアーティファクトを取得する
</div>

推論にモデルを使用するには、`wandb.Run.use_artifact()` を使用して、公開済みのアーティファクトをRegistryから取得します。これによりアーティファクトオブジェクトが返され、その後 [`wandb.Artifact.download()`](/ja/models/ref/python/experiments/artifact/#method-artifactdownload) を使用してアーティファクトをローカルファイルにダウンロードできます。

```python theme={null}
REGISTRY_NAME = "Model"  # W&B のRegistry名
COLLECTION_NAME = "DemoModels"  # Registry内のコレクション名
VERSION = 0 # 取得するアーティファクトのバージョン

model_artifact_name = f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"
print(f"モデルのアーティファクト名: {model_artifact_name}")

with wandb.init(entity=TEAM_ENTITY, project=PROJECT) as run:
    registry_model = run.use_artifact(artifact_or_name=model_artifact_name)
    local_model_path = registry_model.download()
```

Registryからアーティファクトを取得する方法の詳細については、[Registryからアーティファクトをダウンロードする](/ja/models/registry/download_use_artifact)を参照してください。

使用する機械学習フレームワークによっては、重みを読み込む前にモデルのアーキテクチャを再構築する必要がある場合があります。具体的な手順は、使用するフレームワークとモデルによって異なるため、ここでは省略します。

<div id="share-your-finds-with-a-report">
  ## 見つけた内容をreportで共有する
</div>

<Note>
  W\&B Report and Workspace API はパブリックプレビューです。
</Note>

作業内容を要約するには、[report](/ja/models/reports) を作成して共有します。プログラムでreportを作成するには、[W\&B Report and Workspace API](/ja/models/ref/wandb_workspaces/reports) を使用します。

まず、W\&B Reports API をインストールします。

```python theme={null}
pip install wandb wandb-workspaces -qqq
```

次のコードブロックは、Markdown、パネルグリッドなどを含む複数のブロックで構成されたreportを作成します。さらにブロックを追加したり、既存のブロックの内容を変更したりして、reportをカスタマイズできます。

コードブロックの出力には、作成されたreportの URL へのリンクが表示されます。このリンクをブラウザで開くと、reportを表示できます。

```python theme={null}
import wandb_workspaces.reports.v2 as wr

experiment_summary = """This is a summary of the experiment conducted to train a simple model using W&B."""
dataset_info = """The dataset used for training consists of synthetic data generated by a simple model."""
model_info = """The model is a simple linear regression model that predicts output based on input data with some noise."""

report = wr.Report(
    project=PROJECT,
    entity=TEAM_ENTITY,
    title="My Awesome Model Training Report",
    description=experiment_summary,
    blocks= [
        wr.TableOfContents(),
        wr.H2("Experiment Summary"),
        wr.MarkdownBlock(text=experiment_summary),
        wr.H2("Dataset Information"),
        wr.MarkdownBlock(text=dataset_info),
        wr.H2("Model Information"),
        wr.MarkdownBlock(text = model_info),
        wr.PanelGrid(
            panels=[
                wr.LinePlot(title="Train Loss", x="Step", y=["loss"], title_x="Step", title_y="Loss")
                ],
            ),  
    ]

)

# reportをW&Bに保存する
report.save()
```

プログラムでreportを作成する方法や、W\&B App を使ってインタラクティブにreportを作成する方法について詳しくは、W\&B Docs の Developer guide にある [reportを作成する](/ja/models/reports/create-a-report) を参照してください。

<div id="query-the-registry">
  ## Registryをクエリする
</div>

[W\&B Public APIs](/ja/models/ref/python/public-api) を使用すると、W\&B の履歴データをクエリし、分析、管理できます。これは、アーティファクト のリネージを追跡したり、異なるバージョンを比較したり、モデルのパフォーマンスを経時的に分析したりする際に役立ちます。

次のコードブロックは、特定のコレクション内にあるすべての アーティファクト について、Model Registry をクエリする方法を示しています。コレクションを取得し、そのバージョンを順に処理して、各 アーティファクト の名とバージョンを出力します。

```python theme={null}
import wandb

# wandb API を初期化する
api = wandb.Api()

# 文字列 `model` を含み、タグ `text-classification` または `latest` エイリアスを
# 持つすべてのアーティファクトバージョンを検索する
registry_filters = {
    "name": {"$regex": "model"}
}

# 論理演算子 $or を使用してアーティファクトバージョンをフィルターする
version_filters = {
    "$or": [
        {"tag": "text-classification"},
        {"alias": "latest"}
    ]
}

# フィルターに一致するすべてのアーティファクトバージョンのイテラブルを返す
artifacts = api.registries(filter=registry_filters).collections().versions(filter=version_filters)

# 見つかった各アーティファクトの名前、コレクション、エイリアス、タグ、作成日時を出力する
for art in artifacts:
    print(f"artifact name: {art.name}")
    print(f"collection artifact belongs to: { art.collection.name}")
    print(f"artifact aliases: {art.aliases}")
    print(f"tags attached to artifact: {art.tags}")
    print(f"artifact created at: {art.created_at}\n")
```

Registryのクエリについて詳しくは、[Registryアイテムをクエリする](/ja/models/registry/search_registry/#query-registry-items-with-mongodb-style-queries)を参照してください。
