It makes sense that IOPS could limit the reading speed as the data are lots of images.
Here is what I think:
Let’s assume the IOPS is a fix number N.
If the data reading workload is under the drive’s capability (let’s assume the corresponding batch size is n), the data loading time cost should be similar when the batch size is lower than n.
Or we can assume that the batch/time curve is linear(proportional) when batch>n and is flattened when batch is really small  batch<=n.
So I did a test with varying batch size numbers:

gpu 1 batch 32
Time 2.505s (2.551s)	Speed 12.8 samples/s	Data 1.808s (1.849s)
gpu 1 bch 64  (cpu 5,  worker 24)
Time 4.707s (4.897s)    Speed 13.6 samples/s  Data 3.453s (3.599s)
bch 16
Time 1.349s (1.351s)    Speed 11.9 samples/s    Data 0.900s (0.917s)
proportional to batchsize??
bch 8
Time 0.814s (0.832s)    Speed 9.8 samples/s     Data 0.471s (0.476s)
bch 4
Time 0.542s (0.590s)    Speed 7.4 samples/s     Data 0.242s (0.259s)
…

It is surprising that even the batch size is as small as 4， the reading time is still almost follows the linear curve trend instead of flattened.
Does it mean the reading is very slow and even 4 batch size is already large enough to make the data loading the bottle neck.
BTW, I am working on a cluster. The shared file system could cause this issue.