Стратегия распространения, которая использует все процессоры и все графические процессоры - PullRequest
0 голосов
/ 08 марта 2020

У меня есть зеркальная стратегия распределения, определенная ниже:

# create an instance of ImageDataGenerator
gen_train = ImageDataGenerator(
  rotation_range=20,
  width_shift_range=0.1,
  height_shift_range=0.1,
  shear_range=0.1,
  zoom_range=0.2,
  horizontal_flip=True,
  preprocessing_function=preprocess_input
)

gen_test = ImageDataGenerator(
  preprocessing_function=preprocess_input
)

batch_size = 512

# create generators
train_generator = gen_train.flow_from_directory(
  train_path,
  shuffle=True,
  target_size=IMAGE_SIZE,
  batch_size=batch_size,
)
valid_generator = gen_test.flow_from_directory(
  valid_path,
  target_size=IMAGE_SIZE,
  batch_size=batch_size,
)

strategy = tf.distribute.MirroredStrategy()
print(f'Number of devices: {strategy.num_replicas_in_sync}')
with strategy.scope():
    ptm = PretrainedModel(
        input_shape=IMAGE_SIZE + [3],
        weights='imagenet',
        include_top=False)

    # freeze pretrained model weights
    ptm.trainable = False

    # map the data into feature vectors

    # Keras image data generator returns classes one-hot encoded

    K = len(folders) # number of classes
    x = Flatten()(ptm.output)
    x = Dense(K, activation='softmax')(x)

    # create a model object
    model = Model(inputs=ptm.input, outputs=x)

    # view the structure of the model
    model.summary()

    model.compile(
      loss='categorical_crossentropy',
      optimizer='adam',
      metrics=['accuracy']
    )

# fit the model
r = model.fit(
  train_generator,
  validation_data=valid_generator,
  epochs=10,
  steps_per_epoch=int(np.ceil(len(image_files) / batch_size)),
  validation_steps=int(np.ceil(len(valid_image_files) / batch_size)),
)

Я наблюдаю следующее:

  1. время выполнения не сильно меняется, если я не использую стратегия. Если у меня 4 GPU, я должен увеличить размер пакета на 4?

  2. Процессоры не используют полностью (GPU имеют). Существует ли стратегия распределения, которая полностью использует ЦП?

1 Ответ

0 голосов
/ 08 марта 2020
  1. Размер пакета является глобальным batch_size, поэтому вам нужно умножить размер одного пакета на количество графических процессоров

  2. Чтобы лучше использовать ресурсы, вы должны использовать tf.data и прочитайте руководство по производительности: https://www.tensorflow.org/guide/data_performance. Также вы должны прочитать это: https://www.tensorflow.org/guide/distributed_training

...