Based on your output, the FP16 approach uses less memory in the run, while creates a higher peak memory.
As explained before, the higher memory peak might be created e.g. by the different profiled kernels when cudnn.benchmark=True is used.