モデルのログ
このガイドでは、W&Bのrunにモデルをログし、それと対話する方法について説明します。
以下のAPIは、実験管理ワークフローの一部としてモデルを追跡するのに便利です。このページにリストされたAPIを使用して、モデルに加えてメトリクス、テーブル、メディア、その他のオブジェクトを迅速にログすることができます。
W&Bは以下の場合、W&B Artifactsを使用することを推奨します:
- モデル以外のシリアライズされたデータ(データセット、プロンプトなど)の異なるバージョンを作成し、追跡したい場合。
- モデルやその他のオブジェクトのリネージグラフを探索したい場合。
- これらのメソッドで作成されたモデルアーティファクトと対話し、プロパティを更新(メタデータ、エイリアス、説明など)したい場合。
W&B Artifactsや高度なバージョン管理ユースケースの詳細については、Artifactsのドキュメントを参照してください。
このColabノートブックを参照して、このページで説明されているAPIを使用するエンドツーエンドの例を確認してください。
モデルをW&Bのrunにログする
log_model
を使用して、指定したディレクトリー内にコンテンツを含むモデルアーティファクトをログします。log_model
メソッドは、結果として得られるモデルアーティファクトをW&Bのrunの出力としてもマークします。
モデルをW&Bのrunの入力または出力としてマークした場合、そのモデルの依存関係と関連付けを追跡できます。W&BのApp UIでモデルのリネージを表示します。詳細については、Artifactsチャプターのアーティファクトグラフの探索とトラバースページを参照してください。
モデルファイルが保存されているパスをpath
パラメータに提供します。パスはローカルファイル、ディレクトリー、またはs3://bucket/path
のような外部バケットへの参照URIであることができます。
<>
で囲まれた値は自身の値に置き換えてください。
import wandb
# W&Bのrunを初期化
run = wandb.init(project="<your-project>", entity="<your-entity>")
# モデルをログする
run.log_model(path="<path-to-model>", name="<name>")
オプションで、モデルアーティファクトの名前をname
パラメータに提供できます。name
が指定されていない場合、W&Bは入力パスのベース名にrun IDを追加した名前を使用します。
モデルに割り当てた、またはW&Bが割り当てたname
を記憶してください。use_model
メソッドを使用してモデルパスを取得するために名前が必要です。
可能なパラメータの詳細については、APIリファレンスガイドのlog_model
を参照してください。
例:モデルをrunにログする
import os
import wandb
from tensorflow import keras
from tensorflow.keras import layers
config = {"optimizer": "adam", "loss": "categorical_crossentropy"}
# W&Bのrunを初期化
run = wandb.init(entity="charlie", project="mnist-experiments", config=config)
# ハイパーパラメーター
loss = run.config["loss"]
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
num_classes = 10
input_shape = (28, 28, 1)
# トレーニングアルゴリズム
model = keras.Sequential(
[
layers.Input(shape=input_shape),
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation="softmax"),
]
)
# モデルをトレーニング用にコンフィギュレーション
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)
# モデルを保存
model_filename = "model.h5"
local_filepath = "./"
full_path = os.path.join(local_filepath, model_filename)
model.save(filepath=full_path)
# モデルをW&Bのrunにログする
run.log_model(path=full_path, name="MNIST")
run.finish()
ユーザーがlog_model
を呼び出すと、MNIST
という名前のモデルアーティファクトが作成され、model.h5
ファイルがモデルアーティファクトに追加されました。ターミナルまたはノートブックには、モデルがログされたrunに関する情報が表示されます。
View run different-surf-5 at: https://wandb.ai/charlie/mnist-experiments/runs/wlby6fuw
5 W&Bファイル、0メディアファイル、1アーティファクトファイル、0その他ファイルを同期しました
ログは以下で見つかります: ./wandb/run-20231206_103511-wlby6fuw/logs
ログされたモデルをダウンロードして使用
W&Bのrunに以前ログされていたモデルファイルにアクセスし、ダウンロードするためにuse_model
関数を使用します。
取得したいモデルファイルが格納されているモデルアーティファクトの名前を指定します。提供する名前は、既存のログされたモデルアーティファクトの名前と一致する必要があります。
ファイルをlog_model
でログする際にname
を定義しなかった場合、デフォルト名は入力パスのベース名にrun IDを追加されたものになります。
他の値も<>
で囲まれた部分を自身の値に置き換えてください:
import wandb
# runを初期化
run = wandb.init(project="<your-project>", entity="<your-entity>")
# モデルにアクセスしてダウンロード。ダウンロードされたアーティファクトへのパスを返します
downloaded_model_path = run.use_model(name="<your-model-name>")
use_model
関数はダウンロードされたモデルファイルのパスを返します。このパスを追跡し、後でこのモデルをリンクする場合に備えてください。上記のコードスニペットでは、返されたパスがdownloaded_model_path
という変数に格納されています。
例:ログされたモデルをダウンロードして使用
例えば、以下のコードスニペットでは、ユーザーがuse_model
APIを呼び出しています。取得したいモデルアーティファクトの名前を指定し、バージョン/エイリアスも提供しています。APIから返されたパスがdownloaded_model_path
変数に格納されています。
import wandb
entity = "luka"
project = "NLP_Experiments"
alias = "latest" # モデルバージョンのセマンティックなニックネームまたは識別子
model_artifact_name = "fine-tuned-model"
# runを初期化
run = wandb.init(project=project, entity=entity)
# モデルにアクセスしてダウンロード。ダウンロードされたアーティファクトへのパスを返します
downloaded_model_path = run.use_model(name = f"{model_artifact_name}:{alias}")
可能なパラメータと返り値の詳細については、APIリファレンスガイドのuse_model
を参照してください。
モデルをW&B Model Registryにログしリンクする
link_model
メソッドを使用して、モデルファイルをW&Bのrunにログし、それをW&B Model Registryにリンクします。登録済みのモデルが存在しない場合、registered_model_name
パラメータに指定した名前で新しいモデルが自動的に作成されます。
モデルをリンクすることは、モデルを集中管理されたチームのリポジトリーに「ブックマーク」または「公開」することに似ています。これにより、チームの他のメンバーがそのモデルを閲覧したり使用したりすることができます。
モデルをリンクすると、そのモデルはModel Registryに複製されません。また、そのモデルがプロジェクトからレジストリに移動することもありません。リンクされたモデルは、プロジェクト内の元のモデルへのポインターです。
Model Registryを使用して、タスクごとに最高のモデルを整理し、モデルのライフサイクルを管理し、MLライフサイクル全体での追跡と監査を簡素化し、Webhooksやジョブで自動化された下流のアクションを実行できます。
Registered Modelは、Model Registryにリンクされたモデルバージョンのコレクションまたはフォルダーです。登録済みのモデルは、通常、単一のモデリングユースケースやタスクの候補モデルを表します。
以下のコードスニペットは、link_model
APIを使用してモデルをリンクする方法を示しています。他の値も<>
で囲まれた部分を自身の値に置き換えてください:
import wandb
run = wandb.init(entity="<your-entity>", project="<your-project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()
オプションのパラメータについての詳細は、APIリファレンスガイドのlink_model
を参照してください。
もしregistered-model-name
がModel Registry内に既に存在する登録済みモデルの名前と一致する場合、モデルはその登録済みモデルにリンクされます。もしそのような登録済みモデルが存在しない場合、新しいものが作成され、モデルは最初にリンクされるものとして扱われます。
例えば、Model Registryに"Fine-Tuned-Review-Autocompletion"という名前の既存の登録済みモデルがあり、そのモデルに既にいくつかのモデルバージョン(v0, v1, v2)がリンクされているとします。link_model
をregistered-model-name="Fine-Tuned-Review-Autocompletion"
で呼び出すと、新しいモデルはこの既存の登録済みモデルにv3としてリンクされます。この名前で登録済みモデルが存在しない場合、新しいものが作成され、新しいモデルはv0としてリンクされます。
例:モデルをW&B Model Registryにログしリンクする
例えば、以下のコードスニペットは、モデルファイルをログし、モデルを"Fine-Tuned-Review-Autocompletion"
という登録済みモデルにリンクしています。
このために、ユーザーはlink_model
APIを呼び出します。APIを呼び出すとき、モデルのコンテンツを指すローカルのファイルパス(path
)と登録済みモデルの名前(registered_model_name
)を提供します。
import wandb
path = "/local/dir/model.pt"
registered_model_name = "Fine-Tuned-Review-Autocompletion"
run = wandb.init(project="llm-evaluation", entity="noa")
run.link_model(path=path, registered_model_name=registered_model_name)
run.finish()
リマインダー:登録済みモデルはブックマークされたモデルバージョンのコレクションを収容します。