在诗人的 TensorFlow 重新训练期间的 GPU 利用率为 0%



我正在遵循TensorFlow Retraining for Poets的说明。 GPU 利用率似乎很低,因此我按照使用 GPU 中的说明检测了retrain.py脚本。日志验证 TF 图是否正在 GPU 上构建。我正在为大量的课程和图像进行再培训。请帮助我调整 TF 中的参数和重新训练脚本以使用 GPU

我知道这个问题,我应该减少批量大小。 此脚本的"批量大小"构成并不明显。 我有 60 节课和 1MM 培训图像。 它从制作 1MM 瓶颈文件开始。那部分是CPU和慢,我理解这一点。 然后它以 4,000 个步骤进行训练,其中每次在步骤中拍摄 100 张图像。这是批次吗?如果我减少每个步骤的图像数量,GPU 利用率会上升吗?

您的帮助将不胜感激!

我通常做以下事情。

  1. 检查您是否正在使用 GPU。

    tf.test.is_gpu_available()
    
  2. 监控 GPU 使用情况。

    watch -n 0.1 nvidia-smi
    
  3. 如果您的 CPU 使用率较低。之后写这个

    train_batches = train.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE)
    train_batches = train_batches.prefetch(1) #  This will prefetch one batch
    
  4. 如果您的 GPU 使用率仍然很低。

    batch_size = 128
    
  5. 如果您的 GPU 仍然不足。可能:

    • 您的图形太简单,无法使用更多 GPU。
    • 代码错误或软件包错误。

让我们一一提出您的问题:

  1. 批量大小是一次完成训练/测试/验证的图像数。您可以在脚本中找到相应的参数及其默认值:
parser.add_argument(
'--train_batch_size',
type=int,
default=100,
help='How many images to train on at a time.'
)
parser.add_argument(
'--test_batch_size',
type=int,
default=-1,
help="""
How many images to test on. This test set is only used once, to evaluate
the final accuracy of the model after training completes.
A value of -1 causes the entire test set to be used, which leads to more
stable results across runs.
"""
)
parser.add_argument(
'--validation_batch_size',
type=int,
default=100,
help="""
How many images to use in an evaluation batch. This validation set is
used much more often than the test set, and is an early indicator of how
accurate the model is during training.
A value of -1 causes the entire validation set to be used, which leads to
more stable results across training iterations, but may be slower on large
training sets.
"""
)

因此,如果要减小训练批大小,则应使用此参数运行脚本:

python -m retrain --train_batch_size=16

我还建议您将批大小的数量指定为 2 的幂(16、32、64、128 等(。这个数字取决于您使用的 GPU。GPU 的内存越少,您应该使用的批大小就越小。在 GPU 中使用 8Gb,您可以尝试 16 的批量大小。

  1. 要发现您是否正在使用GPU,您可以按照您提到的Tensorflow文档中的步骤进行操作 - 只需将tf.debugging.set_log_device_placement(True)

作为脚本的第一个语句

设备放置日志记录会导致将打印任何张量分配或操作。

最新更新