As mentionned above, checkpointing a single layer will have no effect. This is expected.
You will need to checkpoint multiple layers at once to allow the checkpointing to reduce the number of buffers saved by the network.
Note that in this new network, you linear layers are huge: each will take 800MB just to store the weights + 800MB for their gradients. So that might explain why your model uses so much memory.
You can try to checkpoint the three self.param and the cat together to remove the largest biffers. But the buffers in this net are very small compared to the weights, so the difference will be quite small.
Also on GPU, we use a custom allocator that does not return the memory to the OS when it is released. So you will need to use torch.cuda.memory_allocated() to check how much memory is actually used. As nvidia-smi will return a wrong number.