Limits & Performance
高速ページのためのベストプラクティス
W&Bのページを高速で応答性の高い状態に保つために、以下の推奨範囲内でログを記録してください。
ログされたメトリクス
wandb.log
を使用して実験メトリクスを追跡します。ログに記録されたこれらのメトリクスは、チャートを生成しテーブルに表示されます。ただし、データが多すぎるとアプリが遅くなります。
メトリクスの異なる数
メトリクスの異なる合計数を10,000未満に保ってください。
wandb.log(
{
"a": 1, # "a" は異なるメトリクス
"b": {
"c": "hello", # "b.c" は異なるメトリクス
"d": [1, 2, 3], # "b.d" は異なるメトリクス
},
}
) # 3つの異なるメトリクスがログに記録された
ネストされた値は自動的にフラットにするので、辞書を渡すとドットで区切られた名前に変換されます。configの値については、名前に3つのドットをサポートします。summaryの値については、4つのドットをサポートします。
関連するメディアを同じメトリクス名にログします:
for i, img in enumerate(images):
# ❌ 非推奨
wandb.log({f"pred_img_{i}": wandb.Image(image)})
# ✅ 推奨
wandb.log({"pred_imgs": [wandb.Image(image) for image in images]})
異なるメトリクスの数が10,000を超えると、プロジェクトのワークスペースおよびrunのテーブル操作が遅くなる可能性があります。
値の幅
単一のログ値のサイズを1MB未満、wandb.log
呼び出し全体のサイズを25MB未満に制限してください。この制限は、wandb.Media
タイプ(wandb.Image
、wandb.Audio
など)には適用されません。
# ❌ 非推奨
wandb.log({"wide_key": range(10000000)})
# ❌ 非推奨
with f as open("large_file.json", "r"):
large_data = json.load(f)
wandb.log(large_data)
これらの推奨値を超える幅のある値をログに記録すると、データは保存および追跡されますが、プロットのロード時間が遅くなる可能性があります。幅のある値は、該当メトリクスだけでなく、run内のすべてのメトリクスのプロットロード時間に影響を与える可能性があります。
メトリクスの頻度
ログに記録するメトリクスに適した頻度を選定してください。一般的なルールとして、メトリクスが幅広いほど、少ない頻度でログを記録するべきです。具体的には、以下を推奨します:
- スカラー: メトリクスあたり100,000ポイント未満
- メディア: メトリクスあたり50,000ポイント未満
- ヒストグラム: メトリクスあたり10,000ポイント未満
# 総計100万ステップのトレーニングループ
for step in range(1000000):
# ❌ 非推奨
wandb.log(
{
"scalar": step, # 100,000スカラー
"media": wandb.Image(...), # 100,000画像
"histogram": wandb.Histogram(...), # 100,000ヒストグラム
}
)
# ✅ 推奨
if step % 1000 == 0:
wandb.log(
{
"histogram": wandb.Histogram(...), # 10,000ヒストグラム
},
commit=False,
)
if step % 200 == 0:
wandb.log(
{
"media": wandb.Image(...), # 50,000画像
},
commit=False,
)
if step % 100 == 0:
wandb.log(
{
"scalar": step, # 100,000スカラー
},
commit=True,
) # ステップごとのメトリクスをまとめてコミット
これらのガイドラインを超えると、W&Bは引き続きログデータを受け付けますが、ページのロード時間が遅くなる可能性があります。
Configのサイズ
runのconfigの合計サイズを10MB未満に制限してください。大きな値をログに記録すると、プロジェクトのワークスペースおよびrunのテーブル操作が遅くなる可能性があります。
# ✅ 推奨
wandb.init(
config={
"lr": 0.1,
"batch_size": 32,
"epochs": 4,
}
)
# ❌ 非推奨
wandb.init(
config={
"steps": range(10000000),
}
)
# ❌ 非推奨
with f as open("large_config.json", "r"):
large_config = json.load(f)
wandb.init(config=large_config)
Runの数
単一のプロジェクトにおけるrunの合計数を10,000未満に保ってください。runの数が多いと、特にグループ化が有効になっている場合や、異なるメトリクスの数が多い場合に、プロジェクトのワークスペースおよびrunのテーブル操作が遅くなる可能性があります。
ファイルの数
単一のrunにアップロードするファイルの合計数を1,000未満に保ってください。大量のファイルをログに記録する必要がある場合は、W&B Artifactsを使用できます。単一のrunで1,000ファイルを超えると、runのページが遅くなる可能性があります。
Pythonスクリプトのパフォーマンス
Pythonスクリプトのパフォーマンスが低下する一般的な原因はいくつかあります:
- データのサイズが大きすぎる。データサイズが大きいと、トレーニングループに1ms以上のオーバーヘッドが発生する可能性があります。
- ネットワークの速度とW&Bのバックエンドの設定方法
wandb.log
を1秒間に複数回呼び出す。wandb.log
を呼び出すたびにトレーニングループに小さな遅延が追加されるためです。
ログの頻度がトレーニングrunを遅くしていますか? ログ戦略を変更してパフォーマンスを向上させる方法については、このColabをチェックしてください。
私たちはレート制限を超える限界を設けていません。Pythonクライアントは、自動的に指数的なバックオフを行い、限界を超えたリクエストを再試行するため、これはあなたにとって透明であるべきです。コマンドラインでは「Network failure」と表示されます。無料アカウントの場合、使用量が合理的な範囲を超える極端な場合には連絡を差し上げることがあります。
レート制限
W&BのAPIは、IPとAPIキーによってレート制限されています。無料アカウントは毎分50リクエスト、支払い済みアカウントは毎分200リクエストに制限されています。このレートにより、約15のプロセスを並行して実行し、スロットルなしにレポートすることができます。wandb クライアントが制限されていると検出した場合、バックオフして将来的にデータの送信を再試行します。15以上のプロセスを並行して実行する必要がある場合は、contact@wandb.com にメールを送ってください。
sweepsの場合、最大20の並行エージェントをサポートしています。