training_step is called once for each optimizer
If model returns multiple optimizers, a closure is created for each one of them. This results in training_step called for each optimizer which is wasteful in most cases.
In addition to this, training_step is being called with additional parameter ( optimizer id) - this is not documented and results in an exception which ( calling 2 argument function with 3 parameters )
To Reproduce
Steps to reproduce the behavior:

Create model with two or more optimizers.
training_step should take ( batch, batch_nb) as per documentation and a print statement printing batch_nb
Run trainer.fit
Exception should be thrown re call to training_step with 3 parameters
change training_step to take ( batch, batch_nb, optimizer_idx)
Run trainer.fit
Observe batch_nb printed as many times as there are optimizers.

Expected behavior

In most cases training_step can be called only once - that's efficiency improvement.
Documentation should specify the extra parameter being passed when multiple optimizers are used, to prevent the exception.