メインコンテンツまでスキップ

制限とパフォーマンス

高速なページのためのベストプラクティス

W&Bのページをより高速で応答性の高いものにするために、この提案された範囲内でログを記録してください。

記録されたメトリクス

wandb.logを使って、実験メトリクスをトラッキングします。ログが記録されると、これらのメトリクスはチャートを生成し、テーブルに表示されます。ログのデータが多すぎると、アプリが遅くなります。

ユニークなメトリクスの数

ユニークなメトリクスの合計数を10,000以下に抑えてください。

wandb.log({
"a": 1, # "a" はユニークなメトリクスです
"b": {
"c": "hello", # "b.c" はユニークなメトリクスです
"d": [1, 2, 3] # "b.d" はユニークなメトリクスです
}) # 3つのユニークなメトリクスが記録されました
注意

入れ子になった値は自動的に平坦化されるため、辞書を渡すとドットで区切られた名前に変換されます。設定値の場合、名前に3つのドットをサポートしています。要約値の場合は、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を超える異なるメトリクスのログ記録は、プロジェクトのワークスペースやrunsのテーブル操作を遅くする可能性があります。

値の幅

ログに記録される単一の値のサイズを1 MB未満に制限し、単一のwandb.log呼び出しのサイズを25 MB未満に制限してください。この制限はwandb.Mediaタイプのwandb.Imagewandb.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以下に制限してください。大きな値をログに記録すると、プロジェクトのワークスペースやrunsテーブルの操作が遅くなる可能性があります。

# ✅ 推奨
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数は、プロジェクトのワークスペースやRunsテーブルの操作を遅くさせる可能性があります。特に、グルーピングが有効になっている場合や、Runに多くの異なるメトリクスが含まれている場合に影響があります。

ファイル数

1つのRunにアップロードされるファイルの総数を1,000以下にしてください。多くのファイルをログに記録する必要がある場合は、W&Bアーティファクトを使用することができます。1つのRunで1,000ファイルを超えると、Runのページの表示が遅くなることがあります。

Pythonスクリプトのパフォーマンス

Pythonスクリプトのパフォーマンスが低下する一般的な方法は以下の通りです:

  1. データのサイズが大きすぎます。大きなデータサイズは、トレーニングループに>1msのオーバーヘッドをもたらすことがあります。
  2. ネットワークの速度や、W&Bバックエンドの設定方法
  3. wandb.logを1秒に数回以上呼び出すことです。これは、wandb.logが呼び出されるたびにトレーニングループにわずかな遅延が発生するためです。
備考

頻繁なログ記録がトレーニングのRunを遅くしていますか? ログ記録の戦略を変えることでパフォーマンスを向上させる方法については、このColabを参照してください。

私たちは、レート制限を超える制限を主張していません。Pythonクライアントは、制限を超えるリクエストを自動的に指数関数的にバックオフし、再試行するため、これが透明になるはずです。コマンドライン上で "ネットワーク障害"と表示されます。未払いのアカウントの場合、利用が合理的な閾値を超える極端なケースで連絡することがあります。

レート制限

W&B APIは、IPおよびAPIキーによってレート制限されています。新しいアカウントは、1分あたり200リクエストに制限されています。このレートでは、約15プロセスを並行して実行し、それらをスロットルせずに報告できます。 wandbクライアントが制限されていることを検出した場合、将来的にデータを送信するのをバックオフして再試行します。15を超えるプロセスを並行して実行する必要がある場合は、contact@wandb.com にメールを送信してください。

スイープの場合、最大20の並行エージェントをサポートしています。

Was this page helpful?👍👎