MCPcopy Create free account
hub / github.com/deepspeedai/DeepSpeed / save_checkpoint

Method save_checkpoint

deepspeed/runtime/engine.py:4859–4956  ·  view source on GitHub ↗

Save training checkpoint Arguments: save_dir: Required. Directory for saving the checkpoint tag: Optional. Checkpoint tag used as a unique identifier for the checkpoint, global step is used if not provided. Tag name must be the same across all ranks.

(self, save_dir, tag=None, client_state={}, save_latest=True, exclude_frozen_parameters=False)

Source from the content-addressed store, hash-verified

4857 logger.warning(msg)
4858
4859 def save_checkpoint(self, save_dir, tag=None, client_state={}, save_latest=True, exclude_frozen_parameters=False):
4860 """Save training checkpoint
4861
4862 Arguments:
4863 save_dir: Required. Directory for saving the checkpoint
4864 tag: Optional. Checkpoint tag used as a unique identifier for the checkpoint, global step is
4865 used if not provided. Tag name must be the same across all ranks.
4866 client_state: Optional. State dictionary used for saving required training states in the client code.
4867 save_latest: Optional. Save a file 'latest' pointing to the latest saved checkpoint.
4868 exclude_frozen_parameters: Optional. Exclude frozen parameters from checkpointed state.
4869 Important: all processes must call this method and not just the process with rank 0. It is
4870 because each process needs to save its master weights and scheduler+optimizer states. This
4871 method will hang waiting to synchronize with other processes if it's called just for the
4872 process with rank 0.
4873
4874 """
4875 if not save_dir:
4876 raise ValueError(f"save_dir must be a non-empty string, got {save_dir!r}")
4877
4878 if self._optimizer_has_ckpt_event_prologue():
4879 # Custom preparation for checkpoint save, if applicable
4880 self.optimizer.checkpoint_event_prologue()
4881
4882 rank = self.local_rank if self.use_node_local_storage() else self.global_rank
4883
4884 # This is to make sure the checkpoint names are created without collision
4885 # There seems to be issue creating them in parallel
4886
4887 # Ensure save_dir directory exists
4888 if rank == 0:
4889 self.checkpoint_engine.makedirs(save_dir, exist_ok=True)
4890 dist.barrier()
4891
4892 if tag is None:
4893 tag = f"global_step{self.global_steps}"
4894
4895 # Ensure tag is a string
4896 tag = str(tag)
4897 commit_info = CheckpointCommitInfo(tag=tag, save_dir=save_dir, save_latest=save_latest)
4898
4899 self.checkpoint_engine.create(commit_info)
4900
4901 # Ensure checkpoint tag is consistent across ranks
4902 self._checkpoint_tag_validation(tag)
4903
4904 if self.has_moe_layers:
4905 self.save_non_zero_checkpoint = False
4906 self._create_checkpoint_file(save_dir, tag, False)
4907 self._save_moe_checkpoint(save_dir,
4908 tag,
4909 client_state=client_state,
4910 exclude_frozen_parameters=exclude_frozen_parameters)
4911
4912 # We distribute the task of saving layer checkpoint files among
4913 # data parallel instances, so all procs should call _save_checkpoint.
4914 # All procs then call module_state_dict(), but only procs of data
4915 # parallel rank 0 save the general model params.
4916 if not self.has_moe_layers: