You could use automatic mixed-precision 3 to use float16, where applicable, or apply torch.utils.checkpoint to trade compute for memory.
Changing the data type manually to float16 or another (low-precision) format might work, but you would have to take care of the stability of all operations in your model, e.g. since the values might over-/underflow more easily.
The number of workers in a DataLoader doesn’t change the GPU memory usage.