【正解】B
【0からの解説】
①前提知識:深層学習のトレーニングでは、CPU が画像の読み込み・デコード・データ拡張などの前処理を行ってミニバッチを作り、それを GPU に転送して GPU が順伝播・逆伝播を計算します。CPU 側のデータ供給(入力パイプライン)が遅いと、GPU は次のバッチを待つ間アイドル状態になります。PyTorch の DataLoader では、num_workers を増やすと複数のワーカープロセスで並列にデータを読み込み・前処理でき、pin_memory=True にするとページロック(固定)メモリにバッチを置くことで CPU から GPU への転送が高速化され、非同期転送も可能になります。
②症状の整理:GPU 使用率が頻繁に 0% に落ちる一方、CPU 使用率は常に 90% 超。これは GPU の計算能力が不足しているのではなく、CPU 側のデータ供給が追いつかず GPU が待たされている「入力パイプラインのボトルネック」の典型的な兆候です。目標は GPU 使用率の最大化によるトレーニング時間短縮です。
③正解の理由:DataLoader の num_workers を増やしてデータの読み込み・前処理を並列化し(ワーカーの数は vCPU 数を目安に調整)、pin_memory を有効にしてホストからデバイスへの転送を高速化すれば、GPU に途切れなくバッチが供給され、GPU のアイドル時間が減ってトレーニング時間が短縮されます。ボトルネックそのものに直接対処する施策です。なお CPU がすでに飽和している場合は、vCPU 数の多いマシンタイプへの変更も併せて検討します。
【誤りの選択肢】
A:バッチサイズを大きくすると 1 ステップで CPU が準備すべきデータ量も増えるため、CPU 側のボトルネックは解消されません。GPU の待ち時間の割合はほとんど変わらず、根本原因に対処していません。
C:GPU を増やしても、データを供給する CPU 側が追いつかない状態は変わらず、むしろ待たされる GPU が増えるだけです。コストが増えるうえ、分散トレーニングのコード変更も必要で、GPU 使用率はさらに下がる可能性があります。
D:AMP は GPU 上の行列演算を高速化する手法ですが、ボトルネックは GPU の計算ではなく CPU のデータ供給です。GPU の計算が速くなるほど待ち時間の割合が増え、GPU 使用率はかえって低下します。
【参考】
Cloud Profiler を使用してモデルのトレーニング パフォーマンスをプロファイリングする: ノートブックGemini Enterprise Agent Platform サーバーレス トレーニングのコンピューティング リソースを構成する