在TensorFlow重新训练期间,诗人

时间:2018-06-03 19:06:06

标签: python tensorflow gpu gpgpu pre-trained-model

我正在关注TensorFlow Retraining for Poets的说明。 GPU利用率似乎很低,因此我根据Using GPU中的说明检测了retrain.py脚本。该日志验证TF图是否在GPU上构建。我正在重新培训大量的课程和图像。请帮我调整TF和the retraining script中的参数以利用GPU。我从this question知道我应该减少批量大小。什么构成"批量大小"并不明显。这个脚本。我有60个班级和1MM训练图像。它首先制作1MM的瓶颈文件。那部分是CPU而且很慢,我理解这一点。然后它以4,000步进行训练,在该步骤中每次拍摄100张图像。这是批次吗?如果我减少每步的图像数量,GPU利用率会上升吗?

2 个答案:

答案 0 :(得分:4)

我通常会执行以下操作。

  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 :(得分:3)

让我们一个个地回答您的问题:

  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,follow the steps in the Tensorflow documentation you mentioned-只需输入 tf.debugging.set_log_device_placement(True)

作为脚本的第一条语句

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