Thank you for your reply.
Currently I am using
model.fit(train_data, epochs=self.epochs, validation_data=val_data, verbose=1)

Where train_data is a tf.data.Dataset with
train_data = tf.data.Dataset.from_tensor_slices((train_ivs, train_logr, train_metric))
train_data = train_data.shuffle(buffer_size=train_ivs.shape[0], seed=self.seed, 
                                reshuffle_each_iteration=True)
train_data = train_data.batch(self.batch_size)
train_data = train_data.prefetch(tf.data.AUTOTUNE)

The evaluation step does not seem to cause any problem either.