Определение максимального размера партии с помощью TensorFlow Object Detection API

API обнаружения объектов TF по умолчанию захватывает всю память графического процессора, поэтому трудно сказать, насколько я смогу еще больше увеличить размер пакета. Обычно я просто продолжаю увеличивать его, пока не получу ошибку CUDA OOM.

PyTorch, с другой стороны, не захватывает всю память GPU по умолчанию, поэтому легко увидеть, с каким процентом мне осталось работать без всяких проб и ошибок.

Есть ли лучший способ определить размер пакета с помощью API обнаружения объектов TF, который мне не хватает? Что-то вроде allow-growth флаг для model_main.py?

1 ответ

Решение

Я искал в исходном коде, и я не нашел FLAG, связанных с этим.

Но в файле model_main.py из https://github.com/tensorflow/models/blob/master/research/object_detection/model_main.py вы можете найти следующее определение основной функции:

def main(unused_argv):
  flags.mark_flag_as_required('model_dir')
  flags.mark_flag_as_required('pipeline_config_path')
  config = tf.estimator.RunConfig(model_dir=FLAGS.model_dir)

  train_and_eval_dict = model_lib.create_estimator_and_inputs(
      run_config=config,
...

идея состоит в том, чтобы изменить его аналогичным образом, например, следующим образом:

config_proto = tf.ConfigProto()
config_proto.gpu_options.allow_growth = True

config = tf.estimator.RunConfig(model_dir=FLAGS.model_dir, session_config=config_proto)

Итак, добавляя config_proto и меняется config но поддерживая все остальные вещи равными.

Также, allow_growth заставляет программу использовать столько памяти GPU, сколько ей нужно. Таким образом, в зависимости от вашего графического процессора вы можете получить всю потребляемую память. В этом случае вы можете использовать

config_proto.gpu_options.per_process_gpu_memory_fraction = 0.9

который определяет долю памяти для использования.

Надеюсь, это помогло.

Если вы не хотите изменять файл, кажется, что проблема должна быть открыта, потому что я не вижу никаких флагов. если только флаг

flags.DEFINE_string('pipeline_config_path', None, 'Path to pipeline config '
                    'file.')

Означает что-то связанное с этим. Но я так не думаю из-за того, что кажется в model_lib.py это относится к конфигурациям train, eval и infer, а не к конфигурации использования GPU.

Другие вопросы по тегам