What are the trade-offs between static and dynamic activation checkpointing during large model training?