You could pass a list to the model and apply a loop internally to forward each sample, which would be slower than the batched approach. Also it would most likely break data parallel approaches.
The advantage of a batch of inputs is that the operations in your model can directly use the batched data without unwrapping it. If you use a Python list, the methods won’t accept these lists at the moment, and you would have to add a “fake batch dimension” to each sample.
There is ongoing work to add utilities such as vmap etc., which might relax this condition in the future.